iclavue 11.3.12 → 11.3.13

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 CHANGED
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire as __createRequire } from "node:module";
3
3
  const require = __createRequire(import.meta.url);
4
- // clavue v11.3.12 (built from source)
4
+ // clavue v11.3.13 (built from source)
5
5
  // Copyright (c) Anthropic PBC. All rights reserved.
6
6
  const __clavueCliArgs = process.argv.slice(2);
7
7
  if (__clavueCliArgs.length === 1 && (__clavueCliArgs[0] === "--version" || __clavueCliArgs[0] === "-v" || __clavueCliArgs[0] === "-V")) {
8
- console.log("11.3.12 (Clavue)");
8
+ console.log("11.3.13 (Clavue)");
9
9
  process.exit(0);
10
10
  }
11
11
  var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __knownSymbol=(name,symbol2)=>(symbol2=Symbol[name])?symbol2:Symbol.for("Symbol."+name),__typeError=msg=>{throw TypeError(msg)};var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0}),__require=(x3=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x3,{get:(a2,b3)=>(typeof require<"u"?require:a2)[b3]}):x3)(function(x3){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+x3+'" is not supported')});var __esm=(fn,res)=>function(){return fn&&(res=(0,fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __commonJS=(cb,mod)=>function(){return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var __export=(target,all4)=>{for(var name in all4)__defProp(target,name,{get:all4[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var __using=(stack,value,async)=>{if(value!=null){typeof value!="object"&&typeof value!="function"&&__typeError("Object expected");var dispose4,inner;async&&(dispose4=value[__knownSymbol("asyncDispose")]),dispose4===void 0&&(dispose4=value[__knownSymbol("dispose")],async&&(inner=dispose4)),typeof dispose4!="function"&&__typeError("Object not disposable"),inner&&(dispose4=function(){try{inner.call(this)}catch(e2){return Promise.reject(e2)}}),stack.push([async,dispose4,value])}else async&&stack.push([async]);return value},__callDispose=(stack,error40,hasError)=>{var E2=typeof SuppressedError=="function"?SuppressedError:function(e2,s2,m3,_2){return _2=Error(m3),_2.name="SuppressedError",_2.error=e2,_2.suppressed=s2,_2},fail3=e2=>error40=hasError?new E2(e2,error40,"An error was suppressed during disposal"):(hasError=!0,e2),next=it=>{for(;it=stack.pop();)try{var result2=it[1]&&it[1].call(it[2]);if(it[0])return Promise.resolve(result2).then(next,e2=>(fail3(e2),next()))}catch(e2){fail3(e2)}if(hasError)throw error40};return next()};var featureFlags_exports={};__export(featureFlags_exports,{feature:()=>feature});function feature(_flag){return!1}var init_featureFlags=__esm({"src/utils/featureFlags.ts"(){__name(feature,"feature")}});var clavueEnv_exports={};__export(clavueEnv_exports,{CLAVUE_API_KEY_ENV:()=>CLAVUE_API_KEY_ENV,CLAVUE_AUTH_TOKEN_ENV:()=>CLAVUE_AUTH_TOKEN_ENV,CLAVUE_BASE_URL_ENV:()=>CLAVUE_BASE_URL_ENV,CLAVUE_OFFICIAL_API_ORIGIN:()=>CLAVUE_OFFICIAL_API_ORIGIN,CLAVUE_OFFICIAL_WEB_ORIGIN:()=>CLAVUE_OFFICIAL_WEB_ORIGIN,brandCredentialEnvPatch:()=>brandCredentialEnvPatch,clavueAuthRequiredMessage:()=>clavueAuthRequiredMessage,getClavueApiKey:()=>getClavueApiKey,getClavueAuthToken:()=>getClavueAuthToken,getClavueBaseUrl:()=>getClavueBaseUrl,hasClavueApiKey:()=>hasClavueApiKey,hasClavueAuthToken:()=>hasClavueAuthToken,normalizeClavueBrandEnv:()=>normalizeClavueBrandEnv});function trimEnv(value){return String(value??"").trim()}function getClavueApiKey(env5=process.env){let primary=trimEnv(env5[CLAVUE_API_KEY_ENV]);return primary||trimEnv(env5.ANTHROPIC_API_KEY)||void 0}function getClavueAuthToken(env5=process.env){let primary=trimEnv(env5[CLAVUE_AUTH_TOKEN_ENV]);return primary||trimEnv(env5.ANTHROPIC_AUTH_TOKEN)||void 0}function getClavueBaseUrl(env5=process.env){let primary=trimEnv(env5[CLAVUE_BASE_URL_ENV]);return primary||trimEnv(env5.ANTHROPIC_BASE_URL)||void 0}function hasClavueApiKey(env5=process.env){return!!getClavueApiKey(env5)}function hasClavueAuthToken(env5=process.env){return!!getClavueAuthToken(env5)}function normalizeClavueBrandEnv(env5=process.env){let clavueKey=trimEnv(env5[CLAVUE_API_KEY_ENV]),clavueAuth=trimEnv(env5[CLAVUE_AUTH_TOKEN_ENV]),clavueBase=trimEnv(env5[CLAVUE_BASE_URL_ENV]),anthKey=trimEnv(env5.ANTHROPIC_API_KEY),anthAuth=trimEnv(env5.ANTHROPIC_AUTH_TOKEN),anthBase=trimEnv(env5.ANTHROPIC_BASE_URL);clavueKey?(env5[CLAVUE_API_KEY_ENV]=clavueKey,(!anthKey||anthKey!==clavueKey)&&(env5.ANTHROPIC_API_KEY=clavueKey)):anthKey&&(env5[CLAVUE_API_KEY_ENV]=anthKey),clavueAuth?(env5[CLAVUE_AUTH_TOKEN_ENV]=clavueAuth,(!anthAuth||anthAuth!==clavueAuth)&&(env5.ANTHROPIC_AUTH_TOKEN=clavueAuth),!clavueKey&&!anthKey&&(env5[CLAVUE_API_KEY_ENV]=clavueAuth,env5.ANTHROPIC_API_KEY=clavueAuth)):anthAuth&&(env5[CLAVUE_AUTH_TOKEN_ENV]=anthAuth,!clavueKey&&!anthKey&&(env5[CLAVUE_API_KEY_ENV]=anthAuth,env5.ANTHROPIC_API_KEY=anthAuth)),clavueBase?(env5[CLAVUE_BASE_URL_ENV]=clavueBase,(!anthBase||anthBase!==clavueBase)&&(env5.ANTHROPIC_BASE_URL=clavueBase)):anthBase&&(env5[CLAVUE_BASE_URL_ENV]=anthBase)}function brandCredentialEnvPatch(input2){let base=trimEnv(input2.baseUrl),cred=trimEnv(input2.credential),out={};return base&&(out[CLAVUE_BASE_URL_ENV]=base,out.ANTHROPIC_BASE_URL=base),input2.authType==="auth_token"?cred&&(out[CLAVUE_AUTH_TOKEN_ENV]=cred,out.ANTHROPIC_AUTH_TOKEN=cred,out[CLAVUE_API_KEY_ENV]=cred,out.ANTHROPIC_API_KEY=cred):cred&&(out[CLAVUE_API_KEY_ENV]=cred,out.ANTHROPIC_API_KEY=cred),out}function clavueAuthRequiredMessage(){return"CLAVUE_API_KEY or CLAVUE_AUTH_TOKEN is required (Cloud login: clavue account / www.clavue.com \u2192 api.clavue.com)"}var CLAVUE_API_KEY_ENV,CLAVUE_AUTH_TOKEN_ENV,CLAVUE_BASE_URL_ENV,CLAVUE_OFFICIAL_API_ORIGIN,CLAVUE_OFFICIAL_WEB_ORIGIN,init_clavueEnv=__esm({"src/utils/clavueEnv.ts"(){CLAVUE_API_KEY_ENV="CLAVUE_API_KEY",CLAVUE_AUTH_TOKEN_ENV="CLAVUE_AUTH_TOKEN",CLAVUE_BASE_URL_ENV="CLAVUE_BASE_URL",CLAVUE_OFFICIAL_API_ORIGIN="https://api.clavue.com",CLAVUE_OFFICIAL_WEB_ORIGIN="https://www.clavue.com";__name(trimEnv,"trimEnv");__name(getClavueApiKey,"getClavueApiKey");__name(getClavueAuthToken,"getClavueAuthToken");__name(getClavueBaseUrl,"getClavueBaseUrl");__name(hasClavueApiKey,"hasClavueApiKey");__name(hasClavueAuthToken,"hasClavueAuthToken");__name(normalizeClavueBrandEnv,"normalizeClavueBrandEnv");__name(brandCredentialEnvPatch,"brandCredentialEnvPatch");__name(clavueAuthRequiredMessage,"clavueAuthRequiredMessage")}});var nodeHeapBootstrap_exports={};__export(nodeHeapBootstrap_exports,{DEFAULT_CLAVUE_MAX_OLD_SPACE_SIZE_MB:()=>DEFAULT_CLAVUE_MAX_OLD_SPACE_SIZE_MB,HEAP_REEXEC_DISABLE_ENV:()=>HEAP_REEXEC_DISABLE_ENV,HEAP_REEXEC_GUARD_ENV:()=>HEAP_REEXEC_GUARD_ENV,HEAP_REEXEC_TARGET_MB_ENV:()=>HEAP_REEXEC_TARGET_MB_ENV,appendNodeOption:()=>appendNodeOption,getHeapReexecArgv:()=>getHeapReexecArgv,getReexecFallbackReason:()=>getReexecFallbackReason,hasExposeGcOption:()=>hasExposeGcOption,hasOldSpaceSizeOption:()=>hasOldSpaceSizeOption,reexecWithLargerHeapIfNeeded:()=>reexecWithLargerHeapIfNeeded,resolveHeapBootstrapPlan:()=>resolveHeapBootstrapPlan});import{spawnSync}from"node:child_process";import{totalmem}from"node:os";import{getHeapStatistics}from"node:v8";function pickHeapToRamRatio(totalSystemMemoryBytes){return!Number.isFinite(totalSystemMemoryBytes)||totalSystemMemoryBytes<=0||totalSystemMemoryBytes>=RAM_HUGE_THRESHOLD_BYTES?HEAP_TO_RAM_RATIO_TIGHT:totalSystemMemoryBytes>=RAM_GENEROUS_THRESHOLD_BYTES?HEAP_TO_RAM_RATIO_GENEROUS:HEAP_TO_RAM_RATIO_TIGHT}function pickDefaultHeapMb(totalSystemMemoryBytes){return!Number.isFinite(totalSystemMemoryBytes)||totalSystemMemoryBytes<=0?DEFAULT_CLAVUE_MAX_OLD_SPACE_SIZE_MB:totalSystemMemoryBytes>=RAM_HUGE_THRESHOLD_BYTES?DEFAULT_HEAP_MB_HUGE_RAM:totalSystemMemoryBytes>=RAM_LARGE_THRESHOLD_BYTES?DEFAULT_HEAP_MB_LARGE_RAM:DEFAULT_CLAVUE_MAX_OLD_SPACE_SIZE_MB}function isEnvTruthy(value){return typeof value!="string"?!1:["1","true","yes","on"].includes(value.trim().toLowerCase())}function parsePositiveInteger(value){if(typeof value!="string"||value.trim()==="")return null;let parsed=Number.parseInt(value,10);return Number.isFinite(parsed)&&parsed>0?parsed:null}function splitNodeOptions(nodeOptions){return typeof nodeOptions!="string"||nodeOptions.trim()===""?[]:nodeOptions.trim().split(/\s+/u)}function isVersionOnly(args){return args.length===1&&(args[0]==="--version"||args[0]==="-v"||args[0]==="-V")}function resolveTargetHeapMb(env5,defaultHeapMb){let configured=parsePositiveInteger(env5[HEAP_REEXEC_TARGET_MB_ENV]);return configured!==null?{value:Math.max(configured,MIN_TARGET_HEAP_MB),wasUserConfigured:!0}:{value:defaultHeapMb,wasUserConfigured:!1}}function hasOldSpaceSizeOption({nodeOptions,execArgv:execArgv2=[]}={}){return[...splitNodeOptions(nodeOptions),...execArgv2].some(token=>OLD_SPACE_OPTION_RE.test(token))}function hasExposeGcOption({nodeOptions,execArgv:execArgv2=[]}={}){return[...splitNodeOptions(nodeOptions),...execArgv2].some(token=>EXPOSE_GC_OPTION_RE.test(token))}function appendNodeOption(existingNodeOptions,option){let trimmed=typeof existingNodeOptions=="string"?existingNodeOptions.trim():"";return trimmed===""?option:`${trimmed} ${option}`}function getHeapReexecArgv({argv=process.argv,execArgv:execArgv2=process.execArgv,nodeArgvOptions=[]}={}){let entrypoint=argv[1];return entrypoint?[...execArgv2,...nodeArgvOptions,entrypoint,...argv.slice(2)]:null}function resolveHeapBootstrapPlan({args=[],env:env5=process.env,execArgv:execArgv2=process.execArgv,heapSizeLimitBytes=getHeapStatistics().heap_size_limit,defaultHeapMb,totalSystemMemoryBytes=totalmem()}={}){if(isVersionOnly(args))return{shouldReexec:!1,reason:"version-fast-path"};if(isEnvTruthy(env5[HEAP_REEXEC_DISABLE_ENV]))return{shouldReexec:!1,reason:"disabled"};if(env5[HEAP_REEXEC_GUARD_ENV]==="1")return{shouldReexec:!1,reason:"already-reexeced"};if(hasOldSpaceSizeOption({nodeOptions:env5.NODE_OPTIONS,execArgv:execArgv2}))return{shouldReexec:!1,reason:"explicit-old-space-size"};if(Number.isFinite(totalSystemMemoryBytes)&&totalSystemMemoryBytes>0&&totalSystemMemoryBytes<MIN_SYSTEM_MEMORY_FOR_REEXEC_BYTES)return{shouldReexec:!1,reason:"system-memory-too-low"};let resolvedDefaultHeapMb=defaultHeapMb??pickDefaultHeapMb(totalSystemMemoryBytes),{value:requestedHeapMb,wasUserConfigured:wasUserRequested}=resolveTargetHeapMb(env5,resolvedDefaultHeapMb),targetHeapMb=requestedHeapMb,cappedByRam=!1;if(Number.isFinite(totalSystemMemoryBytes)&&totalSystemMemoryBytes>0){let ratio=pickHeapToRamRatio(totalSystemMemoryBytes),ramCapMb=Math.max(MIN_TARGET_HEAP_MB,Math.floor(totalSystemMemoryBytes*ratio/BYTES_PER_MB));ramCapMb<requestedHeapMb&&(targetHeapMb=ramCapMb,cappedByRam=!0)}let targetHeapBytes=targetHeapMb*BYTES_PER_MB;if(heapSizeLimitBytes>=targetHeapBytes*HEAP_LIMIT_SATISFIED_RATIO)return{shouldReexec:!1,reason:"heap-limit-already-sufficient",targetHeapMb};let exposeGc=hasExposeGcOption({nodeOptions:env5.NODE_OPTIONS,execArgv:execArgv2})?"":` ${EXPOSE_GC_OPTION}`,nodeOption=`--max-old-space-size=${targetHeapMb}${exposeGc}`,nodeArgvOptions=[`--max-old-space-size=${targetHeapMb}`,...exposeGc?[EXPOSE_GC_OPTION]:[]];return{shouldReexec:!0,reason:cappedByRam?"heap-target-capped-by-ram":"heap-limit-too-low",targetHeapMb,nodeOption,nodeArgvOptions,...cappedByRam?{requestedHeapMb,wasUserRequested}:{}}}function getReexecFallbackReason({status:status2,signal}={}){return signal==="SIGKILL"||signal==="SIGABRT"?"signal":status2===137?"oom-exit":status2===134?"abort-exit":null}function signalExitCode(signal){return signal==="SIGINT"?130:signal==="SIGTERM"?143:1}function reexecWithLargerHeapIfNeeded({args=process.argv.slice(2),argv=process.argv,env:env5=process.env,execArgv:execArgv2=process.execArgv,execPath:execPath2=process.execPath,heapSizeLimitBytes=getHeapStatistics().heap_size_limit}={}){let plan2=resolveHeapBootstrapPlan({args,env:env5,execArgv:execArgv2,heapSizeLimitBytes});if(!plan2.shouldReexec)return!1;plan2.reason==="heap-target-capped-by-ram"&&plan2.wasUserRequested&&console.error(`Clavue: capping heap at ${plan2.targetHeapMb}MB (requested ${plan2.requestedHeapMb}MB exceeds the safe RAM budget). Set CLAVUE_DISABLE_HEAP_REEXEC=1 to skip the auto-bump.`);let reexecArgv=getHeapReexecArgv({argv,execArgv:execArgv2,nodeArgvOptions:plan2.nodeArgvOptions});if(!reexecArgv)return!1;let child=spawnSync(execPath2,reexecArgv,{stdio:"inherit",env:{...env5,[HEAP_REEXEC_GUARD_ENV]:"1"}});if(child.error)return console.error(`Clavue could not restart with ${plan2.nodeOption}; continuing with the current Node heap. ${child.error.message}`),!1;let fallbackReason=getReexecFallbackReason({status:child.status,signal:child.signal});if(fallbackReason!==null)return console.error(`Clavue restarted with ${plan2.nodeOption}, but the child exited early (${fallbackReason}). Continuing with the current Node heap. Set CLAVUE_DISABLE_HEAP_REEXEC=1 to skip the auto-bump.`),!1;process.exit(child.status??signalExitCode(child.signal))}var DEFAULT_CLAVUE_MAX_OLD_SPACE_SIZE_MB,HEAP_REEXEC_GUARD_ENV,HEAP_REEXEC_DISABLE_ENV,HEAP_REEXEC_TARGET_MB_ENV,BYTES_PER_MB,OLD_SPACE_OPTION_RE,EXPOSE_GC_OPTION_RE,EXPOSE_GC_OPTION,MIN_TARGET_HEAP_MB,HEAP_LIMIT_SATISFIED_RATIO,MIN_SYSTEM_MEMORY_FOR_REEXEC_BYTES,HEAP_TO_RAM_RATIO_TIGHT,HEAP_TO_RAM_RATIO_GENEROUS,RAM_GENEROUS_THRESHOLD_BYTES,RAM_LARGE_THRESHOLD_BYTES,RAM_HUGE_THRESHOLD_BYTES,DEFAULT_HEAP_MB_LARGE_RAM,DEFAULT_HEAP_MB_HUGE_RAM,init_nodeHeapBootstrap=__esm({"src/utils/nodeHeapBootstrap.ts"(){DEFAULT_CLAVUE_MAX_OLD_SPACE_SIZE_MB=16384,HEAP_REEXEC_GUARD_ENV="CLAVUE_HEAP_REEXEC",HEAP_REEXEC_DISABLE_ENV="CLAVUE_DISABLE_HEAP_REEXEC",HEAP_REEXEC_TARGET_MB_ENV="CLAVUE_MAX_OLD_SPACE_SIZE_MB",BYTES_PER_MB=1024*1024,OLD_SPACE_OPTION_RE=/^--max[-_]old[-_]space[-_]size(?:=.*)?$/u,EXPOSE_GC_OPTION_RE=/^--expose[-_]gc$/u,EXPOSE_GC_OPTION="--expose-gc",MIN_TARGET_HEAP_MB=1024,HEAP_LIMIT_SATISFIED_RATIO=.9,MIN_SYSTEM_MEMORY_FOR_REEXEC_BYTES=4*1024*BYTES_PER_MB,HEAP_TO_RAM_RATIO_TIGHT=.5,HEAP_TO_RAM_RATIO_GENEROUS=.7,RAM_GENEROUS_THRESHOLD_BYTES=8*1024*BYTES_PER_MB,RAM_LARGE_THRESHOLD_BYTES=32*1024*BYTES_PER_MB,RAM_HUGE_THRESHOLD_BYTES=48*1024*BYTES_PER_MB,DEFAULT_HEAP_MB_LARGE_RAM=22528,DEFAULT_HEAP_MB_HUGE_RAM=24576;__name(pickHeapToRamRatio,"pickHeapToRamRatio");__name(pickDefaultHeapMb,"pickDefaultHeapMb");__name(isEnvTruthy,"isEnvTruthy");__name(parsePositiveInteger,"parsePositiveInteger");__name(splitNodeOptions,"splitNodeOptions");__name(isVersionOnly,"isVersionOnly");__name(resolveTargetHeapMb,"resolveTargetHeapMb");__name(hasOldSpaceSizeOption,"hasOldSpaceSizeOption");__name(hasExposeGcOption,"hasExposeGcOption");__name(appendNodeOption,"appendNodeOption");__name(getHeapReexecArgv,"getHeapReexecArgv");__name(resolveHeapBootstrapPlan,"resolveHeapBootstrapPlan");__name(getReexecFallbackReason,"getReexecFallbackReason");__name(signalExitCode,"signalExitCode");__name(reexecWithLargerHeapIfNeeded,"reexecWithLargerHeapIfNeeded")}});var freeGlobal,freeGlobal_default,init_freeGlobal=__esm({"../../node_modules/lodash-es/_freeGlobal.js"(){freeGlobal=typeof global=="object"&&global&&global.Object===Object&&global,freeGlobal_default=freeGlobal}});var freeSelf,root,root_default,init_root=__esm({"../../node_modules/lodash-es/_root.js"(){init_freeGlobal();freeSelf=typeof self=="object"&&self&&self.Object===Object&&self,root=freeGlobal_default||freeSelf||Function("return this")(),root_default=root}});var Symbol2,Symbol_default,init_Symbol=__esm({"../../node_modules/lodash-es/_Symbol.js"(){init_root();Symbol2=root_default.Symbol,Symbol_default=Symbol2}});function getRawTag(value){var isOwn=hasOwnProperty.call(value,symToStringTag),tag2=value[symToStringTag];try{value[symToStringTag]=void 0;var unmasked=!0}catch{}var result2=nativeObjectToString.call(value);return unmasked&&(isOwn?value[symToStringTag]=tag2:delete value[symToStringTag]),result2}var objectProto,hasOwnProperty,nativeObjectToString,symToStringTag,getRawTag_default,init_getRawTag=__esm({"../../node_modules/lodash-es/_getRawTag.js"(){init_Symbol();objectProto=Object.prototype,hasOwnProperty=objectProto.hasOwnProperty,nativeObjectToString=objectProto.toString,symToStringTag=Symbol_default?Symbol_default.toStringTag:void 0;__name(getRawTag,"getRawTag");getRawTag_default=getRawTag}});function objectToString(value){return nativeObjectToString2.call(value)}var objectProto2,nativeObjectToString2,objectToString_default,init_objectToString=__esm({"../../node_modules/lodash-es/_objectToString.js"(){objectProto2=Object.prototype,nativeObjectToString2=objectProto2.toString;__name(objectToString,"objectToString");objectToString_default=objectToString}});function baseGetTag(value){return value==null?value===void 0?undefinedTag:nullTag:symToStringTag2&&symToStringTag2 in Object(value)?getRawTag_default(value):objectToString_default(value)}var nullTag,undefinedTag,symToStringTag2,baseGetTag_default,init_baseGetTag=__esm({"../../node_modules/lodash-es/_baseGetTag.js"(){init_Symbol();init_getRawTag();init_objectToString();nullTag="[object Null]",undefinedTag="[object Undefined]",symToStringTag2=Symbol_default?Symbol_default.toStringTag:void 0;__name(baseGetTag,"baseGetTag");baseGetTag_default=baseGetTag}});function isObject(value){var type=typeof value;return value!=null&&(type=="object"||type=="function")}var isObject_default,init_isObject=__esm({"../../node_modules/lodash-es/isObject.js"(){__name(isObject,"isObject");isObject_default=isObject}});function isFunction(value){if(!isObject_default(value))return!1;var tag2=baseGetTag_default(value);return tag2==funcTag||tag2==genTag||tag2==asyncTag||tag2==proxyTag}var asyncTag,funcTag,genTag,proxyTag,isFunction_default,init_isFunction=__esm({"../../node_modules/lodash-es/isFunction.js"(){init_baseGetTag();init_isObject();asyncTag="[object AsyncFunction]",funcTag="[object Function]",genTag="[object GeneratorFunction]",proxyTag="[object Proxy]";__name(isFunction,"isFunction");isFunction_default=isFunction}});var coreJsData,coreJsData_default,init_coreJsData=__esm({"../../node_modules/lodash-es/_coreJsData.js"(){init_root();coreJsData=root_default["__core-js_shared__"],coreJsData_default=coreJsData}});function isMasked(func){return!!maskSrcKey&&maskSrcKey in func}var maskSrcKey,isMasked_default,init_isMasked=__esm({"../../node_modules/lodash-es/_isMasked.js"(){init_coreJsData();maskSrcKey=(function(){var uid=/[^.]+$/.exec(coreJsData_default&&coreJsData_default.keys&&coreJsData_default.keys.IE_PROTO||"");return uid?"Symbol(src)_1."+uid:""})();__name(isMasked,"isMasked");isMasked_default=isMasked}});function toSource(func){if(func!=null){try{return funcToString.call(func)}catch{}try{return func+""}catch{}}return""}var funcProto,funcToString,toSource_default,init_toSource=__esm({"../../node_modules/lodash-es/_toSource.js"(){funcProto=Function.prototype,funcToString=funcProto.toString;__name(toSource,"toSource");toSource_default=toSource}});function baseIsNative(value){if(!isObject_default(value)||isMasked_default(value))return!1;var pattern=isFunction_default(value)?reIsNative:reIsHostCtor;return pattern.test(toSource_default(value))}var reRegExpChar,reIsHostCtor,funcProto2,objectProto3,funcToString2,hasOwnProperty2,reIsNative,baseIsNative_default,init_baseIsNative=__esm({"../../node_modules/lodash-es/_baseIsNative.js"(){init_isFunction();init_isMasked();init_isObject();init_toSource();reRegExpChar=/[\\^$.*+?()[\]{}|]/g,reIsHostCtor=/^\[object .+?Constructor\]$/,funcProto2=Function.prototype,objectProto3=Object.prototype,funcToString2=funcProto2.toString,hasOwnProperty2=objectProto3.hasOwnProperty,reIsNative=RegExp("^"+funcToString2.call(hasOwnProperty2).replace(reRegExpChar,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");__name(baseIsNative,"baseIsNative");baseIsNative_default=baseIsNative}});function getValue(object3,key){return object3?.[key]}var getValue_default,init_getValue=__esm({"../../node_modules/lodash-es/_getValue.js"(){__name(getValue,"getValue");getValue_default=getValue}});function getNative(object3,key){var value=getValue_default(object3,key);return baseIsNative_default(value)?value:void 0}var getNative_default,init_getNative=__esm({"../../node_modules/lodash-es/_getNative.js"(){init_baseIsNative();init_getValue();__name(getNative,"getNative");getNative_default=getNative}});var nativeCreate,nativeCreate_default,init_nativeCreate=__esm({"../../node_modules/lodash-es/_nativeCreate.js"(){init_getNative();nativeCreate=getNative_default(Object,"create"),nativeCreate_default=nativeCreate}});function hashClear(){this.__data__=nativeCreate_default?nativeCreate_default(null):{},this.size=0}var hashClear_default,init_hashClear=__esm({"../../node_modules/lodash-es/_hashClear.js"(){init_nativeCreate();__name(hashClear,"hashClear");hashClear_default=hashClear}});function hashDelete(key){var result2=this.has(key)&&delete this.__data__[key];return this.size-=result2?1:0,result2}var hashDelete_default,init_hashDelete=__esm({"../../node_modules/lodash-es/_hashDelete.js"(){__name(hashDelete,"hashDelete");hashDelete_default=hashDelete}});function hashGet(key){var data=this.__data__;if(nativeCreate_default){var result2=data[key];return result2===HASH_UNDEFINED?void 0:result2}return hasOwnProperty3.call(data,key)?data[key]:void 0}var HASH_UNDEFINED,objectProto4,hasOwnProperty3,hashGet_default,init_hashGet=__esm({"../../node_modules/lodash-es/_hashGet.js"(){init_nativeCreate();HASH_UNDEFINED="__lodash_hash_undefined__",objectProto4=Object.prototype,hasOwnProperty3=objectProto4.hasOwnProperty;__name(hashGet,"hashGet");hashGet_default=hashGet}});function hashHas(key){var data=this.__data__;return nativeCreate_default?data[key]!==void 0:hasOwnProperty4.call(data,key)}var objectProto5,hasOwnProperty4,hashHas_default,init_hashHas=__esm({"../../node_modules/lodash-es/_hashHas.js"(){init_nativeCreate();objectProto5=Object.prototype,hasOwnProperty4=objectProto5.hasOwnProperty;__name(hashHas,"hashHas");hashHas_default=hashHas}});function hashSet(key,value){var data=this.__data__;return this.size+=this.has(key)?0:1,data[key]=nativeCreate_default&&value===void 0?HASH_UNDEFINED2:value,this}var HASH_UNDEFINED2,hashSet_default,init_hashSet=__esm({"../../node_modules/lodash-es/_hashSet.js"(){init_nativeCreate();HASH_UNDEFINED2="__lodash_hash_undefined__";__name(hashSet,"hashSet");hashSet_default=hashSet}});function Hash(entries){var index=-1,length=entries==null?0:entries.length;for(this.clear();++index<length;){var entry=entries[index];this.set(entry[0],entry[1])}}var Hash_default,init_Hash=__esm({"../../node_modules/lodash-es/_Hash.js"(){init_hashClear();init_hashDelete();init_hashGet();init_hashHas();init_hashSet();__name(Hash,"Hash");Hash.prototype.clear=hashClear_default;Hash.prototype.delete=hashDelete_default;Hash.prototype.get=hashGet_default;Hash.prototype.has=hashHas_default;Hash.prototype.set=hashSet_default;Hash_default=Hash}});function listCacheClear(){this.__data__=[],this.size=0}var listCacheClear_default,init_listCacheClear=__esm({"../../node_modules/lodash-es/_listCacheClear.js"(){__name(listCacheClear,"listCacheClear");listCacheClear_default=listCacheClear}});function eq(value,other){return value===other||value!==value&&other!==other}var eq_default,init_eq=__esm({"../../node_modules/lodash-es/eq.js"(){__name(eq,"eq");eq_default=eq}});function assocIndexOf(array2,key){for(var length=array2.length;length--;)if(eq_default(array2[length][0],key))return length;return-1}var assocIndexOf_default,init_assocIndexOf=__esm({"../../node_modules/lodash-es/_assocIndexOf.js"(){init_eq();__name(assocIndexOf,"assocIndexOf");assocIndexOf_default=assocIndexOf}});function listCacheDelete(key){var data=this.__data__,index=assocIndexOf_default(data,key);if(index<0)return!1;var lastIndex=data.length-1;return index==lastIndex?data.pop():splice.call(data,index,1),--this.size,!0}var arrayProto,splice,listCacheDelete_default,init_listCacheDelete=__esm({"../../node_modules/lodash-es/_listCacheDelete.js"(){init_assocIndexOf();arrayProto=Array.prototype,splice=arrayProto.splice;__name(listCacheDelete,"listCacheDelete");listCacheDelete_default=listCacheDelete}});function listCacheGet(key){var data=this.__data__,index=assocIndexOf_default(data,key);return index<0?void 0:data[index][1]}var listCacheGet_default,init_listCacheGet=__esm({"../../node_modules/lodash-es/_listCacheGet.js"(){init_assocIndexOf();__name(listCacheGet,"listCacheGet");listCacheGet_default=listCacheGet}});function listCacheHas(key){return assocIndexOf_default(this.__data__,key)>-1}var listCacheHas_default,init_listCacheHas=__esm({"../../node_modules/lodash-es/_listCacheHas.js"(){init_assocIndexOf();__name(listCacheHas,"listCacheHas");listCacheHas_default=listCacheHas}});function listCacheSet(key,value){var data=this.__data__,index=assocIndexOf_default(data,key);return index<0?(++this.size,data.push([key,value])):data[index][1]=value,this}var listCacheSet_default,init_listCacheSet=__esm({"../../node_modules/lodash-es/_listCacheSet.js"(){init_assocIndexOf();__name(listCacheSet,"listCacheSet");listCacheSet_default=listCacheSet}});function ListCache(entries){var index=-1,length=entries==null?0:entries.length;for(this.clear();++index<length;){var entry=entries[index];this.set(entry[0],entry[1])}}var ListCache_default,init_ListCache=__esm({"../../node_modules/lodash-es/_ListCache.js"(){init_listCacheClear();init_listCacheDelete();init_listCacheGet();init_listCacheHas();init_listCacheSet();__name(ListCache,"ListCache");ListCache.prototype.clear=listCacheClear_default;ListCache.prototype.delete=listCacheDelete_default;ListCache.prototype.get=listCacheGet_default;ListCache.prototype.has=listCacheHas_default;ListCache.prototype.set=listCacheSet_default;ListCache_default=ListCache}});var Map2,Map_default,init_Map=__esm({"../../node_modules/lodash-es/_Map.js"(){init_getNative();init_root();Map2=getNative_default(root_default,"Map"),Map_default=Map2}});function mapCacheClear(){this.size=0,this.__data__={hash:new Hash_default,map:new(Map_default||ListCache_default),string:new Hash_default}}var mapCacheClear_default,init_mapCacheClear=__esm({"../../node_modules/lodash-es/_mapCacheClear.js"(){init_Hash();init_ListCache();init_Map();__name(mapCacheClear,"mapCacheClear");mapCacheClear_default=mapCacheClear}});function isKeyable(value){var type=typeof value;return type=="string"||type=="number"||type=="symbol"||type=="boolean"?value!=="__proto__":value===null}var isKeyable_default,init_isKeyable=__esm({"../../node_modules/lodash-es/_isKeyable.js"(){__name(isKeyable,"isKeyable");isKeyable_default=isKeyable}});function getMapData(map3,key){var data=map3.__data__;return isKeyable_default(key)?data[typeof key=="string"?"string":"hash"]:data.map}var getMapData_default,init_getMapData=__esm({"../../node_modules/lodash-es/_getMapData.js"(){init_isKeyable();__name(getMapData,"getMapData");getMapData_default=getMapData}});function mapCacheDelete(key){var result2=getMapData_default(this,key).delete(key);return this.size-=result2?1:0,result2}var mapCacheDelete_default,init_mapCacheDelete=__esm({"../../node_modules/lodash-es/_mapCacheDelete.js"(){init_getMapData();__name(mapCacheDelete,"mapCacheDelete");mapCacheDelete_default=mapCacheDelete}});function mapCacheGet(key){return getMapData_default(this,key).get(key)}var mapCacheGet_default,init_mapCacheGet=__esm({"../../node_modules/lodash-es/_mapCacheGet.js"(){init_getMapData();__name(mapCacheGet,"mapCacheGet");mapCacheGet_default=mapCacheGet}});function mapCacheHas(key){return getMapData_default(this,key).has(key)}var mapCacheHas_default,init_mapCacheHas=__esm({"../../node_modules/lodash-es/_mapCacheHas.js"(){init_getMapData();__name(mapCacheHas,"mapCacheHas");mapCacheHas_default=mapCacheHas}});function mapCacheSet(key,value){var data=getMapData_default(this,key),size2=data.size;return data.set(key,value),this.size+=data.size==size2?0:1,this}var mapCacheSet_default,init_mapCacheSet=__esm({"../../node_modules/lodash-es/_mapCacheSet.js"(){init_getMapData();__name(mapCacheSet,"mapCacheSet");mapCacheSet_default=mapCacheSet}});function MapCache(entries){var index=-1,length=entries==null?0:entries.length;for(this.clear();++index<length;){var entry=entries[index];this.set(entry[0],entry[1])}}var MapCache_default,init_MapCache=__esm({"../../node_modules/lodash-es/_MapCache.js"(){init_mapCacheClear();init_mapCacheDelete();init_mapCacheGet();init_mapCacheHas();init_mapCacheSet();__name(MapCache,"MapCache");MapCache.prototype.clear=mapCacheClear_default;MapCache.prototype.delete=mapCacheDelete_default;MapCache.prototype.get=mapCacheGet_default;MapCache.prototype.has=mapCacheHas_default;MapCache.prototype.set=mapCacheSet_default;MapCache_default=MapCache}});function memoize(func,resolver){if(typeof func!="function"||resolver!=null&&typeof resolver!="function")throw new TypeError(FUNC_ERROR_TEXT);var memoized=__name(function(){var args=arguments,key=resolver?resolver.apply(this,args):args[0],cache5=memoized.cache;if(cache5.has(key))return cache5.get(key);var result2=func.apply(this,args);return memoized.cache=cache5.set(key,result2)||cache5,result2},"memoized");return memoized.cache=new(memoize.Cache||MapCache_default),memoized}var FUNC_ERROR_TEXT,memoize_default,init_memoize=__esm({"../../node_modules/lodash-es/memoize.js"(){init_MapCache();FUNC_ERROR_TEXT="Expected a function";__name(memoize,"memoize");memoize.Cache=MapCache_default;memoize_default=memoize}});var protectedNamespace_exports={};__export(protectedNamespace_exports,{checkProtectedNamespace:()=>checkProtectedNamespace,isProtectedNamespace:()=>isProtectedNamespace});function isProtectedNamespace(_name){return!1}function checkProtectedNamespace(){return!1}var init_protectedNamespace=__esm({"src/utils/protectedNamespace.ts"(){__name(isProtectedNamespace,"isProtectedNamespace");__name(checkProtectedNamespace,"checkProtectedNamespace")}});var envUtils_exports={};__export(envUtils_exports,{getAWSRegion:()=>getAWSRegion,getClaudeConfigHomeDir:()=>getClaudeConfigHomeDir,getClavueConfigHomeDir:()=>getClavueConfigHomeDir,getDefaultVertexRegion:()=>getDefaultVertexRegion,getLegacyClaudeConfigHomeDir:()=>getLegacyClaudeConfigHomeDir,getTeamsDir:()=>getTeamsDir,getUserConfigHomeDirs:()=>getUserConfigHomeDirs,getVertexRegionForModel:()=>getVertexRegionForModel,hasNodeOption:()=>hasNodeOption,isBareMode:()=>isBareMode,isEnvDefinedFalsy:()=>isEnvDefinedFalsy,isEnvTruthy:()=>isEnvTruthy2,isInProtectedNamespace:()=>isInProtectedNamespace,isRunningOnHomespace:()=>isRunningOnHomespace,parseEnvVars:()=>parseEnvVars,shouldLoadLegacyClaudeConfig:()=>shouldLoadLegacyClaudeConfig,shouldMaintainProjectWorkingDir:()=>shouldMaintainProjectWorkingDir,shouldUseMacOSKeychain:()=>shouldUseMacOSKeychain});import{homedir}from"os";import{join}from"path";function getLegacyClaudeConfigHomeDir(){return join(homedir(),".\u0063laude").normalize("NFC")}function shouldLoadLegacyClaudeConfig(){return isEnvTruthy2(process.env.CLAVUE_DISABLE_LEGACY_CLAUDE_CONFIG)||isEnvTruthy2(process.env.CLAVUE_DISABLE_LEGACY_CLAUDE_COMMANDS)?!1:isEnvTruthy2(process.env.CLAVUE_ENABLE_LEGACY_CLAUDE_CONFIG)}function getUserConfigHomeDirs(){let primaryDir=getClavueConfigHomeDir();if(!shouldLoadLegacyClaudeConfig())return[primaryDir];let legacyDir=getLegacyClaudeConfigHomeDir();return legacyDir===primaryDir?[primaryDir]:[primaryDir,legacyDir]}function getTeamsDir(){return join(getClavueConfigHomeDir(),"teams")}function hasNodeOption(flag){let nodeOptions=process.env.NODE_OPTIONS;return nodeOptions?nodeOptions.split(/\s+/).includes(flag):!1}function isEnvTruthy2(envVar){if(!envVar)return!1;if(typeof envVar=="boolean")return envVar;let normalizedValue=envVar.toLowerCase().trim();return["1","true","yes","on"].includes(normalizedValue)}function isEnvDefinedFalsy(envVar){if(envVar===void 0)return!1;if(typeof envVar=="boolean")return!envVar;if(!envVar)return!1;let normalizedValue=envVar.toLowerCase().trim();return["0","false","no","off"].includes(normalizedValue)}function isBareMode(){return isEnvTruthy2(process.env.CLAUDE_CODE_SIMPLE)||process.argv.includes("--bare")}function shouldUseMacOSKeychain(){return process.platform!=="darwin"?!1:!!(isEnvTruthy2(process.env.CLAVUE_USE_KEYCHAIN)||isEnvDefinedFalsy(process.env.CLAVUE_DISABLE_KEYCHAIN))}function parseEnvVars(rawEnvArgs){let parsedEnv={};if(rawEnvArgs)for(let envStr of rawEnvArgs){let[key,...valueParts]=envStr.split("=");if(!key||valueParts.length===0)throw new Error(`Invalid environment variable format: ${envStr}, environment variables should be added as: -e KEY1=value1 -e KEY2=value2`);parsedEnv[key]=valueParts.join("=")}return parsedEnv}function getAWSRegion(){return process.env.AWS_REGION||process.env.AWS_DEFAULT_REGION||"us-east-1"}function getDefaultVertexRegion(){return process.env.CLOUD_ML_REGION||"us-east5"}function shouldMaintainProjectWorkingDir(){return isEnvTruthy2(process.env.CLAUDE_BASH_MAINTAIN_PROJECT_WORKING_DIR)}function isRunningOnHomespace(){return process.env.USER_TYPE==="ant"&&isEnvTruthy2(process.env.COO_RUNNING_ON_HOMESPACE)}function isInProtectedNamespace(){return process.env.USER_TYPE==="ant"?(init_protectedNamespace(),__toCommonJS(protectedNamespace_exports)).checkProtectedNamespace():!1}function getVertexRegionForModel(model){if(model){let match=VERTEX_REGION_OVERRIDES.find(([prefix])=>model.startsWith(prefix));if(match)return process.env[match[1]]||getDefaultVertexRegion()}return getDefaultVertexRegion()}var getClavueConfigHomeDir,getClaudeConfigHomeDir,VERTEX_REGION_OVERRIDES,init_envUtils=__esm({"src/utils/envUtils.ts"(){init_memoize();getClavueConfigHomeDir=memoize_default(()=>(process.env.CLAVUE_CONFIG_DIR??join(homedir(),".clavue")).normalize("NFC"),()=>`${process.env.CLAVUE_CONFIG_DIR??""}\0${process.env.HOME??""}`),getClaudeConfigHomeDir=getClavueConfigHomeDir;__name(getLegacyClaudeConfigHomeDir,"getLegacyClaudeConfigHomeDir");__name(shouldLoadLegacyClaudeConfig,"shouldLoadLegacyClaudeConfig");__name(getUserConfigHomeDirs,"getUserConfigHomeDirs");__name(getTeamsDir,"getTeamsDir");__name(hasNodeOption,"hasNodeOption");__name(isEnvTruthy2,"isEnvTruthy");__name(isEnvDefinedFalsy,"isEnvDefinedFalsy");__name(isBareMode,"isBareMode");__name(shouldUseMacOSKeychain,"shouldUseMacOSKeychain");__name(parseEnvVars,"parseEnvVars");__name(getAWSRegion,"getAWSRegion");__name(getDefaultVertexRegion,"getDefaultVertexRegion");__name(shouldMaintainProjectWorkingDir,"shouldMaintainProjectWorkingDir");__name(isRunningOnHomespace,"isRunningOnHomespace");__name(isInProtectedNamespace,"isInProtectedNamespace");VERTEX_REGION_OVERRIDES=[["claude-haiku-4-5","VERTEX_REGION_CLAUDE_HAIKU_4_5"],["claude-3-5-haiku","VERTEX_REGION_CLAUDE_3_5_HAIKU"],["claude-3-5-sonnet","VERTEX_REGION_CLAUDE_3_5_SONNET"],["claude-3-7-sonnet","VERTEX_REGION_CLAUDE_3_7_SONNET"],["claude-opus-4-1","VERTEX_REGION_CLAUDE_4_1_OPUS"],["claude-opus-4","VERTEX_REGION_CLAUDE_4_0_OPUS"],["claude-sonnet-4-6","VERTEX_REGION_CLAUDE_4_6_SONNET"],["claude-sonnet-4-5","VERTEX_REGION_CLAUDE_4_5_SONNET"],["claude-sonnet-4","VERTEX_REGION_CLAUDE_4_0_SONNET"]];__name(getVertexRegionForModel,"getVertexRegionForModel")}});var cliGoto_exports={};__export(cliGoto_exports,{GOTO_IPC_POINTER_FILE:()=>GOTO_IPC_POINTER_FILE,LAST_MUTATION_FILE:()=>LAST_MUTATION_FILE,LAST_MUTATION_SENTINEL:()=>LAST_MUTATION_SENTINEL,STARTUP_OPEN_FILE:()=>STARTUP_OPEN_FILE,consumeStartupOpen:()=>consumeStartupOpen,forgetGotoIpcSocket:()=>forgetGotoIpcSocket,formatGoto:()=>formatGoto,formatGotoAtToken:()=>formatGotoAtToken,formatGotoNotice:()=>formatGotoNotice,formatWindowStatus:()=>formatWindowStatus,gotoIpcPointerPath:()=>gotoIpcPointerPath,isLastMutationTarget:()=>isLastMutationTarget,lastMutationPath:()=>lastMutationPath,lastMutationTarget:()=>lastMutationTarget,parseGoto:()=>parseGoto,parseGotoIpcLine:()=>parseGotoIpcLine,parseGotoIpcRequest:()=>parseGotoIpcRequest,parseStartupOpen:()=>parseStartupOpen,readGotoIpcPointer:()=>readGotoIpcPointer,readLastMutation:()=>readLastMutation,resolveGotoIpcSocket:()=>resolveGotoIpcSocket,sendGotoIpc:()=>sendGotoIpc,sendStatusIpc:()=>sendStatusIpc,startGotoIpcServer:()=>startGotoIpcServer,startupOpenPath:()=>startupOpenPath,takeGotoOptions:()=>takeGotoOptions,writeLastMutation:()=>writeLastMutation,writeStartupOpen:()=>writeStartupOpen});import{chmodSync,existsSync,mkdirSync,readFileSync,statSync,unlinkSync,writeFileSync}from"node:fs";import{createConnection,createServer}from"node:net";import{isAbsolute,join as join2,resolve}from"node:path";function isUnixSocket(path36){try{return statSync(path36).isSocket()}catch{return!1}}function defaultExists(path36){return existsSync(path36)}function isFilePath(path36){try{return statSync(path36).isFile()}catch{return!1}}function parseGoto(argument,options={}){let cwd6=options.cwd??process.cwd(),exists=options.exists??defaultExists,raw=argument.trim();if(!raw||raw.startsWith("-"))return null;let tryPath=__name(p=>{let abs=isAbsolute(p)?p:resolve(cwd6,p);return!exists(abs)||options.filesOnly&&exists===defaultExists&&!isFilePath(abs)||options.filesOnly&&exists!==defaultExists&&(p.endsWith("/")||abs.endsWith("/"))?null:abs},"tryPath"),direct=tryPath(raw);if(direct)return{path:direct};let match=/^(.*?):(\d+)(?::(\d+))?$/.exec(raw);if(!match)return null;let file2=tryPath(match[1]);return file2?{path:file2,line:Number(match[2]),column:match[3]?Number(match[3]):1}:null}function takeGotoOptions(args,options={}){let rest2=[],goto=null;for(let i3=0;i3<args.length;i3++){let a2=args[i3];if(a2==="-g"||a2==="--goto"||a2.startsWith("--goto=")){let inline=a2.startsWith("--goto=")?a2.slice(7):null,next=inline===null?args[i3+1]:inline;if(inline===""){goto=lastMutationTarget();continue}if(inline===null&&(!next||next.startsWith("-"))){goto=lastMutationTarget();continue}let value=inline===null?args[++i3]:inline;if(!value){goto=lastMutationTarget();continue}if(value===LAST_MUTATION_SENTINEL||value==="@"){goto=lastMutationTarget();continue}goto=parseGoto(value,options)??{path:value};continue}rest2.push(a2)}if(!goto&&rest2.length===1){let only=parseGoto(rest2[0],{...options,filesOnly:!0});if(only)return{goto:only,rest:[]}}return{goto,rest:rest2}}function formatGoto(target){return target.line===void 0?target.path:target.column===void 0?`${target.path}:${target.line}`:`${target.path}:${target.line}:${target.column}`}function formatGotoNotice(target){return`goto \xB7 ${formatGoto(target)}`}function formatGotoAtToken(target,cwd6){let abs=target.path.replace(/\\/g,"/"),display=abs;if(cwd6){let root2=cwd6.replace(/\\/g,"/").replace(/\/+$/,"");abs===root2?display=".":abs.startsWith(`${root2}/`)&&(display=abs.slice(root2.length+1))}return`@${display.replace(/ /g,"\\ ")}`}function startupOpenPath(configDir2){return join2(configDir2??getClavueConfigHomeDir(),STARTUP_OPEN_FILE)}function gotoIpcPointerPath(configDir2){return join2(configDir2??getClavueConfigHomeDir(),GOTO_IPC_POINTER_FILE)}function asGotoTarget(value){if(!value||typeof value!="object")return null;let rec=value;if(typeof rec.path!="string"||!rec.path.trim())return null;let target={path:rec.path};return typeof rec.line=="number"&&Number.isFinite(rec.line)&&rec.line>0&&(target.line=Math.trunc(rec.line)),typeof rec.column=="number"&&Number.isFinite(rec.column)&&rec.column>0&&(target.column=Math.trunc(rec.column)),target}function parseStartupOpen(raw){try{return asGotoTarget(JSON.parse(raw))}catch{return null}}function lastMutationTarget(){return{path:LAST_MUTATION_SENTINEL}}function isLastMutationTarget(target){let path36=String(target?.path||"").trim();return path36===LAST_MUTATION_SENTINEL||path36==="@"||path36===""}function lastMutationPath(configDir2){return join2(configDir2??getClavueConfigHomeDir(),LAST_MUTATION_FILE)}function writeLastMutation(filePath,options){let path36=String(filePath||"").trim();if(!path36||isLastMutationTarget({path:path36}))return;let dir=options?.configDir??getClavueConfigHomeDir();mkdirSync(dir,{recursive:!0}),writePrivateFile(lastMutationPath(dir),`${JSON.stringify({path:path36,at:new Date().toISOString()})}
@@ -21,7 +21,7 @@ var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropD
21
21
  `);for(;nl>=0;){let line=buf.slice(0,nl).trim();if(buf=buf.slice(nl+1),nl=buf.indexOf(`
22
22
  `),!line)continue;let request=parseGotoIpcRequest(line),reply;if(!request)reply={ok:!1,error:"unreadable goto"};else if(request.kind==="status"){let snap=options.onStatus?.()??{busy:!1};reply={ok:!0,busy:snap.busy,...snap.lastMutation?{lastMutation:snap.lastMutation}:{},...snap.sessionId?{sessionId:snap.sessionId}:{}}}else{let target=request.kind==="goto-last"?lastMutationTarget():request.target;try{reply=options.onGoto(target)}catch(error40){reply={ok:!1,error:error40 instanceof Error?error40.message:String(error40)}}}try{sock.write(`${JSON.stringify(reply)}
23
23
  `)}catch{}}}),sock.on("error",()=>{try{sock.destroy()}catch{}})});next.once("error",reject2),next.listen(socketPath3,()=>resolveListen(next))})}catch{return null}try{chmodSync(socketPath3,384)}catch{}let pointer=gotoIpcPointerPath(configDir2);writePrivateFile(pointer,`${socketPath3}
24
- `);let stopped=!1;return{socketPath:socketPath3,stop:__name(async()=>{if(!stopped){stopped=!0,await new Promise(resolveClose=>{server2.close(()=>resolveClose())}).catch(()=>{});try{unlinkSync(socketPath3)}catch{}try{readGotoIpcPointer(configDir2)===socketPath3&&unlinkSync(pointer)}catch{}}},"stop")}}var STARTUP_OPEN_FILE,GOTO_IPC_POINTER_FILE,LAST_MUTATION_FILE,LAST_MUTATION_SENTINEL,init_cliGoto=__esm({"src/runtime/cliGoto.ts"(){init_envUtils();STARTUP_OPEN_FILE="startup-open.json",GOTO_IPC_POINTER_FILE="ipc",LAST_MUTATION_FILE="last-mutation.json",LAST_MUTATION_SENTINEL="@last";__name(isUnixSocket,"isUnixSocket");__name(defaultExists,"defaultExists");__name(isFilePath,"isFilePath");__name(parseGoto,"parseGoto");__name(takeGotoOptions,"takeGotoOptions");__name(formatGoto,"formatGoto");__name(formatGotoNotice,"formatGotoNotice");__name(formatGotoAtToken,"formatGotoAtToken");__name(startupOpenPath,"startupOpenPath");__name(gotoIpcPointerPath,"gotoIpcPointerPath");__name(asGotoTarget,"asGotoTarget");__name(parseStartupOpen,"parseStartupOpen");__name(lastMutationTarget,"lastMutationTarget");__name(isLastMutationTarget,"isLastMutationTarget");__name(lastMutationPath,"lastMutationPath");__name(writeLastMutation,"writeLastMutation");__name(readLastMutation,"readLastMutation");__name(parseGotoIpcRequest,"parseGotoIpcRequest");__name(parseGotoIpcLine,"parseGotoIpcLine");__name(formatWindowStatus,"formatWindowStatus");__name(writePrivateFile,"writePrivateFile");__name(writeStartupOpen,"writeStartupOpen");__name(consumeStartupOpen,"consumeStartupOpen");__name(readGotoIpcPointer,"readGotoIpcPointer");__name(resolveGotoIpcSocket,"resolveGotoIpcSocket");__name(forgetGotoIpcSocket,"forgetGotoIpcSocket");__name(sendGotoIpc,"sendGotoIpc");__name(sendStatusIpc,"sendStatusIpc");__name(startGotoIpcServer,"startGotoIpcServer")}});var branding_exports={};__export(branding_exports,{APP_BRAND_GLYPH:()=>APP_BRAND_GLYPH,APP_BRAND_LOCKUP:()=>APP_BRAND_LOCKUP,APP_BRAND_SUBTITLE:()=>APP_BRAND_SUBTITLE,APP_BRAND_TAGLINE_SHORT_EN:()=>APP_BRAND_TAGLINE_SHORT_EN,APP_BRAND_TAGLINE_SHORT_ZH:()=>APP_BRAND_TAGLINE_SHORT_ZH,APP_BRAND_TAGLINE_ZH:()=>APP_BRAND_TAGLINE_ZH,APP_NAME:()=>APP_NAME,APP_NAME_ZH:()=>APP_NAME_ZH,APP_VERSION:()=>APP_VERSION,APP_WELCOME_TITLE:()=>APP_WELCOME_TITLE,APP_WORDMARK:()=>APP_WORDMARK,CLI_COMMAND_NAME:()=>CLI_COMMAND_NAME,PRODUCT_CATEGORY:()=>PRODUCT_CATEGORY,PRODUCT_CATEGORY_ZH:()=>PRODUCT_CATEGORY_ZH});var APP_NAME,APP_NAME_ZH,APP_BRAND_GLYPH,CLI_COMMAND_NAME,PRODUCT_CATEGORY,PRODUCT_CATEGORY_ZH,APP_VERSION_FALLBACK,APP_VERSION,APP_WORDMARK,APP_BRAND_SUBTITLE,APP_BRAND_TAGLINE_ZH,APP_BRAND_TAGLINE_SHORT_ZH,APP_BRAND_TAGLINE_SHORT_EN,APP_BRAND_LOCKUP,APP_WELCOME_TITLE,init_branding=__esm({"src/constants/branding.ts"(){APP_NAME="Clavue",APP_NAME_ZH="\u514B\u62C9\u7EF4",APP_BRAND_GLYPH="\u9F8D",CLI_COMMAND_NAME="clavue",PRODUCT_CATEGORY="Clavue Mainline",PRODUCT_CATEGORY_ZH="Clavue \u4E3B\u7EBF",APP_VERSION_FALLBACK="11.3.12",APP_VERSION=typeof MACRO<"u"?"11.3.12":APP_VERSION_FALLBACK,APP_WORDMARK=`/${APP_NAME.toLowerCase()}`,APP_BRAND_SUBTITLE="AI coding CLI",APP_BRAND_TAGLINE_ZH="\u9F8D\u884C\u4EE3\u7801 \xB7 \u6267\u884C\u4F18\u5148\u7684 AI \u7F16\u7801\u63A7\u5236\u53F0",APP_BRAND_TAGLINE_SHORT_ZH="\u9F8D\u884C\u4EE3\u7801 \xB7 \u6267\u884C\u4F18\u5148",APP_BRAND_TAGLINE_SHORT_EN="Dragon code \xB7 execution-first",APP_BRAND_LOCKUP=`\u9F8D ${APP_NAME.toUpperCase()}`,APP_WELCOME_TITLE=APP_WORDMARK}});function arrayMap(array2,iteratee2){for(var index=-1,length=array2==null?0:array2.length,result2=Array(length);++index<length;)result2[index]=iteratee2(array2[index],index,array2);return result2}var arrayMap_default,init_arrayMap=__esm({"../../node_modules/lodash-es/_arrayMap.js"(){__name(arrayMap,"arrayMap");arrayMap_default=arrayMap}});function stackClear(){this.__data__=new ListCache_default,this.size=0}var stackClear_default,init_stackClear=__esm({"../../node_modules/lodash-es/_stackClear.js"(){init_ListCache();__name(stackClear,"stackClear");stackClear_default=stackClear}});function stackDelete(key){var data=this.__data__,result2=data.delete(key);return this.size=data.size,result2}var stackDelete_default,init_stackDelete=__esm({"../../node_modules/lodash-es/_stackDelete.js"(){__name(stackDelete,"stackDelete");stackDelete_default=stackDelete}});function stackGet(key){return this.__data__.get(key)}var stackGet_default,init_stackGet=__esm({"../../node_modules/lodash-es/_stackGet.js"(){__name(stackGet,"stackGet");stackGet_default=stackGet}});function stackHas(key){return this.__data__.has(key)}var stackHas_default,init_stackHas=__esm({"../../node_modules/lodash-es/_stackHas.js"(){__name(stackHas,"stackHas");stackHas_default=stackHas}});function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache_default){var pairs=data.__data__;if(!Map_default||pairs.length<LARGE_ARRAY_SIZE-1)return pairs.push([key,value]),this.size=++data.size,this;data=this.__data__=new MapCache_default(pairs)}return data.set(key,value),this.size=data.size,this}var LARGE_ARRAY_SIZE,stackSet_default,init_stackSet=__esm({"../../node_modules/lodash-es/_stackSet.js"(){init_ListCache();init_Map();init_MapCache();LARGE_ARRAY_SIZE=200;__name(stackSet,"stackSet");stackSet_default=stackSet}});function Stack(entries){var data=this.__data__=new ListCache_default(entries);this.size=data.size}var Stack_default,init_Stack=__esm({"../../node_modules/lodash-es/_Stack.js"(){init_ListCache();init_stackClear();init_stackDelete();init_stackGet();init_stackHas();init_stackSet();__name(Stack,"Stack");Stack.prototype.clear=stackClear_default;Stack.prototype.delete=stackDelete_default;Stack.prototype.get=stackGet_default;Stack.prototype.has=stackHas_default;Stack.prototype.set=stackSet_default;Stack_default=Stack}});function setCacheAdd(value){return this.__data__.set(value,HASH_UNDEFINED3),this}var HASH_UNDEFINED3,setCacheAdd_default,init_setCacheAdd=__esm({"../../node_modules/lodash-es/_setCacheAdd.js"(){HASH_UNDEFINED3="__lodash_hash_undefined__";__name(setCacheAdd,"setCacheAdd");setCacheAdd_default=setCacheAdd}});function setCacheHas(value){return this.__data__.has(value)}var setCacheHas_default,init_setCacheHas=__esm({"../../node_modules/lodash-es/_setCacheHas.js"(){__name(setCacheHas,"setCacheHas");setCacheHas_default=setCacheHas}});function SetCache(values2){var index=-1,length=values2==null?0:values2.length;for(this.__data__=new MapCache_default;++index<length;)this.add(values2[index])}var SetCache_default,init_SetCache=__esm({"../../node_modules/lodash-es/_SetCache.js"(){init_MapCache();init_setCacheAdd();init_setCacheHas();__name(SetCache,"SetCache");SetCache.prototype.add=SetCache.prototype.push=setCacheAdd_default;SetCache.prototype.has=setCacheHas_default;SetCache_default=SetCache}});function arraySome(array2,predicate){for(var index=-1,length=array2==null?0:array2.length;++index<length;)if(predicate(array2[index],index,array2))return!0;return!1}var arraySome_default,init_arraySome=__esm({"../../node_modules/lodash-es/_arraySome.js"(){__name(arraySome,"arraySome");arraySome_default=arraySome}});function cacheHas(cache5,key){return cache5.has(key)}var cacheHas_default,init_cacheHas=__esm({"../../node_modules/lodash-es/_cacheHas.js"(){__name(cacheHas,"cacheHas");cacheHas_default=cacheHas}});function equalArrays(array2,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array2.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength))return!1;var arrStacked=stack.get(array2),othStacked=stack.get(other);if(arrStacked&&othStacked)return arrStacked==other&&othStacked==array2;var index=-1,result2=!0,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache_default:void 0;for(stack.set(array2,other),stack.set(other,array2);++index<arrLength;){var arrValue=array2[index],othValue=other[index];if(customizer)var compared=isPartial?customizer(othValue,arrValue,index,other,array2,stack):customizer(arrValue,othValue,index,array2,other,stack);if(compared!==void 0){if(compared)continue;result2=!1;break}if(seen){if(!arraySome_default(other,function(othValue2,othIndex){if(!cacheHas_default(seen,othIndex)&&(arrValue===othValue2||equalFunc(arrValue,othValue2,bitmask,customizer,stack)))return seen.push(othIndex)})){result2=!1;break}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){result2=!1;break}}return stack.delete(array2),stack.delete(other),result2}var COMPARE_PARTIAL_FLAG,COMPARE_UNORDERED_FLAG,equalArrays_default,init_equalArrays=__esm({"../../node_modules/lodash-es/_equalArrays.js"(){init_SetCache();init_arraySome();init_cacheHas();COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;__name(equalArrays,"equalArrays");equalArrays_default=equalArrays}});var Uint8Array2,Uint8Array_default,init_Uint8Array=__esm({"../../node_modules/lodash-es/_Uint8Array.js"(){init_root();Uint8Array2=root_default.Uint8Array,Uint8Array_default=Uint8Array2}});function mapToArray(map3){var index=-1,result2=Array(map3.size);return map3.forEach(function(value,key){result2[++index]=[key,value]}),result2}var mapToArray_default,init_mapToArray=__esm({"../../node_modules/lodash-es/_mapToArray.js"(){__name(mapToArray,"mapToArray");mapToArray_default=mapToArray}});function setToArray(set3){var index=-1,result2=Array(set3.size);return set3.forEach(function(value){result2[++index]=value}),result2}var setToArray_default,init_setToArray=__esm({"../../node_modules/lodash-es/_setToArray.js"(){__name(setToArray,"setToArray");setToArray_default=setToArray}});function equalByTag(object3,other,tag2,bitmask,customizer,equalFunc,stack){switch(tag2){case dataViewTag:if(object3.byteLength!=other.byteLength||object3.byteOffset!=other.byteOffset)return!1;object3=object3.buffer,other=other.buffer;case arrayBufferTag:return!(object3.byteLength!=other.byteLength||!equalFunc(new Uint8Array_default(object3),new Uint8Array_default(other)));case boolTag:case dateTag:case numberTag:return eq_default(+object3,+other);case errorTag:return object3.name==other.name&&object3.message==other.message;case regexpTag:case stringTag:return object3==other+"";case mapTag:var convert=mapToArray_default;case setTag:var isPartial=bitmask&COMPARE_PARTIAL_FLAG2;if(convert||(convert=setToArray_default),object3.size!=other.size&&!isPartial)return!1;var stacked=stack.get(object3);if(stacked)return stacked==other;bitmask|=COMPARE_UNORDERED_FLAG2,stack.set(object3,other);var result2=equalArrays_default(convert(object3),convert(other),bitmask,customizer,equalFunc,stack);return stack.delete(object3),result2;case symbolTag:if(symbolValueOf)return symbolValueOf.call(object3)==symbolValueOf.call(other)}return!1}var COMPARE_PARTIAL_FLAG2,COMPARE_UNORDERED_FLAG2,boolTag,dateTag,errorTag,mapTag,numberTag,regexpTag,setTag,stringTag,symbolTag,arrayBufferTag,dataViewTag,symbolProto,symbolValueOf,equalByTag_default,init_equalByTag=__esm({"../../node_modules/lodash-es/_equalByTag.js"(){init_Symbol();init_Uint8Array();init_eq();init_equalArrays();init_mapToArray();init_setToArray();COMPARE_PARTIAL_FLAG2=1,COMPARE_UNORDERED_FLAG2=2,boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",mapTag="[object Map]",numberTag="[object Number]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",symbolTag="[object Symbol]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",symbolProto=Symbol_default?Symbol_default.prototype:void 0,symbolValueOf=symbolProto?symbolProto.valueOf:void 0;__name(equalByTag,"equalByTag");equalByTag_default=equalByTag}});function arrayPush(array2,values2){for(var index=-1,length=values2.length,offset=array2.length;++index<length;)array2[offset+index]=values2[index];return array2}var arrayPush_default,init_arrayPush=__esm({"../../node_modules/lodash-es/_arrayPush.js"(){__name(arrayPush,"arrayPush");arrayPush_default=arrayPush}});var isArray,isArray_default,init_isArray=__esm({"../../node_modules/lodash-es/isArray.js"(){isArray=Array.isArray,isArray_default=isArray}});function baseGetAllKeys(object3,keysFunc,symbolsFunc){var result2=keysFunc(object3);return isArray_default(object3)?result2:arrayPush_default(result2,symbolsFunc(object3))}var baseGetAllKeys_default,init_baseGetAllKeys=__esm({"../../node_modules/lodash-es/_baseGetAllKeys.js"(){init_arrayPush();init_isArray();__name(baseGetAllKeys,"baseGetAllKeys");baseGetAllKeys_default=baseGetAllKeys}});function arrayFilter(array2,predicate){for(var index=-1,length=array2==null?0:array2.length,resIndex=0,result2=[];++index<length;){var value=array2[index];predicate(value,index,array2)&&(result2[resIndex++]=value)}return result2}var arrayFilter_default,init_arrayFilter=__esm({"../../node_modules/lodash-es/_arrayFilter.js"(){__name(arrayFilter,"arrayFilter");arrayFilter_default=arrayFilter}});function stubArray(){return[]}var stubArray_default,init_stubArray=__esm({"../../node_modules/lodash-es/stubArray.js"(){__name(stubArray,"stubArray");stubArray_default=stubArray}});var objectProto6,propertyIsEnumerable,nativeGetSymbols,getSymbols,getSymbols_default,init_getSymbols=__esm({"../../node_modules/lodash-es/_getSymbols.js"(){init_arrayFilter();init_stubArray();objectProto6=Object.prototype,propertyIsEnumerable=objectProto6.propertyIsEnumerable,nativeGetSymbols=Object.getOwnPropertySymbols,getSymbols=nativeGetSymbols?function(object3){return object3==null?[]:(object3=Object(object3),arrayFilter_default(nativeGetSymbols(object3),function(symbol2){return propertyIsEnumerable.call(object3,symbol2)}))}:stubArray_default,getSymbols_default=getSymbols}});function baseTimes(n4,iteratee2){for(var index=-1,result2=Array(n4);++index<n4;)result2[index]=iteratee2(index);return result2}var baseTimes_default,init_baseTimes=__esm({"../../node_modules/lodash-es/_baseTimes.js"(){__name(baseTimes,"baseTimes");baseTimes_default=baseTimes}});function isObjectLike(value){return value!=null&&typeof value=="object"}var isObjectLike_default,init_isObjectLike=__esm({"../../node_modules/lodash-es/isObjectLike.js"(){__name(isObjectLike,"isObjectLike");isObjectLike_default=isObjectLike}});function baseIsArguments(value){return isObjectLike_default(value)&&baseGetTag_default(value)==argsTag}var argsTag,baseIsArguments_default,init_baseIsArguments=__esm({"../../node_modules/lodash-es/_baseIsArguments.js"(){init_baseGetTag();init_isObjectLike();argsTag="[object Arguments]";__name(baseIsArguments,"baseIsArguments");baseIsArguments_default=baseIsArguments}});var objectProto7,hasOwnProperty5,propertyIsEnumerable2,isArguments,isArguments_default,init_isArguments=__esm({"../../node_modules/lodash-es/isArguments.js"(){init_baseIsArguments();init_isObjectLike();objectProto7=Object.prototype,hasOwnProperty5=objectProto7.hasOwnProperty,propertyIsEnumerable2=objectProto7.propertyIsEnumerable,isArguments=baseIsArguments_default((function(){return arguments})())?baseIsArguments_default:function(value){return isObjectLike_default(value)&&hasOwnProperty5.call(value,"callee")&&!propertyIsEnumerable2.call(value,"callee")},isArguments_default=isArguments}});function stubFalse(){return!1}var stubFalse_default,init_stubFalse=__esm({"../../node_modules/lodash-es/stubFalse.js"(){__name(stubFalse,"stubFalse");stubFalse_default=stubFalse}});var freeExports,freeModule,moduleExports,Buffer2,nativeIsBuffer,isBuffer,isBuffer_default,init_isBuffer=__esm({"../../node_modules/lodash-es/isBuffer.js"(){init_root();init_stubFalse();freeExports=typeof exports=="object"&&exports&&!exports.nodeType&&exports,freeModule=freeExports&&typeof module=="object"&&module&&!module.nodeType&&module,moduleExports=freeModule&&freeModule.exports===freeExports,Buffer2=moduleExports?root_default.Buffer:void 0,nativeIsBuffer=Buffer2?Buffer2.isBuffer:void 0,isBuffer=nativeIsBuffer||stubFalse_default,isBuffer_default=isBuffer}});function isIndex(value,length){var type=typeof value;return length=length??MAX_SAFE_INTEGER,!!length&&(type=="number"||type!="symbol"&&reIsUint.test(value))&&value>-1&&value%1==0&&value<length}var MAX_SAFE_INTEGER,reIsUint,isIndex_default,init_isIndex=__esm({"../../node_modules/lodash-es/_isIndex.js"(){MAX_SAFE_INTEGER=9007199254740991,reIsUint=/^(?:0|[1-9]\d*)$/;__name(isIndex,"isIndex");isIndex_default=isIndex}});function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER2}var MAX_SAFE_INTEGER2,isLength_default,init_isLength=__esm({"../../node_modules/lodash-es/isLength.js"(){MAX_SAFE_INTEGER2=9007199254740991;__name(isLength,"isLength");isLength_default=isLength}});function baseIsTypedArray(value){return isObjectLike_default(value)&&isLength_default(value.length)&&!!typedArrayTags[baseGetTag_default(value)]}var argsTag2,arrayTag,boolTag2,dateTag2,errorTag2,funcTag2,mapTag2,numberTag2,objectTag,regexpTag2,setTag2,stringTag2,weakMapTag,arrayBufferTag2,dataViewTag2,float32Tag,float64Tag,int8Tag,int16Tag,int32Tag,uint8Tag,uint8ClampedTag,uint16Tag,uint32Tag,typedArrayTags,baseIsTypedArray_default,init_baseIsTypedArray=__esm({"../../node_modules/lodash-es/_baseIsTypedArray.js"(){init_baseGetTag();init_isLength();init_isObjectLike();argsTag2="[object Arguments]",arrayTag="[object Array]",boolTag2="[object Boolean]",dateTag2="[object Date]",errorTag2="[object Error]",funcTag2="[object Function]",mapTag2="[object Map]",numberTag2="[object Number]",objectTag="[object Object]",regexpTag2="[object RegExp]",setTag2="[object Set]",stringTag2="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag2="[object ArrayBuffer]",dataViewTag2="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0;typedArrayTags[argsTag2]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag2]=typedArrayTags[boolTag2]=typedArrayTags[dataViewTag2]=typedArrayTags[dateTag2]=typedArrayTags[errorTag2]=typedArrayTags[funcTag2]=typedArrayTags[mapTag2]=typedArrayTags[numberTag2]=typedArrayTags[objectTag]=typedArrayTags[regexpTag2]=typedArrayTags[setTag2]=typedArrayTags[stringTag2]=typedArrayTags[weakMapTag]=!1;__name(baseIsTypedArray,"baseIsTypedArray");baseIsTypedArray_default=baseIsTypedArray}});function baseUnary(func){return function(value){return func(value)}}var baseUnary_default,init_baseUnary=__esm({"../../node_modules/lodash-es/_baseUnary.js"(){__name(baseUnary,"baseUnary");baseUnary_default=baseUnary}});var freeExports2,freeModule2,moduleExports2,freeProcess,nodeUtil,nodeUtil_default,init_nodeUtil=__esm({"../../node_modules/lodash-es/_nodeUtil.js"(){init_freeGlobal();freeExports2=typeof exports=="object"&&exports&&!exports.nodeType&&exports,freeModule2=freeExports2&&typeof module=="object"&&module&&!module.nodeType&&module,moduleExports2=freeModule2&&freeModule2.exports===freeExports2,freeProcess=moduleExports2&&freeGlobal_default.process,nodeUtil=(function(){try{var types3=freeModule2&&freeModule2.require&&freeModule2.require("util").types;return types3||freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch{}})(),nodeUtil_default=nodeUtil}});var nodeIsTypedArray,isTypedArray,isTypedArray_default,init_isTypedArray=__esm({"../../node_modules/lodash-es/isTypedArray.js"(){init_baseIsTypedArray();init_baseUnary();init_nodeUtil();nodeIsTypedArray=nodeUtil_default&&nodeUtil_default.isTypedArray,isTypedArray=nodeIsTypedArray?baseUnary_default(nodeIsTypedArray):baseIsTypedArray_default,isTypedArray_default=isTypedArray}});function arrayLikeKeys(value,inherited){var isArr=isArray_default(value),isArg=!isArr&&isArguments_default(value),isBuff=!isArr&&!isArg&&isBuffer_default(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray_default(value),skipIndexes=isArr||isArg||isBuff||isType,result2=skipIndexes?baseTimes_default(value.length,String):[],length=result2.length;for(var key in value)(inherited||hasOwnProperty6.call(value,key))&&!(skipIndexes&&(key=="length"||isBuff&&(key=="offset"||key=="parent")||isType&&(key=="buffer"||key=="byteLength"||key=="byteOffset")||isIndex_default(key,length)))&&result2.push(key);return result2}var objectProto8,hasOwnProperty6,arrayLikeKeys_default,init_arrayLikeKeys=__esm({"../../node_modules/lodash-es/_arrayLikeKeys.js"(){init_baseTimes();init_isArguments();init_isArray();init_isBuffer();init_isIndex();init_isTypedArray();objectProto8=Object.prototype,hasOwnProperty6=objectProto8.hasOwnProperty;__name(arrayLikeKeys,"arrayLikeKeys");arrayLikeKeys_default=arrayLikeKeys}});function isPrototype(value){var Ctor=value&&value.constructor,proto2=typeof Ctor=="function"&&Ctor.prototype||objectProto9;return value===proto2}var objectProto9,isPrototype_default,init_isPrototype=__esm({"../../node_modules/lodash-es/_isPrototype.js"(){objectProto9=Object.prototype;__name(isPrototype,"isPrototype");isPrototype_default=isPrototype}});function overArg(func,transform3){return function(arg){return func(transform3(arg))}}var overArg_default,init_overArg=__esm({"../../node_modules/lodash-es/_overArg.js"(){__name(overArg,"overArg");overArg_default=overArg}});var nativeKeys,nativeKeys_default,init_nativeKeys=__esm({"../../node_modules/lodash-es/_nativeKeys.js"(){init_overArg();nativeKeys=overArg_default(Object.keys,Object),nativeKeys_default=nativeKeys}});function baseKeys(object3){if(!isPrototype_default(object3))return nativeKeys_default(object3);var result2=[];for(var key in Object(object3))hasOwnProperty7.call(object3,key)&&key!="constructor"&&result2.push(key);return result2}var objectProto10,hasOwnProperty7,baseKeys_default,init_baseKeys=__esm({"../../node_modules/lodash-es/_baseKeys.js"(){init_isPrototype();init_nativeKeys();objectProto10=Object.prototype,hasOwnProperty7=objectProto10.hasOwnProperty;__name(baseKeys,"baseKeys");baseKeys_default=baseKeys}});function isArrayLike(value){return value!=null&&isLength_default(value.length)&&!isFunction_default(value)}var isArrayLike_default,init_isArrayLike=__esm({"../../node_modules/lodash-es/isArrayLike.js"(){init_isFunction();init_isLength();__name(isArrayLike,"isArrayLike");isArrayLike_default=isArrayLike}});function keys(object3){return isArrayLike_default(object3)?arrayLikeKeys_default(object3):baseKeys_default(object3)}var keys_default,init_keys=__esm({"../../node_modules/lodash-es/keys.js"(){init_arrayLikeKeys();init_baseKeys();init_isArrayLike();__name(keys,"keys");keys_default=keys}});function getAllKeys(object3){return baseGetAllKeys_default(object3,keys_default,getSymbols_default)}var getAllKeys_default,init_getAllKeys=__esm({"../../node_modules/lodash-es/_getAllKeys.js"(){init_baseGetAllKeys();init_getSymbols();init_keys();__name(getAllKeys,"getAllKeys");getAllKeys_default=getAllKeys}});function equalObjects(object3,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG3,objProps=getAllKeys_default(object3),objLength=objProps.length,othProps=getAllKeys_default(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial)return!1;for(var index=objLength;index--;){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty8.call(other,key)))return!1}var objStacked=stack.get(object3),othStacked=stack.get(other);if(objStacked&&othStacked)return objStacked==other&&othStacked==object3;var result2=!0;stack.set(object3,other),stack.set(other,object3);for(var skipCtor=isPartial;++index<objLength;){key=objProps[index];var objValue=object3[key],othValue=other[key];if(customizer)var compared=isPartial?customizer(othValue,objValue,key,other,object3,stack):customizer(objValue,othValue,key,object3,other,stack);if(!(compared===void 0?objValue===othValue||equalFunc(objValue,othValue,bitmask,customizer,stack):compared)){result2=!1;break}skipCtor||(skipCtor=key=="constructor")}if(result2&&!skipCtor){var objCtor=object3.constructor,othCtor=other.constructor;objCtor!=othCtor&&"constructor"in object3&&"constructor"in other&&!(typeof objCtor=="function"&&objCtor instanceof objCtor&&typeof othCtor=="function"&&othCtor instanceof othCtor)&&(result2=!1)}return stack.delete(object3),stack.delete(other),result2}var COMPARE_PARTIAL_FLAG3,objectProto11,hasOwnProperty8,equalObjects_default,init_equalObjects=__esm({"../../node_modules/lodash-es/_equalObjects.js"(){init_getAllKeys();COMPARE_PARTIAL_FLAG3=1,objectProto11=Object.prototype,hasOwnProperty8=objectProto11.hasOwnProperty;__name(equalObjects,"equalObjects");equalObjects_default=equalObjects}});var DataView2,DataView_default,init_DataView=__esm({"../../node_modules/lodash-es/_DataView.js"(){init_getNative();init_root();DataView2=getNative_default(root_default,"DataView"),DataView_default=DataView2}});var Promise2,Promise_default,init_Promise=__esm({"../../node_modules/lodash-es/_Promise.js"(){init_getNative();init_root();Promise2=getNative_default(root_default,"Promise"),Promise_default=Promise2}});var Set2,Set_default,init_Set=__esm({"../../node_modules/lodash-es/_Set.js"(){init_getNative();init_root();Set2=getNative_default(root_default,"Set"),Set_default=Set2}});var WeakMap2,WeakMap_default,init_WeakMap=__esm({"../../node_modules/lodash-es/_WeakMap.js"(){init_getNative();init_root();WeakMap2=getNative_default(root_default,"WeakMap"),WeakMap_default=WeakMap2}});var mapTag3,objectTag2,promiseTag,setTag3,weakMapTag2,dataViewTag3,dataViewCtorString,mapCtorString,promiseCtorString,setCtorString,weakMapCtorString,getTag,getTag_default,init_getTag=__esm({"../../node_modules/lodash-es/_getTag.js"(){init_DataView();init_Map();init_Promise();init_Set();init_WeakMap();init_baseGetTag();init_toSource();mapTag3="[object Map]",objectTag2="[object Object]",promiseTag="[object Promise]",setTag3="[object Set]",weakMapTag2="[object WeakMap]",dataViewTag3="[object DataView]",dataViewCtorString=toSource_default(DataView_default),mapCtorString=toSource_default(Map_default),promiseCtorString=toSource_default(Promise_default),setCtorString=toSource_default(Set_default),weakMapCtorString=toSource_default(WeakMap_default),getTag=baseGetTag_default;(DataView_default&&getTag(new DataView_default(new ArrayBuffer(1)))!=dataViewTag3||Map_default&&getTag(new Map_default)!=mapTag3||Promise_default&&getTag(Promise_default.resolve())!=promiseTag||Set_default&&getTag(new Set_default)!=setTag3||WeakMap_default&&getTag(new WeakMap_default)!=weakMapTag2)&&(getTag=__name(function(value){var result2=baseGetTag_default(value),Ctor=result2==objectTag2?value.constructor:void 0,ctorString=Ctor?toSource_default(Ctor):"";if(ctorString)switch(ctorString){case dataViewCtorString:return dataViewTag3;case mapCtorString:return mapTag3;case promiseCtorString:return promiseTag;case setCtorString:return setTag3;case weakMapCtorString:return weakMapTag2}return result2},"getTag"));getTag_default=getTag}});function baseIsEqualDeep(object3,other,bitmask,customizer,equalFunc,stack){var objIsArr=isArray_default(object3),othIsArr=isArray_default(other),objTag=objIsArr?arrayTag2:getTag_default(object3),othTag=othIsArr?arrayTag2:getTag_default(other);objTag=objTag==argsTag3?objectTag3:objTag,othTag=othTag==argsTag3?objectTag3:othTag;var objIsObj=objTag==objectTag3,othIsObj=othTag==objectTag3,isSameTag=objTag==othTag;if(isSameTag&&isBuffer_default(object3)){if(!isBuffer_default(other))return!1;objIsArr=!0,objIsObj=!1}if(isSameTag&&!objIsObj)return stack||(stack=new Stack_default),objIsArr||isTypedArray_default(object3)?equalArrays_default(object3,other,bitmask,customizer,equalFunc,stack):equalByTag_default(object3,other,objTag,bitmask,customizer,equalFunc,stack);if(!(bitmask&COMPARE_PARTIAL_FLAG4)){var objIsWrapped=objIsObj&&hasOwnProperty9.call(object3,"__wrapped__"),othIsWrapped=othIsObj&&hasOwnProperty9.call(other,"__wrapped__");if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object3.value():object3,othUnwrapped=othIsWrapped?other.value():other;return stack||(stack=new Stack_default),equalFunc(objUnwrapped,othUnwrapped,bitmask,customizer,stack)}}return isSameTag?(stack||(stack=new Stack_default),equalObjects_default(object3,other,bitmask,customizer,equalFunc,stack)):!1}var COMPARE_PARTIAL_FLAG4,argsTag3,arrayTag2,objectTag3,objectProto12,hasOwnProperty9,baseIsEqualDeep_default,init_baseIsEqualDeep=__esm({"../../node_modules/lodash-es/_baseIsEqualDeep.js"(){init_Stack();init_equalArrays();init_equalByTag();init_equalObjects();init_getTag();init_isArray();init_isBuffer();init_isTypedArray();COMPARE_PARTIAL_FLAG4=1,argsTag3="[object Arguments]",arrayTag2="[object Array]",objectTag3="[object Object]",objectProto12=Object.prototype,hasOwnProperty9=objectProto12.hasOwnProperty;__name(baseIsEqualDeep,"baseIsEqualDeep");baseIsEqualDeep_default=baseIsEqualDeep}});function baseIsEqual(value,other,bitmask,customizer,stack){return value===other?!0:value==null||other==null||!isObjectLike_default(value)&&!isObjectLike_default(other)?value!==value&&other!==other:baseIsEqualDeep_default(value,other,bitmask,customizer,baseIsEqual,stack)}var baseIsEqual_default,init_baseIsEqual=__esm({"../../node_modules/lodash-es/_baseIsEqual.js"(){init_baseIsEqualDeep();init_isObjectLike();__name(baseIsEqual,"baseIsEqual");baseIsEqual_default=baseIsEqual}});function baseIsMatch(object3,source,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object3==null)return!length;for(object3=Object(object3);index--;){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object3[data[0]]:!(data[0]in object3))return!1}for(;++index<length;){data=matchData[index];var key=data[0],objValue=object3[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===void 0&&!(key in object3))return!1}else{var stack=new Stack_default;if(customizer)var result2=customizer(objValue,srcValue,key,object3,source,stack);if(!(result2===void 0?baseIsEqual_default(srcValue,objValue,COMPARE_PARTIAL_FLAG5|COMPARE_UNORDERED_FLAG3,customizer,stack):result2))return!1}}return!0}var COMPARE_PARTIAL_FLAG5,COMPARE_UNORDERED_FLAG3,baseIsMatch_default,init_baseIsMatch=__esm({"../../node_modules/lodash-es/_baseIsMatch.js"(){init_Stack();init_baseIsEqual();COMPARE_PARTIAL_FLAG5=1,COMPARE_UNORDERED_FLAG3=2;__name(baseIsMatch,"baseIsMatch");baseIsMatch_default=baseIsMatch}});function isStrictComparable(value){return value===value&&!isObject_default(value)}var isStrictComparable_default,init_isStrictComparable=__esm({"../../node_modules/lodash-es/_isStrictComparable.js"(){init_isObject();__name(isStrictComparable,"isStrictComparable");isStrictComparable_default=isStrictComparable}});function getMatchData(object3){for(var result2=keys_default(object3),length=result2.length;length--;){var key=result2[length],value=object3[key];result2[length]=[key,value,isStrictComparable_default(value)]}return result2}var getMatchData_default,init_getMatchData=__esm({"../../node_modules/lodash-es/_getMatchData.js"(){init_isStrictComparable();init_keys();__name(getMatchData,"getMatchData");getMatchData_default=getMatchData}});function matchesStrictComparable(key,srcValue){return function(object3){return object3==null?!1:object3[key]===srcValue&&(srcValue!==void 0||key in Object(object3))}}var matchesStrictComparable_default,init_matchesStrictComparable=__esm({"../../node_modules/lodash-es/_matchesStrictComparable.js"(){__name(matchesStrictComparable,"matchesStrictComparable");matchesStrictComparable_default=matchesStrictComparable}});function baseMatches(source){var matchData=getMatchData_default(source);return matchData.length==1&&matchData[0][2]?matchesStrictComparable_default(matchData[0][0],matchData[0][1]):function(object3){return object3===source||baseIsMatch_default(object3,source,matchData)}}var baseMatches_default,init_baseMatches=__esm({"../../node_modules/lodash-es/_baseMatches.js"(){init_baseIsMatch();init_getMatchData();init_matchesStrictComparable();__name(baseMatches,"baseMatches");baseMatches_default=baseMatches}});function isSymbol(value){return typeof value=="symbol"||isObjectLike_default(value)&&baseGetTag_default(value)==symbolTag2}var symbolTag2,isSymbol_default,init_isSymbol=__esm({"../../node_modules/lodash-es/isSymbol.js"(){init_baseGetTag();init_isObjectLike();symbolTag2="[object Symbol]";__name(isSymbol,"isSymbol");isSymbol_default=isSymbol}});function isKey(value,object3){if(isArray_default(value))return!1;var type=typeof value;return type=="number"||type=="symbol"||type=="boolean"||value==null||isSymbol_default(value)?!0:reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object3!=null&&value in Object(object3)}var reIsDeepProp,reIsPlainProp,isKey_default,init_isKey=__esm({"../../node_modules/lodash-es/_isKey.js"(){init_isArray();init_isSymbol();reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/;__name(isKey,"isKey");isKey_default=isKey}});function memoizeCapped(func){var result2=memoize_default(func,function(key){return cache5.size===MAX_MEMOIZE_SIZE&&cache5.clear(),key}),cache5=result2.cache;return result2}var MAX_MEMOIZE_SIZE,memoizeCapped_default,init_memoizeCapped=__esm({"../../node_modules/lodash-es/_memoizeCapped.js"(){init_memoize();MAX_MEMOIZE_SIZE=500;__name(memoizeCapped,"memoizeCapped");memoizeCapped_default=memoizeCapped}});var rePropName,reEscapeChar,stringToPath,stringToPath_default,init_stringToPath=__esm({"../../node_modules/lodash-es/_stringToPath.js"(){init_memoizeCapped();rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=memoizeCapped_default(function(string4){var result2=[];return string4.charCodeAt(0)===46&&result2.push(""),string4.replace(rePropName,function(match,number4,quote2,subString){result2.push(quote2?subString.replace(reEscapeChar,"$1"):number4||match)}),result2}),stringToPath_default=stringToPath}});function baseToString(value){if(typeof value=="string")return value;if(isArray_default(value))return arrayMap_default(value,baseToString)+"";if(isSymbol_default(value))return symbolToString?symbolToString.call(value):"";var result2=value+"";return result2=="0"&&1/value==-INFINITY?"-0":result2}var INFINITY,symbolProto2,symbolToString,baseToString_default,init_baseToString=__esm({"../../node_modules/lodash-es/_baseToString.js"(){init_Symbol();init_arrayMap();init_isArray();init_isSymbol();INFINITY=1/0,symbolProto2=Symbol_default?Symbol_default.prototype:void 0,symbolToString=symbolProto2?symbolProto2.toString:void 0;__name(baseToString,"baseToString");baseToString_default=baseToString}});function toString(value){return value==null?"":baseToString_default(value)}var toString_default,init_toString=__esm({"../../node_modules/lodash-es/toString.js"(){init_baseToString();__name(toString,"toString");toString_default=toString}});function castPath(value,object3){return isArray_default(value)?value:isKey_default(value,object3)?[value]:stringToPath_default(toString_default(value))}var castPath_default,init_castPath=__esm({"../../node_modules/lodash-es/_castPath.js"(){init_isArray();init_isKey();init_stringToPath();init_toString();__name(castPath,"castPath");castPath_default=castPath}});function toKey(value){if(typeof value=="string"||isSymbol_default(value))return value;var result2=value+"";return result2=="0"&&1/value==-INFINITY2?"-0":result2}var INFINITY2,toKey_default,init_toKey=__esm({"../../node_modules/lodash-es/_toKey.js"(){init_isSymbol();INFINITY2=1/0;__name(toKey,"toKey");toKey_default=toKey}});function baseGet(object3,path36){path36=castPath_default(path36,object3);for(var index=0,length=path36.length;object3!=null&&index<length;)object3=object3[toKey_default(path36[index++])];return index&&index==length?object3:void 0}var baseGet_default,init_baseGet=__esm({"../../node_modules/lodash-es/_baseGet.js"(){init_castPath();init_toKey();__name(baseGet,"baseGet");baseGet_default=baseGet}});function get(object3,path36,defaultValue){var result2=object3==null?void 0:baseGet_default(object3,path36);return result2===void 0?defaultValue:result2}var get_default,init_get=__esm({"../../node_modules/lodash-es/get.js"(){init_baseGet();__name(get,"get");get_default=get}});function baseHasIn(object3,key){return object3!=null&&key in Object(object3)}var baseHasIn_default,init_baseHasIn=__esm({"../../node_modules/lodash-es/_baseHasIn.js"(){__name(baseHasIn,"baseHasIn");baseHasIn_default=baseHasIn}});function hasPath(object3,path36,hasFunc){path36=castPath_default(path36,object3);for(var index=-1,length=path36.length,result2=!1;++index<length;){var key=toKey_default(path36[index]);if(!(result2=object3!=null&&hasFunc(object3,key)))break;object3=object3[key]}return result2||++index!=length?result2:(length=object3==null?0:object3.length,!!length&&isLength_default(length)&&isIndex_default(key,length)&&(isArray_default(object3)||isArguments_default(object3)))}var hasPath_default,init_hasPath=__esm({"../../node_modules/lodash-es/_hasPath.js"(){init_castPath();init_isArguments();init_isArray();init_isIndex();init_isLength();init_toKey();__name(hasPath,"hasPath");hasPath_default=hasPath}});function hasIn(object3,path36){return object3!=null&&hasPath_default(object3,path36,baseHasIn_default)}var hasIn_default,init_hasIn=__esm({"../../node_modules/lodash-es/hasIn.js"(){init_baseHasIn();init_hasPath();__name(hasIn,"hasIn");hasIn_default=hasIn}});function baseMatchesProperty(path36,srcValue){return isKey_default(path36)&&isStrictComparable_default(srcValue)?matchesStrictComparable_default(toKey_default(path36),srcValue):function(object3){var objValue=get_default(object3,path36);return objValue===void 0&&objValue===srcValue?hasIn_default(object3,path36):baseIsEqual_default(srcValue,objValue,COMPARE_PARTIAL_FLAG6|COMPARE_UNORDERED_FLAG4)}}var COMPARE_PARTIAL_FLAG6,COMPARE_UNORDERED_FLAG4,baseMatchesProperty_default,init_baseMatchesProperty=__esm({"../../node_modules/lodash-es/_baseMatchesProperty.js"(){init_baseIsEqual();init_get();init_hasIn();init_isKey();init_isStrictComparable();init_matchesStrictComparable();init_toKey();COMPARE_PARTIAL_FLAG6=1,COMPARE_UNORDERED_FLAG4=2;__name(baseMatchesProperty,"baseMatchesProperty");baseMatchesProperty_default=baseMatchesProperty}});function identity(value){return value}var identity_default,init_identity=__esm({"../../node_modules/lodash-es/identity.js"(){__name(identity,"identity");identity_default=identity}});function baseProperty(key){return function(object3){return object3?.[key]}}var baseProperty_default,init_baseProperty=__esm({"../../node_modules/lodash-es/_baseProperty.js"(){__name(baseProperty,"baseProperty");baseProperty_default=baseProperty}});function basePropertyDeep(path36){return function(object3){return baseGet_default(object3,path36)}}var basePropertyDeep_default,init_basePropertyDeep=__esm({"../../node_modules/lodash-es/_basePropertyDeep.js"(){init_baseGet();__name(basePropertyDeep,"basePropertyDeep");basePropertyDeep_default=basePropertyDeep}});function property(path36){return isKey_default(path36)?baseProperty_default(toKey_default(path36)):basePropertyDeep_default(path36)}var property_default,init_property=__esm({"../../node_modules/lodash-es/property.js"(){init_baseProperty();init_basePropertyDeep();init_isKey();init_toKey();__name(property,"property");property_default=property}});function baseIteratee(value){return typeof value=="function"?value:value==null?identity_default:typeof value=="object"?isArray_default(value)?baseMatchesProperty_default(value[0],value[1]):baseMatches_default(value):property_default(value)}var baseIteratee_default,init_baseIteratee=__esm({"../../node_modules/lodash-es/_baseIteratee.js"(){init_baseMatches();init_baseMatchesProperty();init_identity();init_isArray();init_property();__name(baseIteratee,"baseIteratee");baseIteratee_default=baseIteratee}});var defineProperty,defineProperty_default,init_defineProperty=__esm({"../../node_modules/lodash-es/_defineProperty.js"(){init_getNative();defineProperty=(function(){try{var func=getNative_default(Object,"defineProperty");return func({},"",{}),func}catch{}})(),defineProperty_default=defineProperty}});function baseAssignValue(object3,key,value){key=="__proto__"&&defineProperty_default?defineProperty_default(object3,key,{configurable:!0,enumerable:!0,value,writable:!0}):object3[key]=value}var baseAssignValue_default,init_baseAssignValue=__esm({"../../node_modules/lodash-es/_baseAssignValue.js"(){init_defineProperty();__name(baseAssignValue,"baseAssignValue");baseAssignValue_default=baseAssignValue}});function assignValue(object3,key,value){var objValue=object3[key];(!(hasOwnProperty10.call(object3,key)&&eq_default(objValue,value))||value===void 0&&!(key in object3))&&baseAssignValue_default(object3,key,value)}var objectProto13,hasOwnProperty10,assignValue_default,init_assignValue=__esm({"../../node_modules/lodash-es/_assignValue.js"(){init_baseAssignValue();init_eq();objectProto13=Object.prototype,hasOwnProperty10=objectProto13.hasOwnProperty;__name(assignValue,"assignValue");assignValue_default=assignValue}});function baseSet(object3,path36,value,customizer){if(!isObject_default(object3))return object3;path36=castPath_default(path36,object3);for(var index=-1,length=path36.length,lastIndex=length-1,nested=object3;nested!=null&&++index<length;){var key=toKey_default(path36[index]),newValue=value;if(key==="__proto__"||key==="constructor"||key==="prototype")return object3;if(index!=lastIndex){var objValue=nested[key];newValue=customizer?customizer(objValue,key,nested):void 0,newValue===void 0&&(newValue=isObject_default(objValue)?objValue:isIndex_default(path36[index+1])?[]:{})}assignValue_default(nested,key,newValue),nested=nested[key]}return object3}var baseSet_default,init_baseSet=__esm({"../../node_modules/lodash-es/_baseSet.js"(){init_assignValue();init_castPath();init_isIndex();init_isObject();init_toKey();__name(baseSet,"baseSet");baseSet_default=baseSet}});function basePickBy(object3,paths2,predicate){for(var index=-1,length=paths2.length,result2={};++index<length;){var path36=paths2[index],value=baseGet_default(object3,path36);predicate(value,path36)&&baseSet_default(result2,castPath_default(path36,object3),value)}return result2}var basePickBy_default,init_basePickBy=__esm({"../../node_modules/lodash-es/_basePickBy.js"(){init_baseGet();init_baseSet();init_castPath();__name(basePickBy,"basePickBy");basePickBy_default=basePickBy}});var getPrototype,getPrototype_default,init_getPrototype=__esm({"../../node_modules/lodash-es/_getPrototype.js"(){init_overArg();getPrototype=overArg_default(Object.getPrototypeOf,Object),getPrototype_default=getPrototype}});var nativeGetSymbols2,getSymbolsIn,getSymbolsIn_default,init_getSymbolsIn=__esm({"../../node_modules/lodash-es/_getSymbolsIn.js"(){init_arrayPush();init_getPrototype();init_getSymbols();init_stubArray();nativeGetSymbols2=Object.getOwnPropertySymbols,getSymbolsIn=nativeGetSymbols2?function(object3){for(var result2=[];object3;)arrayPush_default(result2,getSymbols_default(object3)),object3=getPrototype_default(object3);return result2}:stubArray_default,getSymbolsIn_default=getSymbolsIn}});function nativeKeysIn(object3){var result2=[];if(object3!=null)for(var key in Object(object3))result2.push(key);return result2}var nativeKeysIn_default,init_nativeKeysIn=__esm({"../../node_modules/lodash-es/_nativeKeysIn.js"(){__name(nativeKeysIn,"nativeKeysIn");nativeKeysIn_default=nativeKeysIn}});function baseKeysIn(object3){if(!isObject_default(object3))return nativeKeysIn_default(object3);var isProto=isPrototype_default(object3),result2=[];for(var key in object3)key=="constructor"&&(isProto||!hasOwnProperty11.call(object3,key))||result2.push(key);return result2}var objectProto14,hasOwnProperty11,baseKeysIn_default,init_baseKeysIn=__esm({"../../node_modules/lodash-es/_baseKeysIn.js"(){init_isObject();init_isPrototype();init_nativeKeysIn();objectProto14=Object.prototype,hasOwnProperty11=objectProto14.hasOwnProperty;__name(baseKeysIn,"baseKeysIn");baseKeysIn_default=baseKeysIn}});function keysIn(object3){return isArrayLike_default(object3)?arrayLikeKeys_default(object3,!0):baseKeysIn_default(object3)}var keysIn_default,init_keysIn=__esm({"../../node_modules/lodash-es/keysIn.js"(){init_arrayLikeKeys();init_baseKeysIn();init_isArrayLike();__name(keysIn,"keysIn");keysIn_default=keysIn}});function getAllKeysIn(object3){return baseGetAllKeys_default(object3,keysIn_default,getSymbolsIn_default)}var getAllKeysIn_default,init_getAllKeysIn=__esm({"../../node_modules/lodash-es/_getAllKeysIn.js"(){init_baseGetAllKeys();init_getSymbolsIn();init_keysIn();__name(getAllKeysIn,"getAllKeysIn");getAllKeysIn_default=getAllKeysIn}});function pickBy(object3,predicate){if(object3==null)return{};var props=arrayMap_default(getAllKeysIn_default(object3),function(prop){return[prop]});return predicate=baseIteratee_default(predicate),basePickBy_default(object3,props,function(value,path36){return predicate(value,path36[0])})}var pickBy_default,init_pickBy=__esm({"../../node_modules/lodash-es/pickBy.js"(){init_arrayMap();init_baseIteratee();init_basePickBy();init_getAllKeysIn();__name(pickBy,"pickBy");pickBy_default=pickBy}});function baseSum(array2,iteratee2){for(var result2,index=-1,length=array2.length;++index<length;){var current=iteratee2(array2[index]);current!==void 0&&(result2=result2===void 0?current:result2+current)}return result2}var baseSum_default,init_baseSum=__esm({"../../node_modules/lodash-es/_baseSum.js"(){__name(baseSum,"baseSum");baseSum_default=baseSum}});function sumBy(array2,iteratee2){return array2&&array2.length?baseSum_default(array2,baseIteratee_default(iteratee2,2)):0}var sumBy_default,init_sumBy=__esm({"../../node_modules/lodash-es/sumBy.js"(){init_baseIteratee();init_baseSum();__name(sumBy,"sumBy");sumBy_default=sumBy}});function classifyReviewFindings(reviewText,plantedFingerprints=[]){let text3=String(reviewText??"").trim();if(!text3)return{empty:!0,lgtmOnly:!0,findingLineCount:0,namesArtifacts:!1,matchedFingerprints:[],caughtPlantedBug:!1};let lower4=text3.toLowerCase(),lines=text3.split(/\n/).map(l=>l.trim()).filter(Boolean),findingLineCount=0;for(let line of lines)(FINDING_LINE_RE.test(line)||/:\d+/.test(line)||/`[^`]+`/.test(line))&&(findingLineCount+=1);let namesArtifacts=/\b[\w.-]+\.(?:ts|tsx|js|jsx|py|go|rs|java|md)\b/.test(text3)||/\b(src|tests?|lib|pkg)\//.test(text3)||/`[A-Za-z_][\w.]*`/.test(text3),matchedFingerprints=[];for(let fp of plantedFingerprints){let f3=String(fp||"").trim();f3&&lower4.includes(f3.toLowerCase())&&matchedFingerprints.push(f3)}let compact3=text3.replace(/\s+/g," ").trim(),lgtmOnly=LGTM_RE.test(compact3)||PRAISE_ONLY_RE.test(compact3)||findingLineCount===0&&!namesArtifacts&&matchedFingerprints.length===0&&/looks good|lgtm|no issues|ship it|approved|没问题|可以合并|没有问题/i.test(compact3)&&compact3.length<280;return{empty:lgtmOnly||findingLineCount===0&&matchedFingerprints.length===0&&!namesArtifacts&&compact3.length<40,lgtmOnly,findingLineCount,namesArtifacts,matchedFingerprints,caughtPlantedBug:matchedFingerprints.length>0}}function reviewMayAllowKeep(input2){let classification=classifyReviewFindings(input2.reviewText,input2.plantedFingerprints??[]),hasMutation=input2.hasMutation===!0||(input2.mutationFileCount??0)>0,multiFile=(input2.mutationFileCount??0)>=2,verifyFailed=input2.verifyFailed===!0,claimed=input2.claimedComplete===!0;if(verifyFailed&&classification.empty)return{allowKeep:!1,reason:"verify failed and review has no findings",classification};if(hasMutation&&claimed&&classification.empty)return{allowKeep:!1,reason:"completion claim after mutation with empty/LGTM review",classification};if(multiFile&&classification.lgtmOnly&&(input2.plantedFingerprints?.length??0)>0&&!classification.caughtPlantedBug)return{allowKeep:!1,reason:"multi-file review missed planted fingerprints",classification};if((input2.plantedFingerprints?.length??0)>0&&!classification.caughtPlantedBug&&hasMutation)return{allowKeep:!1,reason:"review missed planted bug fingerprints",classification};let citeIds=input2.digestCiteIds??[],digestPaths=input2.digestPaths??[],hasDigestAnchors=citeIds.length>0||digestPaths.length>0,digestPressure=input2.requireDigestCite===!0||hasMutation&&(claimed||multiFile||verifyFailed);if(hasDigestAnchors&&digestPressure&&!classification.caughtPlantedBug){let text3=String(input2.reviewText??"");if(!text3.trim())return{allowKeep:!1,reason:"review missing payload digest cite ids/paths (empty_review)",classification};let hitCite=citeIds.some(id=>text3.includes(id)),hitPath=digestPaths.some(p=>{let base=p.split("/").pop()||p;return text3.includes(p)||base.length>3&&text3.includes(base)});if(!hitCite&&!hitPath)return{allowKeep:!1,reason:"review missing payload digest cite ids/paths (no_cite_or_path_in_review)",classification}}return{allowKeep:!0,reason:classification.caughtPlantedBug?"review caught planted fingerprint(s)":classification.empty?"empty review allowed (no mutation/claim pressure)":"review has substantive findings or no planted bugs",classification}}var LGTM_RE,PRAISE_ONLY_RE,FINDING_LINE_RE,init_reviewFindingsGate=__esm({"src/runtime/reviewFindingsGate.ts"(){LGTM_RE=/^\s*(lgtm|looks good|looks great|ship it|approved|no issues?|no problems?|no bugs?|all good|sgtm|👍)\s*[.!]?\s*$/im,PRAISE_ONLY_RE=/^(?:the code (?:looks|seems) (?:fine|good|correct|solid)|no changes needed|ready to merge)\.?$/im,FINDING_LINE_RE=/^\s*(?:[-*•]|\d+[.)]|FINDINGS?:|BUG\b|ISSUE\b|PROBLEM\b|缺陷|问题|错误)\s+/im;__name(classifyReviewFindings,"classifyReviewFindings");__name(reviewMayAllowKeep,"reviewMayAllowKeep")}});var sessionPayloadDigest_exports={};__export(sessionPayloadDigest_exports,{clearSessionPayloadDigest:()=>clearSessionPayloadDigest,getSessionPayloadDigest:()=>getSessionPayloadDigest,getSessionPayloadDigestAgeMs:()=>getSessionPayloadDigestAgeMs,resetSessionPayloadDigestForTests:()=>resetSessionPayloadDigestForTests,setSessionPayloadDigest:()=>setSessionPayloadDigest});function setSessionPayloadDigest(digest){lastDigest=digest??null,lastSetAtMs=digest?Date.now():0}function getSessionPayloadDigest(){return lastDigest}function clearSessionPayloadDigest(){lastDigest=null,lastSetAtMs=0}function getSessionPayloadDigestAgeMs(now3=Date.now()){return!lastDigest||!lastSetAtMs?null:now3-lastSetAtMs}function resetSessionPayloadDigestForTests(){clearSessionPayloadDigest()}var lastDigest,lastSetAtMs,init_sessionPayloadDigest=__esm({"src/runtime/sessionPayloadDigest.ts"(){lastDigest=null,lastSetAtMs=0;__name(setSessionPayloadDigest,"setSessionPayloadDigest");__name(getSessionPayloadDigest,"getSessionPayloadDigest");__name(clearSessionPayloadDigest,"clearSessionPayloadDigest");__name(getSessionPayloadDigestAgeMs,"getSessionPayloadDigestAgeMs");__name(resetSessionPayloadDigestForTests,"resetSessionPayloadDigestForTests")}});var reviewHardGate_exports={};__export(reviewHardGate_exports,{computeReviewHardGate:()=>computeReviewHardGate,extractRecentReviewText:()=>extractRecentReviewText,indexAfterLatestMutation:()=>indexAfterLatestMutation,isReviewHardGateDisabled:()=>isReviewHardGateDisabled,looksLikeIndependentReviewBody:()=>looksLikeIndependentReviewBody,parseReviewShipVerdict:()=>parseReviewShipVerdict,resolveReviewGateTierFields:()=>resolveReviewGateTierFields});function resolveReviewGateTierFields(input2){return input2.pathTierDecision?{pathTier:String(input2.pathTierDecision.tier||"").toUpperCase()||null,allowBlockingReview:input2.pathTierDecision.allowBlockingReview===!0}:{pathTier:input2.pathTier??null,allowBlockingReview:input2.allowBlockingReview}}function parseReviewShipVerdict(reviewText){let text3=String(reviewText??"").trim();if(!text3)return"none";let lower4=text3.toLowerCase(),structured=/\bverdict\s*[::]\s*(ship|fix[_-]?first|fix|rethink|lgtm|approve[d]?)\b/i.exec(text3);if(structured?.[1]){let v2=structured[1].toLowerCase().replace(/-/g,"_");return v2==="ship"||v2==="lgtm"||v2.startsWith("approve")?"ship":v2==="rethink"?"rethink":"fix_first"}if(/\b(rethink|re-?architect|start over|wrong approach|从根本上重来|重新设计)\b/i.test(text3))return"rethink";if(/\b(fix[_-\s]?first|must fix|blocking issue|do not (?:merge|ship)|needs? fix|阻塞|必须先修|不能合并)\b/i.test(text3))return"fix_first";if(/\b(ship(?:\s+it)?|ready to (?:merge|ship)|approved|lgtm|sgtm|可以合并|可以发版|审查通过)\b/i.test(lower4))return"ship";let cls=classifyReviewFindings(text3);return cls.empty||cls.lgtmOnly?"empty":cls.findingLineCount>0?"fix_first":"empty"}function tierRequiresReview(pathTier,allowBlockingReview){let tier=String(pathTier||"").toUpperCase();return tier==="T0"?{required:!1,tier:"T0"}:tier==="T2"?{required:!0,tier:"T2"}:tier==="T1"?allowBlockingReview===!1?{required:!1,tier:"T1"}:{required:!0,tier:"T1"}:allowBlockingReview===!0?{required:!0,tier:tier||"T?"}:{required:!1,tier:tier||""}}function computeReviewHardGate(input2){let fields=resolveReviewGateTierFields(input2),{required:required2,tier}=tierRequiresReview(fields.pathTier,fields.allowBlockingReview);if(!required2)return null;let phrase=findCompletionClaimPhrase(input2.assistantText);if(!phrase||!(input2.hasMutation===!0||(input2.mutationFileCount??0)>0))return null;let verdict=input2.reviewVerdict??parseReviewShipVerdict(input2.reviewText);if(verdict==="ship"){let digestCiteIds=input2.digestCiteIds,digestPaths=input2.digestPaths;if(!digestCiteIds?.length&&!digestPaths?.length)try{let{getSessionPayloadDigest:getSessionPayloadDigest2}=(init_sessionPayloadDigest(),__toCommonJS(sessionPayloadDigest_exports)),dig=getSessionPayloadDigest2();dig&&(digestCiteIds=dig.citeIds,digestPaths=dig.paths)}catch{}let keep=reviewMayAllowKeep({reviewText:input2.reviewText,hasMutation:!0,mutationFileCount:input2.mutationFileCount,verifyFailed:input2.verifyFailed,claimedComplete:!0,digestCiteIds,digestPaths});if(!keep.allowKeep){let digestMiss=/digest cite/i.test(keep.reason);return{reason:`Review hard gate (${tier}): completion phrase "${phrase}" but review failed keep gate (${keep.reason}). Independent review must return VERDICT: ship with substantive checks`+(digestMiss?" grounded in payload digest cite ids/paths":"")+" (or fix-first)."+(input2.sameModelReview?" Note: review model equals main \u2014 prefer a distinct review slot for independence.":""),matchedPhrase:phrase,pathTier:tier,reviewVerdict:"empty",line:digestMiss?`review-gate: blocked \xB7 ${tier} \xB7 digest_cite`:`review-gate: blocked \xB7 ${tier} \xB7 empty_ship`,nextStep:digestMiss?"Re-run review citing PAYLOAD DIGEST chunk ids / paths; VERDICT: ship|fix_first|rethink; then restate completion.":"Run review slot (distinct model if possible), return VERDICT: ship|fix_first|rethink with concrete findings, then restate completion."}}return null}return verdict==="none"?{reason:`Review hard gate (${tier}): completion phrase "${phrase}" with mutations but **no independent review ship**. On T1/T2, delivery requires review-slot VERDICT: ship before honest-done (sol-advisor pattern). Do not claim done until review returns ship (or mark not-applicable with evidence).`+(input2.sameModelReview?" Prefer a review model \u2260 main for independence.":""),matchedPhrase:phrase,pathTier:tier,reviewVerdict:"none",line:`review-gate: blocked \xB7 ${tier} \xB7 no_review`,nextStep:"Invoke independent review (review slot), address findings, obtain VERDICT: ship, then restate completion with evidence."}:verdict==="fix_first"||verdict==="rethink"?{reason:`Review hard gate (${tier}): completion phrase "${phrase}" but review returned **${verdict.replace("_","-")}**. Cannot honest-done until findings are fixed and review returns VERDICT: ship.`,matchedPhrase:phrase,pathTier:tier,reviewVerdict:verdict,line:`review-gate: blocked \xB7 ${tier} \xB7 ${verdict}`,nextStep:verdict==="rethink"?"Revisit approach per review, re-implement, re-review, then claim done only after VERDICT: ship.":"Fix review findings, re-run review for VERDICT: ship, then restate completion."}:{reason:`Review hard gate (${tier}): completion phrase "${phrase}" but review is empty/rubber-stamp. Require substantive independent review with VERDICT: ship.`,matchedPhrase:phrase,pathTier:tier,reviewVerdict:"empty",line:`review-gate: blocked \xB7 ${tier} \xB7 empty`,nextStep:"Re-run review with concrete path:line findings or explicit VERDICT: ship after checks."}}function isReviewHardGateDisabled(env5=process.env){let raw=env5.CLAVUE_REVIEW_HARD_GATE;if(raw===void 0||raw==="")return!1;let v2=String(raw).trim().toLowerCase();return v2==="0"||v2==="false"||v2==="off"||v2==="no"}function assistantTextFromMessage(m3){let content=m3.message?.content;if(typeof content=="string")return content;if(!Array.isArray(content))return"";let parts=[];for(let b3 of content)b3?.type==="text"&&typeof b3.text=="string"&&parts.push(b3.text);return parts.join(`
24
+ `);let stopped=!1;return{socketPath:socketPath3,stop:__name(async()=>{if(!stopped){stopped=!0,await new Promise(resolveClose=>{server2.close(()=>resolveClose())}).catch(()=>{});try{unlinkSync(socketPath3)}catch{}try{readGotoIpcPointer(configDir2)===socketPath3&&unlinkSync(pointer)}catch{}}},"stop")}}var STARTUP_OPEN_FILE,GOTO_IPC_POINTER_FILE,LAST_MUTATION_FILE,LAST_MUTATION_SENTINEL,init_cliGoto=__esm({"src/runtime/cliGoto.ts"(){init_envUtils();STARTUP_OPEN_FILE="startup-open.json",GOTO_IPC_POINTER_FILE="ipc",LAST_MUTATION_FILE="last-mutation.json",LAST_MUTATION_SENTINEL="@last";__name(isUnixSocket,"isUnixSocket");__name(defaultExists,"defaultExists");__name(isFilePath,"isFilePath");__name(parseGoto,"parseGoto");__name(takeGotoOptions,"takeGotoOptions");__name(formatGoto,"formatGoto");__name(formatGotoNotice,"formatGotoNotice");__name(formatGotoAtToken,"formatGotoAtToken");__name(startupOpenPath,"startupOpenPath");__name(gotoIpcPointerPath,"gotoIpcPointerPath");__name(asGotoTarget,"asGotoTarget");__name(parseStartupOpen,"parseStartupOpen");__name(lastMutationTarget,"lastMutationTarget");__name(isLastMutationTarget,"isLastMutationTarget");__name(lastMutationPath,"lastMutationPath");__name(writeLastMutation,"writeLastMutation");__name(readLastMutation,"readLastMutation");__name(parseGotoIpcRequest,"parseGotoIpcRequest");__name(parseGotoIpcLine,"parseGotoIpcLine");__name(formatWindowStatus,"formatWindowStatus");__name(writePrivateFile,"writePrivateFile");__name(writeStartupOpen,"writeStartupOpen");__name(consumeStartupOpen,"consumeStartupOpen");__name(readGotoIpcPointer,"readGotoIpcPointer");__name(resolveGotoIpcSocket,"resolveGotoIpcSocket");__name(forgetGotoIpcSocket,"forgetGotoIpcSocket");__name(sendGotoIpc,"sendGotoIpc");__name(sendStatusIpc,"sendStatusIpc");__name(startGotoIpcServer,"startGotoIpcServer")}});var branding_exports={};__export(branding_exports,{APP_BRAND_GLYPH:()=>APP_BRAND_GLYPH,APP_BRAND_LOCKUP:()=>APP_BRAND_LOCKUP,APP_BRAND_SUBTITLE:()=>APP_BRAND_SUBTITLE,APP_BRAND_TAGLINE_SHORT_EN:()=>APP_BRAND_TAGLINE_SHORT_EN,APP_BRAND_TAGLINE_SHORT_ZH:()=>APP_BRAND_TAGLINE_SHORT_ZH,APP_BRAND_TAGLINE_ZH:()=>APP_BRAND_TAGLINE_ZH,APP_NAME:()=>APP_NAME,APP_NAME_ZH:()=>APP_NAME_ZH,APP_VERSION:()=>APP_VERSION,APP_WELCOME_TITLE:()=>APP_WELCOME_TITLE,APP_WORDMARK:()=>APP_WORDMARK,CLI_COMMAND_NAME:()=>CLI_COMMAND_NAME,PRODUCT_CATEGORY:()=>PRODUCT_CATEGORY,PRODUCT_CATEGORY_ZH:()=>PRODUCT_CATEGORY_ZH});var APP_NAME,APP_NAME_ZH,APP_BRAND_GLYPH,CLI_COMMAND_NAME,PRODUCT_CATEGORY,PRODUCT_CATEGORY_ZH,APP_VERSION_FALLBACK,APP_VERSION,APP_WORDMARK,APP_BRAND_SUBTITLE,APP_BRAND_TAGLINE_ZH,APP_BRAND_TAGLINE_SHORT_ZH,APP_BRAND_TAGLINE_SHORT_EN,APP_BRAND_LOCKUP,APP_WELCOME_TITLE,init_branding=__esm({"src/constants/branding.ts"(){APP_NAME="Clavue",APP_NAME_ZH="\u514B\u62C9\u7EF4",APP_BRAND_GLYPH="\u9F8D",CLI_COMMAND_NAME="clavue",PRODUCT_CATEGORY="Clavue Mainline",PRODUCT_CATEGORY_ZH="Clavue \u4E3B\u7EBF",APP_VERSION_FALLBACK="11.3.13",APP_VERSION=typeof MACRO<"u"?"11.3.13":APP_VERSION_FALLBACK,APP_WORDMARK=`/${APP_NAME.toLowerCase()}`,APP_BRAND_SUBTITLE="AI coding CLI",APP_BRAND_TAGLINE_ZH="\u9F8D\u884C\u4EE3\u7801 \xB7 \u6267\u884C\u4F18\u5148\u7684 AI \u7F16\u7801\u63A7\u5236\u53F0",APP_BRAND_TAGLINE_SHORT_ZH="\u9F8D\u884C\u4EE3\u7801 \xB7 \u6267\u884C\u4F18\u5148",APP_BRAND_TAGLINE_SHORT_EN="Dragon code \xB7 execution-first",APP_BRAND_LOCKUP=`\u9F8D ${APP_NAME.toUpperCase()}`,APP_WELCOME_TITLE=APP_WORDMARK}});function arrayMap(array2,iteratee2){for(var index=-1,length=array2==null?0:array2.length,result2=Array(length);++index<length;)result2[index]=iteratee2(array2[index],index,array2);return result2}var arrayMap_default,init_arrayMap=__esm({"../../node_modules/lodash-es/_arrayMap.js"(){__name(arrayMap,"arrayMap");arrayMap_default=arrayMap}});function stackClear(){this.__data__=new ListCache_default,this.size=0}var stackClear_default,init_stackClear=__esm({"../../node_modules/lodash-es/_stackClear.js"(){init_ListCache();__name(stackClear,"stackClear");stackClear_default=stackClear}});function stackDelete(key){var data=this.__data__,result2=data.delete(key);return this.size=data.size,result2}var stackDelete_default,init_stackDelete=__esm({"../../node_modules/lodash-es/_stackDelete.js"(){__name(stackDelete,"stackDelete");stackDelete_default=stackDelete}});function stackGet(key){return this.__data__.get(key)}var stackGet_default,init_stackGet=__esm({"../../node_modules/lodash-es/_stackGet.js"(){__name(stackGet,"stackGet");stackGet_default=stackGet}});function stackHas(key){return this.__data__.has(key)}var stackHas_default,init_stackHas=__esm({"../../node_modules/lodash-es/_stackHas.js"(){__name(stackHas,"stackHas");stackHas_default=stackHas}});function stackSet(key,value){var data=this.__data__;if(data instanceof ListCache_default){var pairs=data.__data__;if(!Map_default||pairs.length<LARGE_ARRAY_SIZE-1)return pairs.push([key,value]),this.size=++data.size,this;data=this.__data__=new MapCache_default(pairs)}return data.set(key,value),this.size=data.size,this}var LARGE_ARRAY_SIZE,stackSet_default,init_stackSet=__esm({"../../node_modules/lodash-es/_stackSet.js"(){init_ListCache();init_Map();init_MapCache();LARGE_ARRAY_SIZE=200;__name(stackSet,"stackSet");stackSet_default=stackSet}});function Stack(entries){var data=this.__data__=new ListCache_default(entries);this.size=data.size}var Stack_default,init_Stack=__esm({"../../node_modules/lodash-es/_Stack.js"(){init_ListCache();init_stackClear();init_stackDelete();init_stackGet();init_stackHas();init_stackSet();__name(Stack,"Stack");Stack.prototype.clear=stackClear_default;Stack.prototype.delete=stackDelete_default;Stack.prototype.get=stackGet_default;Stack.prototype.has=stackHas_default;Stack.prototype.set=stackSet_default;Stack_default=Stack}});function setCacheAdd(value){return this.__data__.set(value,HASH_UNDEFINED3),this}var HASH_UNDEFINED3,setCacheAdd_default,init_setCacheAdd=__esm({"../../node_modules/lodash-es/_setCacheAdd.js"(){HASH_UNDEFINED3="__lodash_hash_undefined__";__name(setCacheAdd,"setCacheAdd");setCacheAdd_default=setCacheAdd}});function setCacheHas(value){return this.__data__.has(value)}var setCacheHas_default,init_setCacheHas=__esm({"../../node_modules/lodash-es/_setCacheHas.js"(){__name(setCacheHas,"setCacheHas");setCacheHas_default=setCacheHas}});function SetCache(values2){var index=-1,length=values2==null?0:values2.length;for(this.__data__=new MapCache_default;++index<length;)this.add(values2[index])}var SetCache_default,init_SetCache=__esm({"../../node_modules/lodash-es/_SetCache.js"(){init_MapCache();init_setCacheAdd();init_setCacheHas();__name(SetCache,"SetCache");SetCache.prototype.add=SetCache.prototype.push=setCacheAdd_default;SetCache.prototype.has=setCacheHas_default;SetCache_default=SetCache}});function arraySome(array2,predicate){for(var index=-1,length=array2==null?0:array2.length;++index<length;)if(predicate(array2[index],index,array2))return!0;return!1}var arraySome_default,init_arraySome=__esm({"../../node_modules/lodash-es/_arraySome.js"(){__name(arraySome,"arraySome");arraySome_default=arraySome}});function cacheHas(cache5,key){return cache5.has(key)}var cacheHas_default,init_cacheHas=__esm({"../../node_modules/lodash-es/_cacheHas.js"(){__name(cacheHas,"cacheHas");cacheHas_default=cacheHas}});function equalArrays(array2,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG,arrLength=array2.length,othLength=other.length;if(arrLength!=othLength&&!(isPartial&&othLength>arrLength))return!1;var arrStacked=stack.get(array2),othStacked=stack.get(other);if(arrStacked&&othStacked)return arrStacked==other&&othStacked==array2;var index=-1,result2=!0,seen=bitmask&COMPARE_UNORDERED_FLAG?new SetCache_default:void 0;for(stack.set(array2,other),stack.set(other,array2);++index<arrLength;){var arrValue=array2[index],othValue=other[index];if(customizer)var compared=isPartial?customizer(othValue,arrValue,index,other,array2,stack):customizer(arrValue,othValue,index,array2,other,stack);if(compared!==void 0){if(compared)continue;result2=!1;break}if(seen){if(!arraySome_default(other,function(othValue2,othIndex){if(!cacheHas_default(seen,othIndex)&&(arrValue===othValue2||equalFunc(arrValue,othValue2,bitmask,customizer,stack)))return seen.push(othIndex)})){result2=!1;break}}else if(!(arrValue===othValue||equalFunc(arrValue,othValue,bitmask,customizer,stack))){result2=!1;break}}return stack.delete(array2),stack.delete(other),result2}var COMPARE_PARTIAL_FLAG,COMPARE_UNORDERED_FLAG,equalArrays_default,init_equalArrays=__esm({"../../node_modules/lodash-es/_equalArrays.js"(){init_SetCache();init_arraySome();init_cacheHas();COMPARE_PARTIAL_FLAG=1,COMPARE_UNORDERED_FLAG=2;__name(equalArrays,"equalArrays");equalArrays_default=equalArrays}});var Uint8Array2,Uint8Array_default,init_Uint8Array=__esm({"../../node_modules/lodash-es/_Uint8Array.js"(){init_root();Uint8Array2=root_default.Uint8Array,Uint8Array_default=Uint8Array2}});function mapToArray(map3){var index=-1,result2=Array(map3.size);return map3.forEach(function(value,key){result2[++index]=[key,value]}),result2}var mapToArray_default,init_mapToArray=__esm({"../../node_modules/lodash-es/_mapToArray.js"(){__name(mapToArray,"mapToArray");mapToArray_default=mapToArray}});function setToArray(set3){var index=-1,result2=Array(set3.size);return set3.forEach(function(value){result2[++index]=value}),result2}var setToArray_default,init_setToArray=__esm({"../../node_modules/lodash-es/_setToArray.js"(){__name(setToArray,"setToArray");setToArray_default=setToArray}});function equalByTag(object3,other,tag2,bitmask,customizer,equalFunc,stack){switch(tag2){case dataViewTag:if(object3.byteLength!=other.byteLength||object3.byteOffset!=other.byteOffset)return!1;object3=object3.buffer,other=other.buffer;case arrayBufferTag:return!(object3.byteLength!=other.byteLength||!equalFunc(new Uint8Array_default(object3),new Uint8Array_default(other)));case boolTag:case dateTag:case numberTag:return eq_default(+object3,+other);case errorTag:return object3.name==other.name&&object3.message==other.message;case regexpTag:case stringTag:return object3==other+"";case mapTag:var convert=mapToArray_default;case setTag:var isPartial=bitmask&COMPARE_PARTIAL_FLAG2;if(convert||(convert=setToArray_default),object3.size!=other.size&&!isPartial)return!1;var stacked=stack.get(object3);if(stacked)return stacked==other;bitmask|=COMPARE_UNORDERED_FLAG2,stack.set(object3,other);var result2=equalArrays_default(convert(object3),convert(other),bitmask,customizer,equalFunc,stack);return stack.delete(object3),result2;case symbolTag:if(symbolValueOf)return symbolValueOf.call(object3)==symbolValueOf.call(other)}return!1}var COMPARE_PARTIAL_FLAG2,COMPARE_UNORDERED_FLAG2,boolTag,dateTag,errorTag,mapTag,numberTag,regexpTag,setTag,stringTag,symbolTag,arrayBufferTag,dataViewTag,symbolProto,symbolValueOf,equalByTag_default,init_equalByTag=__esm({"../../node_modules/lodash-es/_equalByTag.js"(){init_Symbol();init_Uint8Array();init_eq();init_equalArrays();init_mapToArray();init_setToArray();COMPARE_PARTIAL_FLAG2=1,COMPARE_UNORDERED_FLAG2=2,boolTag="[object Boolean]",dateTag="[object Date]",errorTag="[object Error]",mapTag="[object Map]",numberTag="[object Number]",regexpTag="[object RegExp]",setTag="[object Set]",stringTag="[object String]",symbolTag="[object Symbol]",arrayBufferTag="[object ArrayBuffer]",dataViewTag="[object DataView]",symbolProto=Symbol_default?Symbol_default.prototype:void 0,symbolValueOf=symbolProto?symbolProto.valueOf:void 0;__name(equalByTag,"equalByTag");equalByTag_default=equalByTag}});function arrayPush(array2,values2){for(var index=-1,length=values2.length,offset=array2.length;++index<length;)array2[offset+index]=values2[index];return array2}var arrayPush_default,init_arrayPush=__esm({"../../node_modules/lodash-es/_arrayPush.js"(){__name(arrayPush,"arrayPush");arrayPush_default=arrayPush}});var isArray,isArray_default,init_isArray=__esm({"../../node_modules/lodash-es/isArray.js"(){isArray=Array.isArray,isArray_default=isArray}});function baseGetAllKeys(object3,keysFunc,symbolsFunc){var result2=keysFunc(object3);return isArray_default(object3)?result2:arrayPush_default(result2,symbolsFunc(object3))}var baseGetAllKeys_default,init_baseGetAllKeys=__esm({"../../node_modules/lodash-es/_baseGetAllKeys.js"(){init_arrayPush();init_isArray();__name(baseGetAllKeys,"baseGetAllKeys");baseGetAllKeys_default=baseGetAllKeys}});function arrayFilter(array2,predicate){for(var index=-1,length=array2==null?0:array2.length,resIndex=0,result2=[];++index<length;){var value=array2[index];predicate(value,index,array2)&&(result2[resIndex++]=value)}return result2}var arrayFilter_default,init_arrayFilter=__esm({"../../node_modules/lodash-es/_arrayFilter.js"(){__name(arrayFilter,"arrayFilter");arrayFilter_default=arrayFilter}});function stubArray(){return[]}var stubArray_default,init_stubArray=__esm({"../../node_modules/lodash-es/stubArray.js"(){__name(stubArray,"stubArray");stubArray_default=stubArray}});var objectProto6,propertyIsEnumerable,nativeGetSymbols,getSymbols,getSymbols_default,init_getSymbols=__esm({"../../node_modules/lodash-es/_getSymbols.js"(){init_arrayFilter();init_stubArray();objectProto6=Object.prototype,propertyIsEnumerable=objectProto6.propertyIsEnumerable,nativeGetSymbols=Object.getOwnPropertySymbols,getSymbols=nativeGetSymbols?function(object3){return object3==null?[]:(object3=Object(object3),arrayFilter_default(nativeGetSymbols(object3),function(symbol2){return propertyIsEnumerable.call(object3,symbol2)}))}:stubArray_default,getSymbols_default=getSymbols}});function baseTimes(n4,iteratee2){for(var index=-1,result2=Array(n4);++index<n4;)result2[index]=iteratee2(index);return result2}var baseTimes_default,init_baseTimes=__esm({"../../node_modules/lodash-es/_baseTimes.js"(){__name(baseTimes,"baseTimes");baseTimes_default=baseTimes}});function isObjectLike(value){return value!=null&&typeof value=="object"}var isObjectLike_default,init_isObjectLike=__esm({"../../node_modules/lodash-es/isObjectLike.js"(){__name(isObjectLike,"isObjectLike");isObjectLike_default=isObjectLike}});function baseIsArguments(value){return isObjectLike_default(value)&&baseGetTag_default(value)==argsTag}var argsTag,baseIsArguments_default,init_baseIsArguments=__esm({"../../node_modules/lodash-es/_baseIsArguments.js"(){init_baseGetTag();init_isObjectLike();argsTag="[object Arguments]";__name(baseIsArguments,"baseIsArguments");baseIsArguments_default=baseIsArguments}});var objectProto7,hasOwnProperty5,propertyIsEnumerable2,isArguments,isArguments_default,init_isArguments=__esm({"../../node_modules/lodash-es/isArguments.js"(){init_baseIsArguments();init_isObjectLike();objectProto7=Object.prototype,hasOwnProperty5=objectProto7.hasOwnProperty,propertyIsEnumerable2=objectProto7.propertyIsEnumerable,isArguments=baseIsArguments_default((function(){return arguments})())?baseIsArguments_default:function(value){return isObjectLike_default(value)&&hasOwnProperty5.call(value,"callee")&&!propertyIsEnumerable2.call(value,"callee")},isArguments_default=isArguments}});function stubFalse(){return!1}var stubFalse_default,init_stubFalse=__esm({"../../node_modules/lodash-es/stubFalse.js"(){__name(stubFalse,"stubFalse");stubFalse_default=stubFalse}});var freeExports,freeModule,moduleExports,Buffer2,nativeIsBuffer,isBuffer,isBuffer_default,init_isBuffer=__esm({"../../node_modules/lodash-es/isBuffer.js"(){init_root();init_stubFalse();freeExports=typeof exports=="object"&&exports&&!exports.nodeType&&exports,freeModule=freeExports&&typeof module=="object"&&module&&!module.nodeType&&module,moduleExports=freeModule&&freeModule.exports===freeExports,Buffer2=moduleExports?root_default.Buffer:void 0,nativeIsBuffer=Buffer2?Buffer2.isBuffer:void 0,isBuffer=nativeIsBuffer||stubFalse_default,isBuffer_default=isBuffer}});function isIndex(value,length){var type=typeof value;return length=length??MAX_SAFE_INTEGER,!!length&&(type=="number"||type!="symbol"&&reIsUint.test(value))&&value>-1&&value%1==0&&value<length}var MAX_SAFE_INTEGER,reIsUint,isIndex_default,init_isIndex=__esm({"../../node_modules/lodash-es/_isIndex.js"(){MAX_SAFE_INTEGER=9007199254740991,reIsUint=/^(?:0|[1-9]\d*)$/;__name(isIndex,"isIndex");isIndex_default=isIndex}});function isLength(value){return typeof value=="number"&&value>-1&&value%1==0&&value<=MAX_SAFE_INTEGER2}var MAX_SAFE_INTEGER2,isLength_default,init_isLength=__esm({"../../node_modules/lodash-es/isLength.js"(){MAX_SAFE_INTEGER2=9007199254740991;__name(isLength,"isLength");isLength_default=isLength}});function baseIsTypedArray(value){return isObjectLike_default(value)&&isLength_default(value.length)&&!!typedArrayTags[baseGetTag_default(value)]}var argsTag2,arrayTag,boolTag2,dateTag2,errorTag2,funcTag2,mapTag2,numberTag2,objectTag,regexpTag2,setTag2,stringTag2,weakMapTag,arrayBufferTag2,dataViewTag2,float32Tag,float64Tag,int8Tag,int16Tag,int32Tag,uint8Tag,uint8ClampedTag,uint16Tag,uint32Tag,typedArrayTags,baseIsTypedArray_default,init_baseIsTypedArray=__esm({"../../node_modules/lodash-es/_baseIsTypedArray.js"(){init_baseGetTag();init_isLength();init_isObjectLike();argsTag2="[object Arguments]",arrayTag="[object Array]",boolTag2="[object Boolean]",dateTag2="[object Date]",errorTag2="[object Error]",funcTag2="[object Function]",mapTag2="[object Map]",numberTag2="[object Number]",objectTag="[object Object]",regexpTag2="[object RegExp]",setTag2="[object Set]",stringTag2="[object String]",weakMapTag="[object WeakMap]",arrayBufferTag2="[object ArrayBuffer]",dataViewTag2="[object DataView]",float32Tag="[object Float32Array]",float64Tag="[object Float64Array]",int8Tag="[object Int8Array]",int16Tag="[object Int16Array]",int32Tag="[object Int32Array]",uint8Tag="[object Uint8Array]",uint8ClampedTag="[object Uint8ClampedArray]",uint16Tag="[object Uint16Array]",uint32Tag="[object Uint32Array]",typedArrayTags={};typedArrayTags[float32Tag]=typedArrayTags[float64Tag]=typedArrayTags[int8Tag]=typedArrayTags[int16Tag]=typedArrayTags[int32Tag]=typedArrayTags[uint8Tag]=typedArrayTags[uint8ClampedTag]=typedArrayTags[uint16Tag]=typedArrayTags[uint32Tag]=!0;typedArrayTags[argsTag2]=typedArrayTags[arrayTag]=typedArrayTags[arrayBufferTag2]=typedArrayTags[boolTag2]=typedArrayTags[dataViewTag2]=typedArrayTags[dateTag2]=typedArrayTags[errorTag2]=typedArrayTags[funcTag2]=typedArrayTags[mapTag2]=typedArrayTags[numberTag2]=typedArrayTags[objectTag]=typedArrayTags[regexpTag2]=typedArrayTags[setTag2]=typedArrayTags[stringTag2]=typedArrayTags[weakMapTag]=!1;__name(baseIsTypedArray,"baseIsTypedArray");baseIsTypedArray_default=baseIsTypedArray}});function baseUnary(func){return function(value){return func(value)}}var baseUnary_default,init_baseUnary=__esm({"../../node_modules/lodash-es/_baseUnary.js"(){__name(baseUnary,"baseUnary");baseUnary_default=baseUnary}});var freeExports2,freeModule2,moduleExports2,freeProcess,nodeUtil,nodeUtil_default,init_nodeUtil=__esm({"../../node_modules/lodash-es/_nodeUtil.js"(){init_freeGlobal();freeExports2=typeof exports=="object"&&exports&&!exports.nodeType&&exports,freeModule2=freeExports2&&typeof module=="object"&&module&&!module.nodeType&&module,moduleExports2=freeModule2&&freeModule2.exports===freeExports2,freeProcess=moduleExports2&&freeGlobal_default.process,nodeUtil=(function(){try{var types3=freeModule2&&freeModule2.require&&freeModule2.require("util").types;return types3||freeProcess&&freeProcess.binding&&freeProcess.binding("util")}catch{}})(),nodeUtil_default=nodeUtil}});var nodeIsTypedArray,isTypedArray,isTypedArray_default,init_isTypedArray=__esm({"../../node_modules/lodash-es/isTypedArray.js"(){init_baseIsTypedArray();init_baseUnary();init_nodeUtil();nodeIsTypedArray=nodeUtil_default&&nodeUtil_default.isTypedArray,isTypedArray=nodeIsTypedArray?baseUnary_default(nodeIsTypedArray):baseIsTypedArray_default,isTypedArray_default=isTypedArray}});function arrayLikeKeys(value,inherited){var isArr=isArray_default(value),isArg=!isArr&&isArguments_default(value),isBuff=!isArr&&!isArg&&isBuffer_default(value),isType=!isArr&&!isArg&&!isBuff&&isTypedArray_default(value),skipIndexes=isArr||isArg||isBuff||isType,result2=skipIndexes?baseTimes_default(value.length,String):[],length=result2.length;for(var key in value)(inherited||hasOwnProperty6.call(value,key))&&!(skipIndexes&&(key=="length"||isBuff&&(key=="offset"||key=="parent")||isType&&(key=="buffer"||key=="byteLength"||key=="byteOffset")||isIndex_default(key,length)))&&result2.push(key);return result2}var objectProto8,hasOwnProperty6,arrayLikeKeys_default,init_arrayLikeKeys=__esm({"../../node_modules/lodash-es/_arrayLikeKeys.js"(){init_baseTimes();init_isArguments();init_isArray();init_isBuffer();init_isIndex();init_isTypedArray();objectProto8=Object.prototype,hasOwnProperty6=objectProto8.hasOwnProperty;__name(arrayLikeKeys,"arrayLikeKeys");arrayLikeKeys_default=arrayLikeKeys}});function isPrototype(value){var Ctor=value&&value.constructor,proto2=typeof Ctor=="function"&&Ctor.prototype||objectProto9;return value===proto2}var objectProto9,isPrototype_default,init_isPrototype=__esm({"../../node_modules/lodash-es/_isPrototype.js"(){objectProto9=Object.prototype;__name(isPrototype,"isPrototype");isPrototype_default=isPrototype}});function overArg(func,transform3){return function(arg){return func(transform3(arg))}}var overArg_default,init_overArg=__esm({"../../node_modules/lodash-es/_overArg.js"(){__name(overArg,"overArg");overArg_default=overArg}});var nativeKeys,nativeKeys_default,init_nativeKeys=__esm({"../../node_modules/lodash-es/_nativeKeys.js"(){init_overArg();nativeKeys=overArg_default(Object.keys,Object),nativeKeys_default=nativeKeys}});function baseKeys(object3){if(!isPrototype_default(object3))return nativeKeys_default(object3);var result2=[];for(var key in Object(object3))hasOwnProperty7.call(object3,key)&&key!="constructor"&&result2.push(key);return result2}var objectProto10,hasOwnProperty7,baseKeys_default,init_baseKeys=__esm({"../../node_modules/lodash-es/_baseKeys.js"(){init_isPrototype();init_nativeKeys();objectProto10=Object.prototype,hasOwnProperty7=objectProto10.hasOwnProperty;__name(baseKeys,"baseKeys");baseKeys_default=baseKeys}});function isArrayLike(value){return value!=null&&isLength_default(value.length)&&!isFunction_default(value)}var isArrayLike_default,init_isArrayLike=__esm({"../../node_modules/lodash-es/isArrayLike.js"(){init_isFunction();init_isLength();__name(isArrayLike,"isArrayLike");isArrayLike_default=isArrayLike}});function keys(object3){return isArrayLike_default(object3)?arrayLikeKeys_default(object3):baseKeys_default(object3)}var keys_default,init_keys=__esm({"../../node_modules/lodash-es/keys.js"(){init_arrayLikeKeys();init_baseKeys();init_isArrayLike();__name(keys,"keys");keys_default=keys}});function getAllKeys(object3){return baseGetAllKeys_default(object3,keys_default,getSymbols_default)}var getAllKeys_default,init_getAllKeys=__esm({"../../node_modules/lodash-es/_getAllKeys.js"(){init_baseGetAllKeys();init_getSymbols();init_keys();__name(getAllKeys,"getAllKeys");getAllKeys_default=getAllKeys}});function equalObjects(object3,other,bitmask,customizer,equalFunc,stack){var isPartial=bitmask&COMPARE_PARTIAL_FLAG3,objProps=getAllKeys_default(object3),objLength=objProps.length,othProps=getAllKeys_default(other),othLength=othProps.length;if(objLength!=othLength&&!isPartial)return!1;for(var index=objLength;index--;){var key=objProps[index];if(!(isPartial?key in other:hasOwnProperty8.call(other,key)))return!1}var objStacked=stack.get(object3),othStacked=stack.get(other);if(objStacked&&othStacked)return objStacked==other&&othStacked==object3;var result2=!0;stack.set(object3,other),stack.set(other,object3);for(var skipCtor=isPartial;++index<objLength;){key=objProps[index];var objValue=object3[key],othValue=other[key];if(customizer)var compared=isPartial?customizer(othValue,objValue,key,other,object3,stack):customizer(objValue,othValue,key,object3,other,stack);if(!(compared===void 0?objValue===othValue||equalFunc(objValue,othValue,bitmask,customizer,stack):compared)){result2=!1;break}skipCtor||(skipCtor=key=="constructor")}if(result2&&!skipCtor){var objCtor=object3.constructor,othCtor=other.constructor;objCtor!=othCtor&&"constructor"in object3&&"constructor"in other&&!(typeof objCtor=="function"&&objCtor instanceof objCtor&&typeof othCtor=="function"&&othCtor instanceof othCtor)&&(result2=!1)}return stack.delete(object3),stack.delete(other),result2}var COMPARE_PARTIAL_FLAG3,objectProto11,hasOwnProperty8,equalObjects_default,init_equalObjects=__esm({"../../node_modules/lodash-es/_equalObjects.js"(){init_getAllKeys();COMPARE_PARTIAL_FLAG3=1,objectProto11=Object.prototype,hasOwnProperty8=objectProto11.hasOwnProperty;__name(equalObjects,"equalObjects");equalObjects_default=equalObjects}});var DataView2,DataView_default,init_DataView=__esm({"../../node_modules/lodash-es/_DataView.js"(){init_getNative();init_root();DataView2=getNative_default(root_default,"DataView"),DataView_default=DataView2}});var Promise2,Promise_default,init_Promise=__esm({"../../node_modules/lodash-es/_Promise.js"(){init_getNative();init_root();Promise2=getNative_default(root_default,"Promise"),Promise_default=Promise2}});var Set2,Set_default,init_Set=__esm({"../../node_modules/lodash-es/_Set.js"(){init_getNative();init_root();Set2=getNative_default(root_default,"Set"),Set_default=Set2}});var WeakMap2,WeakMap_default,init_WeakMap=__esm({"../../node_modules/lodash-es/_WeakMap.js"(){init_getNative();init_root();WeakMap2=getNative_default(root_default,"WeakMap"),WeakMap_default=WeakMap2}});var mapTag3,objectTag2,promiseTag,setTag3,weakMapTag2,dataViewTag3,dataViewCtorString,mapCtorString,promiseCtorString,setCtorString,weakMapCtorString,getTag,getTag_default,init_getTag=__esm({"../../node_modules/lodash-es/_getTag.js"(){init_DataView();init_Map();init_Promise();init_Set();init_WeakMap();init_baseGetTag();init_toSource();mapTag3="[object Map]",objectTag2="[object Object]",promiseTag="[object Promise]",setTag3="[object Set]",weakMapTag2="[object WeakMap]",dataViewTag3="[object DataView]",dataViewCtorString=toSource_default(DataView_default),mapCtorString=toSource_default(Map_default),promiseCtorString=toSource_default(Promise_default),setCtorString=toSource_default(Set_default),weakMapCtorString=toSource_default(WeakMap_default),getTag=baseGetTag_default;(DataView_default&&getTag(new DataView_default(new ArrayBuffer(1)))!=dataViewTag3||Map_default&&getTag(new Map_default)!=mapTag3||Promise_default&&getTag(Promise_default.resolve())!=promiseTag||Set_default&&getTag(new Set_default)!=setTag3||WeakMap_default&&getTag(new WeakMap_default)!=weakMapTag2)&&(getTag=__name(function(value){var result2=baseGetTag_default(value),Ctor=result2==objectTag2?value.constructor:void 0,ctorString=Ctor?toSource_default(Ctor):"";if(ctorString)switch(ctorString){case dataViewCtorString:return dataViewTag3;case mapCtorString:return mapTag3;case promiseCtorString:return promiseTag;case setCtorString:return setTag3;case weakMapCtorString:return weakMapTag2}return result2},"getTag"));getTag_default=getTag}});function baseIsEqualDeep(object3,other,bitmask,customizer,equalFunc,stack){var objIsArr=isArray_default(object3),othIsArr=isArray_default(other),objTag=objIsArr?arrayTag2:getTag_default(object3),othTag=othIsArr?arrayTag2:getTag_default(other);objTag=objTag==argsTag3?objectTag3:objTag,othTag=othTag==argsTag3?objectTag3:othTag;var objIsObj=objTag==objectTag3,othIsObj=othTag==objectTag3,isSameTag=objTag==othTag;if(isSameTag&&isBuffer_default(object3)){if(!isBuffer_default(other))return!1;objIsArr=!0,objIsObj=!1}if(isSameTag&&!objIsObj)return stack||(stack=new Stack_default),objIsArr||isTypedArray_default(object3)?equalArrays_default(object3,other,bitmask,customizer,equalFunc,stack):equalByTag_default(object3,other,objTag,bitmask,customizer,equalFunc,stack);if(!(bitmask&COMPARE_PARTIAL_FLAG4)){var objIsWrapped=objIsObj&&hasOwnProperty9.call(object3,"__wrapped__"),othIsWrapped=othIsObj&&hasOwnProperty9.call(other,"__wrapped__");if(objIsWrapped||othIsWrapped){var objUnwrapped=objIsWrapped?object3.value():object3,othUnwrapped=othIsWrapped?other.value():other;return stack||(stack=new Stack_default),equalFunc(objUnwrapped,othUnwrapped,bitmask,customizer,stack)}}return isSameTag?(stack||(stack=new Stack_default),equalObjects_default(object3,other,bitmask,customizer,equalFunc,stack)):!1}var COMPARE_PARTIAL_FLAG4,argsTag3,arrayTag2,objectTag3,objectProto12,hasOwnProperty9,baseIsEqualDeep_default,init_baseIsEqualDeep=__esm({"../../node_modules/lodash-es/_baseIsEqualDeep.js"(){init_Stack();init_equalArrays();init_equalByTag();init_equalObjects();init_getTag();init_isArray();init_isBuffer();init_isTypedArray();COMPARE_PARTIAL_FLAG4=1,argsTag3="[object Arguments]",arrayTag2="[object Array]",objectTag3="[object Object]",objectProto12=Object.prototype,hasOwnProperty9=objectProto12.hasOwnProperty;__name(baseIsEqualDeep,"baseIsEqualDeep");baseIsEqualDeep_default=baseIsEqualDeep}});function baseIsEqual(value,other,bitmask,customizer,stack){return value===other?!0:value==null||other==null||!isObjectLike_default(value)&&!isObjectLike_default(other)?value!==value&&other!==other:baseIsEqualDeep_default(value,other,bitmask,customizer,baseIsEqual,stack)}var baseIsEqual_default,init_baseIsEqual=__esm({"../../node_modules/lodash-es/_baseIsEqual.js"(){init_baseIsEqualDeep();init_isObjectLike();__name(baseIsEqual,"baseIsEqual");baseIsEqual_default=baseIsEqual}});function baseIsMatch(object3,source,matchData,customizer){var index=matchData.length,length=index,noCustomizer=!customizer;if(object3==null)return!length;for(object3=Object(object3);index--;){var data=matchData[index];if(noCustomizer&&data[2]?data[1]!==object3[data[0]]:!(data[0]in object3))return!1}for(;++index<length;){data=matchData[index];var key=data[0],objValue=object3[key],srcValue=data[1];if(noCustomizer&&data[2]){if(objValue===void 0&&!(key in object3))return!1}else{var stack=new Stack_default;if(customizer)var result2=customizer(objValue,srcValue,key,object3,source,stack);if(!(result2===void 0?baseIsEqual_default(srcValue,objValue,COMPARE_PARTIAL_FLAG5|COMPARE_UNORDERED_FLAG3,customizer,stack):result2))return!1}}return!0}var COMPARE_PARTIAL_FLAG5,COMPARE_UNORDERED_FLAG3,baseIsMatch_default,init_baseIsMatch=__esm({"../../node_modules/lodash-es/_baseIsMatch.js"(){init_Stack();init_baseIsEqual();COMPARE_PARTIAL_FLAG5=1,COMPARE_UNORDERED_FLAG3=2;__name(baseIsMatch,"baseIsMatch");baseIsMatch_default=baseIsMatch}});function isStrictComparable(value){return value===value&&!isObject_default(value)}var isStrictComparable_default,init_isStrictComparable=__esm({"../../node_modules/lodash-es/_isStrictComparable.js"(){init_isObject();__name(isStrictComparable,"isStrictComparable");isStrictComparable_default=isStrictComparable}});function getMatchData(object3){for(var result2=keys_default(object3),length=result2.length;length--;){var key=result2[length],value=object3[key];result2[length]=[key,value,isStrictComparable_default(value)]}return result2}var getMatchData_default,init_getMatchData=__esm({"../../node_modules/lodash-es/_getMatchData.js"(){init_isStrictComparable();init_keys();__name(getMatchData,"getMatchData");getMatchData_default=getMatchData}});function matchesStrictComparable(key,srcValue){return function(object3){return object3==null?!1:object3[key]===srcValue&&(srcValue!==void 0||key in Object(object3))}}var matchesStrictComparable_default,init_matchesStrictComparable=__esm({"../../node_modules/lodash-es/_matchesStrictComparable.js"(){__name(matchesStrictComparable,"matchesStrictComparable");matchesStrictComparable_default=matchesStrictComparable}});function baseMatches(source){var matchData=getMatchData_default(source);return matchData.length==1&&matchData[0][2]?matchesStrictComparable_default(matchData[0][0],matchData[0][1]):function(object3){return object3===source||baseIsMatch_default(object3,source,matchData)}}var baseMatches_default,init_baseMatches=__esm({"../../node_modules/lodash-es/_baseMatches.js"(){init_baseIsMatch();init_getMatchData();init_matchesStrictComparable();__name(baseMatches,"baseMatches");baseMatches_default=baseMatches}});function isSymbol(value){return typeof value=="symbol"||isObjectLike_default(value)&&baseGetTag_default(value)==symbolTag2}var symbolTag2,isSymbol_default,init_isSymbol=__esm({"../../node_modules/lodash-es/isSymbol.js"(){init_baseGetTag();init_isObjectLike();symbolTag2="[object Symbol]";__name(isSymbol,"isSymbol");isSymbol_default=isSymbol}});function isKey(value,object3){if(isArray_default(value))return!1;var type=typeof value;return type=="number"||type=="symbol"||type=="boolean"||value==null||isSymbol_default(value)?!0:reIsPlainProp.test(value)||!reIsDeepProp.test(value)||object3!=null&&value in Object(object3)}var reIsDeepProp,reIsPlainProp,isKey_default,init_isKey=__esm({"../../node_modules/lodash-es/_isKey.js"(){init_isArray();init_isSymbol();reIsDeepProp=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,reIsPlainProp=/^\w*$/;__name(isKey,"isKey");isKey_default=isKey}});function memoizeCapped(func){var result2=memoize_default(func,function(key){return cache5.size===MAX_MEMOIZE_SIZE&&cache5.clear(),key}),cache5=result2.cache;return result2}var MAX_MEMOIZE_SIZE,memoizeCapped_default,init_memoizeCapped=__esm({"../../node_modules/lodash-es/_memoizeCapped.js"(){init_memoize();MAX_MEMOIZE_SIZE=500;__name(memoizeCapped,"memoizeCapped");memoizeCapped_default=memoizeCapped}});var rePropName,reEscapeChar,stringToPath,stringToPath_default,init_stringToPath=__esm({"../../node_modules/lodash-es/_stringToPath.js"(){init_memoizeCapped();rePropName=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=memoizeCapped_default(function(string4){var result2=[];return string4.charCodeAt(0)===46&&result2.push(""),string4.replace(rePropName,function(match,number4,quote2,subString){result2.push(quote2?subString.replace(reEscapeChar,"$1"):number4||match)}),result2}),stringToPath_default=stringToPath}});function baseToString(value){if(typeof value=="string")return value;if(isArray_default(value))return arrayMap_default(value,baseToString)+"";if(isSymbol_default(value))return symbolToString?symbolToString.call(value):"";var result2=value+"";return result2=="0"&&1/value==-INFINITY?"-0":result2}var INFINITY,symbolProto2,symbolToString,baseToString_default,init_baseToString=__esm({"../../node_modules/lodash-es/_baseToString.js"(){init_Symbol();init_arrayMap();init_isArray();init_isSymbol();INFINITY=1/0,symbolProto2=Symbol_default?Symbol_default.prototype:void 0,symbolToString=symbolProto2?symbolProto2.toString:void 0;__name(baseToString,"baseToString");baseToString_default=baseToString}});function toString(value){return value==null?"":baseToString_default(value)}var toString_default,init_toString=__esm({"../../node_modules/lodash-es/toString.js"(){init_baseToString();__name(toString,"toString");toString_default=toString}});function castPath(value,object3){return isArray_default(value)?value:isKey_default(value,object3)?[value]:stringToPath_default(toString_default(value))}var castPath_default,init_castPath=__esm({"../../node_modules/lodash-es/_castPath.js"(){init_isArray();init_isKey();init_stringToPath();init_toString();__name(castPath,"castPath");castPath_default=castPath}});function toKey(value){if(typeof value=="string"||isSymbol_default(value))return value;var result2=value+"";return result2=="0"&&1/value==-INFINITY2?"-0":result2}var INFINITY2,toKey_default,init_toKey=__esm({"../../node_modules/lodash-es/_toKey.js"(){init_isSymbol();INFINITY2=1/0;__name(toKey,"toKey");toKey_default=toKey}});function baseGet(object3,path36){path36=castPath_default(path36,object3);for(var index=0,length=path36.length;object3!=null&&index<length;)object3=object3[toKey_default(path36[index++])];return index&&index==length?object3:void 0}var baseGet_default,init_baseGet=__esm({"../../node_modules/lodash-es/_baseGet.js"(){init_castPath();init_toKey();__name(baseGet,"baseGet");baseGet_default=baseGet}});function get(object3,path36,defaultValue){var result2=object3==null?void 0:baseGet_default(object3,path36);return result2===void 0?defaultValue:result2}var get_default,init_get=__esm({"../../node_modules/lodash-es/get.js"(){init_baseGet();__name(get,"get");get_default=get}});function baseHasIn(object3,key){return object3!=null&&key in Object(object3)}var baseHasIn_default,init_baseHasIn=__esm({"../../node_modules/lodash-es/_baseHasIn.js"(){__name(baseHasIn,"baseHasIn");baseHasIn_default=baseHasIn}});function hasPath(object3,path36,hasFunc){path36=castPath_default(path36,object3);for(var index=-1,length=path36.length,result2=!1;++index<length;){var key=toKey_default(path36[index]);if(!(result2=object3!=null&&hasFunc(object3,key)))break;object3=object3[key]}return result2||++index!=length?result2:(length=object3==null?0:object3.length,!!length&&isLength_default(length)&&isIndex_default(key,length)&&(isArray_default(object3)||isArguments_default(object3)))}var hasPath_default,init_hasPath=__esm({"../../node_modules/lodash-es/_hasPath.js"(){init_castPath();init_isArguments();init_isArray();init_isIndex();init_isLength();init_toKey();__name(hasPath,"hasPath");hasPath_default=hasPath}});function hasIn(object3,path36){return object3!=null&&hasPath_default(object3,path36,baseHasIn_default)}var hasIn_default,init_hasIn=__esm({"../../node_modules/lodash-es/hasIn.js"(){init_baseHasIn();init_hasPath();__name(hasIn,"hasIn");hasIn_default=hasIn}});function baseMatchesProperty(path36,srcValue){return isKey_default(path36)&&isStrictComparable_default(srcValue)?matchesStrictComparable_default(toKey_default(path36),srcValue):function(object3){var objValue=get_default(object3,path36);return objValue===void 0&&objValue===srcValue?hasIn_default(object3,path36):baseIsEqual_default(srcValue,objValue,COMPARE_PARTIAL_FLAG6|COMPARE_UNORDERED_FLAG4)}}var COMPARE_PARTIAL_FLAG6,COMPARE_UNORDERED_FLAG4,baseMatchesProperty_default,init_baseMatchesProperty=__esm({"../../node_modules/lodash-es/_baseMatchesProperty.js"(){init_baseIsEqual();init_get();init_hasIn();init_isKey();init_isStrictComparable();init_matchesStrictComparable();init_toKey();COMPARE_PARTIAL_FLAG6=1,COMPARE_UNORDERED_FLAG4=2;__name(baseMatchesProperty,"baseMatchesProperty");baseMatchesProperty_default=baseMatchesProperty}});function identity(value){return value}var identity_default,init_identity=__esm({"../../node_modules/lodash-es/identity.js"(){__name(identity,"identity");identity_default=identity}});function baseProperty(key){return function(object3){return object3?.[key]}}var baseProperty_default,init_baseProperty=__esm({"../../node_modules/lodash-es/_baseProperty.js"(){__name(baseProperty,"baseProperty");baseProperty_default=baseProperty}});function basePropertyDeep(path36){return function(object3){return baseGet_default(object3,path36)}}var basePropertyDeep_default,init_basePropertyDeep=__esm({"../../node_modules/lodash-es/_basePropertyDeep.js"(){init_baseGet();__name(basePropertyDeep,"basePropertyDeep");basePropertyDeep_default=basePropertyDeep}});function property(path36){return isKey_default(path36)?baseProperty_default(toKey_default(path36)):basePropertyDeep_default(path36)}var property_default,init_property=__esm({"../../node_modules/lodash-es/property.js"(){init_baseProperty();init_basePropertyDeep();init_isKey();init_toKey();__name(property,"property");property_default=property}});function baseIteratee(value){return typeof value=="function"?value:value==null?identity_default:typeof value=="object"?isArray_default(value)?baseMatchesProperty_default(value[0],value[1]):baseMatches_default(value):property_default(value)}var baseIteratee_default,init_baseIteratee=__esm({"../../node_modules/lodash-es/_baseIteratee.js"(){init_baseMatches();init_baseMatchesProperty();init_identity();init_isArray();init_property();__name(baseIteratee,"baseIteratee");baseIteratee_default=baseIteratee}});var defineProperty,defineProperty_default,init_defineProperty=__esm({"../../node_modules/lodash-es/_defineProperty.js"(){init_getNative();defineProperty=(function(){try{var func=getNative_default(Object,"defineProperty");return func({},"",{}),func}catch{}})(),defineProperty_default=defineProperty}});function baseAssignValue(object3,key,value){key=="__proto__"&&defineProperty_default?defineProperty_default(object3,key,{configurable:!0,enumerable:!0,value,writable:!0}):object3[key]=value}var baseAssignValue_default,init_baseAssignValue=__esm({"../../node_modules/lodash-es/_baseAssignValue.js"(){init_defineProperty();__name(baseAssignValue,"baseAssignValue");baseAssignValue_default=baseAssignValue}});function assignValue(object3,key,value){var objValue=object3[key];(!(hasOwnProperty10.call(object3,key)&&eq_default(objValue,value))||value===void 0&&!(key in object3))&&baseAssignValue_default(object3,key,value)}var objectProto13,hasOwnProperty10,assignValue_default,init_assignValue=__esm({"../../node_modules/lodash-es/_assignValue.js"(){init_baseAssignValue();init_eq();objectProto13=Object.prototype,hasOwnProperty10=objectProto13.hasOwnProperty;__name(assignValue,"assignValue");assignValue_default=assignValue}});function baseSet(object3,path36,value,customizer){if(!isObject_default(object3))return object3;path36=castPath_default(path36,object3);for(var index=-1,length=path36.length,lastIndex=length-1,nested=object3;nested!=null&&++index<length;){var key=toKey_default(path36[index]),newValue=value;if(key==="__proto__"||key==="constructor"||key==="prototype")return object3;if(index!=lastIndex){var objValue=nested[key];newValue=customizer?customizer(objValue,key,nested):void 0,newValue===void 0&&(newValue=isObject_default(objValue)?objValue:isIndex_default(path36[index+1])?[]:{})}assignValue_default(nested,key,newValue),nested=nested[key]}return object3}var baseSet_default,init_baseSet=__esm({"../../node_modules/lodash-es/_baseSet.js"(){init_assignValue();init_castPath();init_isIndex();init_isObject();init_toKey();__name(baseSet,"baseSet");baseSet_default=baseSet}});function basePickBy(object3,paths2,predicate){for(var index=-1,length=paths2.length,result2={};++index<length;){var path36=paths2[index],value=baseGet_default(object3,path36);predicate(value,path36)&&baseSet_default(result2,castPath_default(path36,object3),value)}return result2}var basePickBy_default,init_basePickBy=__esm({"../../node_modules/lodash-es/_basePickBy.js"(){init_baseGet();init_baseSet();init_castPath();__name(basePickBy,"basePickBy");basePickBy_default=basePickBy}});var getPrototype,getPrototype_default,init_getPrototype=__esm({"../../node_modules/lodash-es/_getPrototype.js"(){init_overArg();getPrototype=overArg_default(Object.getPrototypeOf,Object),getPrototype_default=getPrototype}});var nativeGetSymbols2,getSymbolsIn,getSymbolsIn_default,init_getSymbolsIn=__esm({"../../node_modules/lodash-es/_getSymbolsIn.js"(){init_arrayPush();init_getPrototype();init_getSymbols();init_stubArray();nativeGetSymbols2=Object.getOwnPropertySymbols,getSymbolsIn=nativeGetSymbols2?function(object3){for(var result2=[];object3;)arrayPush_default(result2,getSymbols_default(object3)),object3=getPrototype_default(object3);return result2}:stubArray_default,getSymbolsIn_default=getSymbolsIn}});function nativeKeysIn(object3){var result2=[];if(object3!=null)for(var key in Object(object3))result2.push(key);return result2}var nativeKeysIn_default,init_nativeKeysIn=__esm({"../../node_modules/lodash-es/_nativeKeysIn.js"(){__name(nativeKeysIn,"nativeKeysIn");nativeKeysIn_default=nativeKeysIn}});function baseKeysIn(object3){if(!isObject_default(object3))return nativeKeysIn_default(object3);var isProto=isPrototype_default(object3),result2=[];for(var key in object3)key=="constructor"&&(isProto||!hasOwnProperty11.call(object3,key))||result2.push(key);return result2}var objectProto14,hasOwnProperty11,baseKeysIn_default,init_baseKeysIn=__esm({"../../node_modules/lodash-es/_baseKeysIn.js"(){init_isObject();init_isPrototype();init_nativeKeysIn();objectProto14=Object.prototype,hasOwnProperty11=objectProto14.hasOwnProperty;__name(baseKeysIn,"baseKeysIn");baseKeysIn_default=baseKeysIn}});function keysIn(object3){return isArrayLike_default(object3)?arrayLikeKeys_default(object3,!0):baseKeysIn_default(object3)}var keysIn_default,init_keysIn=__esm({"../../node_modules/lodash-es/keysIn.js"(){init_arrayLikeKeys();init_baseKeysIn();init_isArrayLike();__name(keysIn,"keysIn");keysIn_default=keysIn}});function getAllKeysIn(object3){return baseGetAllKeys_default(object3,keysIn_default,getSymbolsIn_default)}var getAllKeysIn_default,init_getAllKeysIn=__esm({"../../node_modules/lodash-es/_getAllKeysIn.js"(){init_baseGetAllKeys();init_getSymbolsIn();init_keysIn();__name(getAllKeysIn,"getAllKeysIn");getAllKeysIn_default=getAllKeysIn}});function pickBy(object3,predicate){if(object3==null)return{};var props=arrayMap_default(getAllKeysIn_default(object3),function(prop){return[prop]});return predicate=baseIteratee_default(predicate),basePickBy_default(object3,props,function(value,path36){return predicate(value,path36[0])})}var pickBy_default,init_pickBy=__esm({"../../node_modules/lodash-es/pickBy.js"(){init_arrayMap();init_baseIteratee();init_basePickBy();init_getAllKeysIn();__name(pickBy,"pickBy");pickBy_default=pickBy}});function baseSum(array2,iteratee2){for(var result2,index=-1,length=array2.length;++index<length;){var current=iteratee2(array2[index]);current!==void 0&&(result2=result2===void 0?current:result2+current)}return result2}var baseSum_default,init_baseSum=__esm({"../../node_modules/lodash-es/_baseSum.js"(){__name(baseSum,"baseSum");baseSum_default=baseSum}});function sumBy(array2,iteratee2){return array2&&array2.length?baseSum_default(array2,baseIteratee_default(iteratee2,2)):0}var sumBy_default,init_sumBy=__esm({"../../node_modules/lodash-es/sumBy.js"(){init_baseIteratee();init_baseSum();__name(sumBy,"sumBy");sumBy_default=sumBy}});function classifyReviewFindings(reviewText,plantedFingerprints=[]){let text3=String(reviewText??"").trim();if(!text3)return{empty:!0,lgtmOnly:!0,findingLineCount:0,namesArtifacts:!1,matchedFingerprints:[],caughtPlantedBug:!1};let lower4=text3.toLowerCase(),lines=text3.split(/\n/).map(l=>l.trim()).filter(Boolean),findingLineCount=0;for(let line of lines)(FINDING_LINE_RE.test(line)||/:\d+/.test(line)||/`[^`]+`/.test(line))&&(findingLineCount+=1);let namesArtifacts=/\b[\w.-]+\.(?:ts|tsx|js|jsx|py|go|rs|java|md)\b/.test(text3)||/\b(src|tests?|lib|pkg)\//.test(text3)||/`[A-Za-z_][\w.]*`/.test(text3),matchedFingerprints=[];for(let fp of plantedFingerprints){let f3=String(fp||"").trim();f3&&lower4.includes(f3.toLowerCase())&&matchedFingerprints.push(f3)}let compact3=text3.replace(/\s+/g," ").trim(),lgtmOnly=LGTM_RE.test(compact3)||PRAISE_ONLY_RE.test(compact3)||findingLineCount===0&&!namesArtifacts&&matchedFingerprints.length===0&&/looks good|lgtm|no issues|ship it|approved|没问题|可以合并|没有问题/i.test(compact3)&&compact3.length<280;return{empty:lgtmOnly||findingLineCount===0&&matchedFingerprints.length===0&&!namesArtifacts&&compact3.length<40,lgtmOnly,findingLineCount,namesArtifacts,matchedFingerprints,caughtPlantedBug:matchedFingerprints.length>0}}function reviewMayAllowKeep(input2){let classification=classifyReviewFindings(input2.reviewText,input2.plantedFingerprints??[]),hasMutation=input2.hasMutation===!0||(input2.mutationFileCount??0)>0,multiFile=(input2.mutationFileCount??0)>=2,verifyFailed=input2.verifyFailed===!0,claimed=input2.claimedComplete===!0;if(verifyFailed&&classification.empty)return{allowKeep:!1,reason:"verify failed and review has no findings",classification};if(hasMutation&&claimed&&classification.empty)return{allowKeep:!1,reason:"completion claim after mutation with empty/LGTM review",classification};if(multiFile&&classification.lgtmOnly&&(input2.plantedFingerprints?.length??0)>0&&!classification.caughtPlantedBug)return{allowKeep:!1,reason:"multi-file review missed planted fingerprints",classification};if((input2.plantedFingerprints?.length??0)>0&&!classification.caughtPlantedBug&&hasMutation)return{allowKeep:!1,reason:"review missed planted bug fingerprints",classification};let citeIds=input2.digestCiteIds??[],digestPaths=input2.digestPaths??[],hasDigestAnchors=citeIds.length>0||digestPaths.length>0,digestPressure=input2.requireDigestCite===!0||hasMutation&&(claimed||multiFile||verifyFailed);if(hasDigestAnchors&&digestPressure&&!classification.caughtPlantedBug){let text3=String(input2.reviewText??"");if(!text3.trim())return{allowKeep:!1,reason:"review missing payload digest cite ids/paths (empty_review)",classification};let hitCite=citeIds.some(id=>text3.includes(id)),hitPath=digestPaths.some(p=>{let base=p.split("/").pop()||p;return text3.includes(p)||base.length>3&&text3.includes(base)});if(!hitCite&&!hitPath)return{allowKeep:!1,reason:"review missing payload digest cite ids/paths (no_cite_or_path_in_review)",classification}}return{allowKeep:!0,reason:classification.caughtPlantedBug?"review caught planted fingerprint(s)":classification.empty?"empty review allowed (no mutation/claim pressure)":"review has substantive findings or no planted bugs",classification}}var LGTM_RE,PRAISE_ONLY_RE,FINDING_LINE_RE,init_reviewFindingsGate=__esm({"src/runtime/reviewFindingsGate.ts"(){LGTM_RE=/^\s*(lgtm|looks good|looks great|ship it|approved|no issues?|no problems?|no bugs?|all good|sgtm|👍)\s*[.!]?\s*$/im,PRAISE_ONLY_RE=/^(?:the code (?:looks|seems) (?:fine|good|correct|solid)|no changes needed|ready to merge)\.?$/im,FINDING_LINE_RE=/^\s*(?:[-*•]|\d+[.)]|FINDINGS?:|BUG\b|ISSUE\b|PROBLEM\b|缺陷|问题|错误)\s+/im;__name(classifyReviewFindings,"classifyReviewFindings");__name(reviewMayAllowKeep,"reviewMayAllowKeep")}});var sessionPayloadDigest_exports={};__export(sessionPayloadDigest_exports,{clearSessionPayloadDigest:()=>clearSessionPayloadDigest,getSessionPayloadDigest:()=>getSessionPayloadDigest,getSessionPayloadDigestAgeMs:()=>getSessionPayloadDigestAgeMs,resetSessionPayloadDigestForTests:()=>resetSessionPayloadDigestForTests,setSessionPayloadDigest:()=>setSessionPayloadDigest});function setSessionPayloadDigest(digest){lastDigest=digest??null,lastSetAtMs=digest?Date.now():0}function getSessionPayloadDigest(){return lastDigest}function clearSessionPayloadDigest(){lastDigest=null,lastSetAtMs=0}function getSessionPayloadDigestAgeMs(now3=Date.now()){return!lastDigest||!lastSetAtMs?null:now3-lastSetAtMs}function resetSessionPayloadDigestForTests(){clearSessionPayloadDigest()}var lastDigest,lastSetAtMs,init_sessionPayloadDigest=__esm({"src/runtime/sessionPayloadDigest.ts"(){lastDigest=null,lastSetAtMs=0;__name(setSessionPayloadDigest,"setSessionPayloadDigest");__name(getSessionPayloadDigest,"getSessionPayloadDigest");__name(clearSessionPayloadDigest,"clearSessionPayloadDigest");__name(getSessionPayloadDigestAgeMs,"getSessionPayloadDigestAgeMs");__name(resetSessionPayloadDigestForTests,"resetSessionPayloadDigestForTests")}});var reviewHardGate_exports={};__export(reviewHardGate_exports,{computeReviewHardGate:()=>computeReviewHardGate,extractRecentReviewText:()=>extractRecentReviewText,indexAfterLatestMutation:()=>indexAfterLatestMutation,isReviewHardGateDisabled:()=>isReviewHardGateDisabled,looksLikeIndependentReviewBody:()=>looksLikeIndependentReviewBody,parseReviewShipVerdict:()=>parseReviewShipVerdict,resolveReviewGateTierFields:()=>resolveReviewGateTierFields});function resolveReviewGateTierFields(input2){return input2.pathTierDecision?{pathTier:String(input2.pathTierDecision.tier||"").toUpperCase()||null,allowBlockingReview:input2.pathTierDecision.allowBlockingReview===!0}:{pathTier:input2.pathTier??null,allowBlockingReview:input2.allowBlockingReview}}function parseReviewShipVerdict(reviewText){let text3=String(reviewText??"").trim();if(!text3)return"none";let lower4=text3.toLowerCase(),structured=/\bverdict\s*[::]\s*(ship|fix[_-]?first|fix|rethink|lgtm|approve[d]?)\b/i.exec(text3);if(structured?.[1]){let v2=structured[1].toLowerCase().replace(/-/g,"_");return v2==="ship"||v2==="lgtm"||v2.startsWith("approve")?"ship":v2==="rethink"?"rethink":"fix_first"}if(/\b(rethink|re-?architect|start over|wrong approach|从根本上重来|重新设计)\b/i.test(text3))return"rethink";if(/\b(fix[_-\s]?first|must fix|blocking issue|do not (?:merge|ship)|needs? fix|阻塞|必须先修|不能合并)\b/i.test(text3))return"fix_first";if(/\b(ship(?:\s+it)?|ready to (?:merge|ship)|approved|lgtm|sgtm|可以合并|可以发版|审查通过)\b/i.test(lower4))return"ship";let cls=classifyReviewFindings(text3);return cls.empty||cls.lgtmOnly?"empty":cls.findingLineCount>0?"fix_first":"empty"}function tierRequiresReview(pathTier,allowBlockingReview){let tier=String(pathTier||"").toUpperCase();return tier==="T0"?{required:!1,tier:"T0"}:tier==="T2"?{required:!0,tier:"T2"}:tier==="T1"?allowBlockingReview===!1?{required:!1,tier:"T1"}:{required:!0,tier:"T1"}:allowBlockingReview===!0?{required:!0,tier:tier||"T?"}:{required:!1,tier:tier||""}}function computeReviewHardGate(input2){let fields=resolveReviewGateTierFields(input2),{required:required2,tier}=tierRequiresReview(fields.pathTier,fields.allowBlockingReview);if(!required2)return null;let phrase=findCompletionClaimPhrase(input2.assistantText);if(!phrase||!(input2.hasMutation===!0||(input2.mutationFileCount??0)>0))return null;let verdict=input2.reviewVerdict??parseReviewShipVerdict(input2.reviewText);if(verdict==="ship"){let digestCiteIds=input2.digestCiteIds,digestPaths=input2.digestPaths;if(!digestCiteIds?.length&&!digestPaths?.length)try{let{getSessionPayloadDigest:getSessionPayloadDigest2}=(init_sessionPayloadDigest(),__toCommonJS(sessionPayloadDigest_exports)),dig=getSessionPayloadDigest2();dig&&(digestCiteIds=dig.citeIds,digestPaths=dig.paths)}catch{}let keep=reviewMayAllowKeep({reviewText:input2.reviewText,hasMutation:!0,mutationFileCount:input2.mutationFileCount,verifyFailed:input2.verifyFailed,claimedComplete:!0,digestCiteIds,digestPaths});if(!keep.allowKeep){let digestMiss=/digest cite/i.test(keep.reason);return{reason:`Review hard gate (${tier}): completion phrase "${phrase}" but review failed keep gate (${keep.reason}). Independent review must return VERDICT: ship with substantive checks`+(digestMiss?" grounded in payload digest cite ids/paths":"")+" (or fix-first)."+(input2.sameModelReview?" Note: review model equals main \u2014 prefer a distinct review slot for independence.":""),matchedPhrase:phrase,pathTier:tier,reviewVerdict:"empty",line:digestMiss?`review-gate: blocked \xB7 ${tier} \xB7 digest_cite`:`review-gate: blocked \xB7 ${tier} \xB7 empty_ship`,nextStep:digestMiss?"Re-run review citing PAYLOAD DIGEST chunk ids / paths; VERDICT: ship|fix_first|rethink; then restate completion.":"Run review slot (distinct model if possible), return VERDICT: ship|fix_first|rethink with concrete findings, then restate completion."}}return null}return verdict==="none"?{reason:`Review hard gate (${tier}): completion phrase "${phrase}" with mutations but **no independent review ship**. On T1/T2, delivery requires review-slot VERDICT: ship before honest-done (sol-advisor pattern). Do not claim done until review returns ship (or mark not-applicable with evidence).`+(input2.sameModelReview?" Prefer a review model \u2260 main for independence.":""),matchedPhrase:phrase,pathTier:tier,reviewVerdict:"none",line:`review-gate: blocked \xB7 ${tier} \xB7 no_review`,nextStep:"Invoke independent review (review slot), address findings, obtain VERDICT: ship, then restate completion with evidence."}:verdict==="fix_first"||verdict==="rethink"?{reason:`Review hard gate (${tier}): completion phrase "${phrase}" but review returned **${verdict.replace("_","-")}**. Cannot honest-done until findings are fixed and review returns VERDICT: ship.`,matchedPhrase:phrase,pathTier:tier,reviewVerdict:verdict,line:`review-gate: blocked \xB7 ${tier} \xB7 ${verdict}`,nextStep:verdict==="rethink"?"Revisit approach per review, re-implement, re-review, then claim done only after VERDICT: ship.":"Fix review findings, re-run review for VERDICT: ship, then restate completion."}:{reason:`Review hard gate (${tier}): completion phrase "${phrase}" but review is empty/rubber-stamp. Require substantive independent review with VERDICT: ship.`,matchedPhrase:phrase,pathTier:tier,reviewVerdict:"empty",line:`review-gate: blocked \xB7 ${tier} \xB7 empty`,nextStep:"Re-run review with concrete path:line findings or explicit VERDICT: ship after checks."}}function isReviewHardGateDisabled(env5=process.env){let raw=env5.CLAVUE_REVIEW_HARD_GATE;if(raw===void 0||raw==="")return!1;let v2=String(raw).trim().toLowerCase();return v2==="0"||v2==="false"||v2==="off"||v2==="no"}function assistantTextFromMessage(m3){let content=m3.message?.content;if(typeof content=="string")return content;if(!Array.isArray(content))return"";let parts=[];for(let b3 of content)b3?.type==="text"&&typeof b3.text=="string"&&parts.push(b3.text);return parts.join(`
25
25
  `)}function looksLikeIndependentReviewBody(text3){let t8=String(text3||"").trim();return t8?!!(/\bverdict\s*[::]/i.test(t8)||/\bFINDINGS?\s*[::]/i.test(t8)||/\bFINDINGS?\b/i.test(t8)&&t8.split(`
26
26
  `).length>=2||/\b(independent review|审查结论|评审意见)\b/i.test(t8)||/^(?:#{1,3}\s*)?(?:code\s+)?review\s*(?:report|result|notes)?\s*[::]?\s*$/im.test(t8)):!1}function indexAfterLatestMutation(messages){if(!messages?.length)return 0;let toolNameById=new Map,after2=0;for(let i3=0;i3<messages.length;i3++){let m3=messages[i3];if(m3?.type==="assistant"&&Array.isArray(m3.message?.content))for(let b3 of m3.message.content)b3?.type==="tool_use"&&b3.id&&b3.name&&toolNameById.set(b3.id,b3.name);if(m3?.type==="user"&&Array.isArray(m3.message?.content))for(let b3 of m3.message.content){if(b3?.type!=="tool_result"||!b3.tool_use_id||b3.is_error===!0)continue;let name=toolNameById.get(b3.tool_use_id);name&&MUTATION_TOOL_NAMES.has(name)&&(after2=i3+1)}}return after2}function extractRecentReviewText(messages){if(!messages?.length)return null;let minIndex=indexAfterLatestMutation(messages);for(let i3=messages.length-1;i3>=minIndex;i3--){let m3=messages[i3];if(m3?.type!=="assistant"||m3.isApiErrorMessage)continue;let t8=assistantTextFromMessage(m3).trim();if(t8&&/\bverdict\s*[::]/i.test(t8))return t8}for(let i3=messages.length-1;i3>=minIndex;i3--){let m3=messages[i3];if(m3?.type!=="assistant"||m3.isApiErrorMessage)continue;let t8=assistantTextFromMessage(m3).trim();if(t8&&looksLikeIndependentReviewBody(t8))return t8}return null}var MUTATION_TOOL_NAMES,init_reviewHardGate=__esm({"src/runtime/reviewHardGate.ts"(){init_honestCompletion();init_reviewFindingsGate();__name(resolveReviewGateTierFields,"resolveReviewGateTierFields");__name(parseReviewShipVerdict,"parseReviewShipVerdict");__name(tierRequiresReview,"tierRequiresReview");__name(computeReviewHardGate,"computeReviewHardGate");__name(isReviewHardGateDisabled,"isReviewHardGateDisabled");MUTATION_TOOL_NAMES=new Set(["Edit","Write","NotebookEdit","MultiEdit"]);__name(assistantTextFromMessage,"assistantTextFromMessage");__name(looksLikeIndependentReviewBody,"looksLikeIndependentReviewBody");__name(indexAfterLatestMutation,"indexAfterLatestMutation");__name(extractRecentReviewText,"extractRecentReviewText")}});var imageGenerationIntent_exports={};__export(imageGenerationIntent_exports,{imageIntentReminder:()=>imageIntentReminder,isImageEditIntent:()=>isImageEditIntent,isImageGenerationIntent:()=>isImageGenerationIntent});function isImageGenerationIntent(text3){let t8=String(text3||"").trim();return t8?IMAGE_GEN_INTENT_RE.test(t8):!1}function isImageEditIntent(text3){let t8=String(text3||"").trim();return t8?IMAGE_EDIT_INTENT_RE.test(t8):!1}function imageIntentReminder(text3,opts){let hasGen=opts?.hasImageGen!==!1,hasEdit=opts?.hasImageEdit!==!1;return!hasGen&&!hasEdit?null:isImageEditIntent(text3)&&hasEdit?["MANDATORY IMAGE EDIT: User asked to edit/transform an image.","First tool call this turn MUST be image_edit (path or [Image #N]).","Do not claim done with only Read/Edit of code/XML. Save to images/N.png then wire assets."].join(" "):isImageGenerationIntent(text3)&&hasGen?["MANDATORY IMAGE GEN: User asked for icon/image/UI visual assets.","First tool call this turn MUST be image_gen (or image_edit if a source exists).","Save to images/N.png, then Edit project to reference it.","Forbidden: only describing the image, or only editing XML/resources without image_gen.","If login/BYOK missing, say so after attempting the tool \u2014 do not silently skip."].join(" "):null}var IMAGE_GEN_INTENT_RE,IMAGE_EDIT_INTENT_RE,init_imageGenerationIntent=__esm({"src/utils/imageGenerationIntent.ts"(){IMAGE_GEN_INTENT_RE=/(?:\b(?:draw|generate|create|make|design|paint|render|optimize|improve|refresh|polish)\b.{0,48}\b(?:icon|logo|illustration|poster|wallpaper|sprite|banner|thumbnail|favicon|app\s*icon|launcher)\b)|(?:\b(?:icon|logo|illustration|poster|wallpaper|sprite|banner|thumbnail|favicon)\b.{0,48}\b(?:draw|generate|create|make|design|paint|render|optimize|polish)\b)|(?:画(?:一)?[张个幅]?|生成|做[一]?个?|优化|换|改)(?:一个|张|个)?\s*(?:app\s*)?(?:图标|logo|海报|壁纸|插画|素材)|(?:图标|logo|海报|壁纸).{0,16}(?:生成|优化|换|做|改)|(?:app\s*icon|launcher\s*icon|ic_launcher)|(?:优化图标|改图标|换图标|生成图标|图标优化)|(?:原生).{0,20}(?:图标|菜单)|(?:图标).{0,20}(?:原生|菜单栏)/i,IMAGE_EDIT_INTENT_RE=/(?:\b(?:edit|restyle|remix|transform|vary|inpaint)\b.{0,40}\b(?:image|icon|logo|photo|picture)\b)|(?:改|编辑|重绘|变体).{0,12}(?:图|图标|logo)|\[Image\s*#\d+\]|Image\s*#\d+/i;__name(isImageGenerationIntent,"isImageGenerationIntent");__name(isImageEditIntent,"isImageEditIntent");__name(imageIntentReminder,"imageIntentReminder")}});var turnQualityGates_exports={};__export(turnQualityGates_exports,{evaluateImageAssetCompletionGate:()=>evaluateImageAssetCompletionGate,formatMidCycleReviewPublicNotice:()=>formatMidCycleReviewPublicNotice,imageAssetToolsUsed:()=>imageAssetToolsUsed,recoverCleanTaskGoal:()=>recoverCleanTaskGoal,turnRequiresImageAssetTool:()=>turnRequiresImageAssetTool});function toolUsesInMessages(messages){let names2=[];if(!messages)return names2;for(let msg of messages){if(msg.type!=="assistant"&&msg.message?.role!=="assistant")continue;let content=msg.message?.content??msg.content;if(Array.isArray(content))for(let b3 of content)b3&&typeof b3=="object"&&b3.type==="tool_use"&&names2.push(String(b3.name||""))}return names2}function turnRequiresImageAssetTool(userText){return isImageGenerationIntent(userText)||isImageEditIntent(userText)}function imageAssetToolsUsed(messages){return toolUsesInMessages(messages).some(n4=>n4==="image_gen"||n4==="image_edit"||n4==="ImageGen"||n4==="ImageEdit")}function evaluateImageAssetCompletionGate(input2){return input2.imageToolsMounted===!1?{block:!1,reason:"no_image_tools",line:""}:turnRequiresImageAssetTool(input2.userText)?imageAssetToolsUsed(input2.messages)?{block:!1,reason:"image_tools_used",line:""}:/(?:\b(?:done|complete|finished|ready\s+to\s+ship|all\s+done)\b|已完成|完成了|任务已完成|搞定|修复完成|实现完成|开发完成)/i.test(String(input2.assistantText||""))?{block:!0,reason:"image_asset_missing",line:"honesty: blocked \xB7 icon/image intent requires image_gen or image_edit before completion claim"}:{block:!1,reason:"no_claim",line:"image_gate: intent active \u2014 call image_gen/image_edit before claiming done"}:{block:!1,reason:"no_image_intent",line:""}}function formatMidCycleReviewPublicNotice(input2){let model=String(input2.model||"review").trim()||"review",seam=String(input2.seamLine||"").trim(),preview2=String(input2.findingsPreview||"").replace(/\s+/g," ").trim().slice(0,280),parts=[input2.degraded?`\u{1F441} Mid-cycle review degraded (${model})`:`\u{1F441} Mid-cycle review \xB7 ${model}`];return seam&&parts.push(seam),preview2&&parts.push(preview2),parts.join(`
27
27
  `)}function recoverCleanTaskGoal(texts,isPolluted){let cleaned=texts.map(t8=>String(t8||"").replace(/\s+/g," ").trim()).filter(Boolean).filter(t8=>!isPolluted(t8));for(let i3=cleaned.length-1;i3>=0;i3--){let t8=cleaned[i3];if(!/^#\s*Grok CLI session handoff/i.test(t8)&&t8.length>=6)return t8.slice(0,240)}for(let i3=texts.length-1;i3>=0;i3--){let m3=String(texts[i3]||"").match(/(?:^|\n)#{1,3}\s*Goal\s*\n+([^\n#][^\n]{4,200})/i);if(m3?.[1]&&!isPolluted(m3[1]))return m3[1].trim().slice(0,240)}return cleaned.at(-1)?.slice(0,240)||""}var init_turnQualityGates=__esm({"src/utils/turnQualityGates.ts"(){init_imageGenerationIntent();__name(toolUsesInMessages,"toolUsesInMessages");__name(turnRequiresImageAssetTool,"turnRequiresImageAssetTool");__name(imageAssetToolsUsed,"imageAssetToolsUsed");__name(evaluateImageAssetCompletionGate,"evaluateImageAssetCompletionGate");__name(formatMidCycleReviewPublicNotice,"formatMidCycleReviewPublicNotice");__name(recoverCleanTaskGoal,"recoverCleanTaskGoal")}});var falseSuccessGate_exports={};__export(falseSuccessGate_exports,{evaluateFalseSuccessGate:()=>evaluateFalseSuccessGate,hasFreestyleVerifyOrFixClaim:()=>hasFreestyleVerifyOrFixClaim,isMutationDeliveryUserTask:()=>isMutationDeliveryUserTask,shouldMarkResultErrorForFalseSuccess:()=>shouldMarkResultErrorForFalseSuccess});function hasFreestyleVerifyOrFixClaim(text3){let t8=String(text3??"").trim();return!t8||/\b(not\s+yet|still\s+broken|failed|failing|cannot fix)\b/i.test(t8)&&!FALSE_VERIFY_PROSE.test(t8)?!1:FALSE_VERIFY_PROSE.test(t8)}function isMutationDeliveryUserTask(userText){let t8=String(userText??"").trim();return!t8||PURE_QA.test(t8)?!1:MUTATION_USER.test(t8)}function evaluateFalseSuccessGate(input2){let user=String(input2.userText??""),asst=String(input2.assistantText??""),changes=Math.max(0,Number(input2.changeCount)||0),passed=Math.max(0,Number(input2.passedVerifyCount)||0),attempted=input2.mutationAttempted===!0;if(!asst.trim()||!isMutationDeliveryUserTask(user))return{refuse:!1,code:"ok",reason:"not_mutation_delivery_task",banner:""};if(changes>0&&passed>0)return{refuse:!1,code:"ok",reason:"mutation_and_verify_ok",banner:""};if(changes>0&&passed===0&&HONEST_VERIFY_BLOCKED_PROSE.test(asst))return{refuse:!1,code:"ok",reason:"mutation_ok_verify_blocked_honest",banner:""};let freestyle=hasFreestyleVerifyOrFixClaim(asst);return input2.toolsReady===!1&&freestyle&&changes===0&&!attempted?{refuse:!0,code:"tools_not_ready",reason:"tools_not_ready_freestyle_implement",banner:`TOOLS_NOT_READY: ${String(input2.toolsReadyReason||"tools-not-ready").slice(0,200)}. Switch to a tools-capable model/profile (\`clavue provider validate\`) or Official Cloud. Do not freestyle green without tool_calls.`}:changes>0&&passed===0&&freestyle?{refuse:!0,code:"claimed_green_without_verify",reason:"edited_but_claimed_verify_green_without_tool_evidence",banner:"FALSE_SUCCESS: claimed verify green without a passing verify tool result. Re-run the check command, then restate completion with evidence."}:changes===0&&freestyle?{refuse:!0,code:attempted?"mutation_attempt_no_side_effect":"no_disk_side_effect",reason:attempted?"mutation_tools_ran_but_no_path_side_effect":"claimed_fix_or_green_without_disk_mutations",banner:"FALSE_SUCCESS: completion/verify claim without disk side-effects. Use Edit/Write under cwd, run the user-requested verify, then restate with evidence. Do not invent green exits."}:{refuse:!1,code:"ok",reason:"no_false_success_pattern",banner:""}}function shouldMarkResultErrorForFalseSuccess(input2){return evaluateFalseSuccessGate(input2).refuse}var FALSE_VERIFY_PROSE,MUTATION_USER,PURE_QA,HONEST_VERIFY_BLOCKED_PROSE,init_falseSuccessGate=__esm({"src/runtime/falseSuccessGate.ts"(){FALSE_VERIFY_PROSE=/exit\s*[`:'"]?\s*0\b|→\s*`?0`?|prints?\s+[`']?4[`']?\s*,?\s*exit|already\s+(correct|adds|fixed|shows\s+addition)|no change (was |is )?required|returns?\s+[`']?a\s*\+\s*b[`']?|sum\s+returns?\s+addition|\*\*done\.\*\*|^\s*\*\*done\*\*|fixed it so|has been fixed|(已修好|测通|全部通过|exit\s*0|验证通过)/iu,MUTATION_USER=/\b(fix|edit|implement|write|patch|create|bug|refactor|repair)\b|(修|改|实现|写入|创建|修复|改成|改回)/iu,PURE_QA=/^(what|why|how|who|when|where|explain|describe|总结|什么是|为什么)\b/i,HONEST_VERIFY_BLOCKED_PROSE=/emission[- ]hold|不可逆动作已扣留|intercepted by the runtime|verify did \*\*not\*\* complete|held\/rejected|was repeatedly held|fix-phase gate|verification pending|HARD_REJECT.{0,40}(verif|bash|node)|没有.{0,24}stdout|cannot confirm the exit code|无法确认.{0,12}退出|扣留/i;__name(hasFreestyleVerifyOrFixClaim,"hasFreestyleVerifyOrFixClaim");__name(isMutationDeliveryUserTask,"isMutationDeliveryUserTask");__name(evaluateFalseSuccessGate,"evaluateFalseSuccessGate");__name(shouldMarkResultErrorForFalseSuccess,"shouldMarkResultErrorForFalseSuccess")}});function isPlanExecuteIsolationEnabled(env5=process.env){return!isEnvDefinedFalsy(env5.CLAVUE_PLAN_EXECUTE_ISOLATION)}function resolveVerifyLayer(input2){let env5=input2.env??process.env,forced=String(env5.CLAVUE_VERIFY_LAYER??"").trim().toLowerCase();return forced==="fast"||forced==="full"?forced:input2.releaseIntent||input2.complexImplementation||(input2.pendingVerifySteps??0)>=3||(input2.changeCount??0)>3?"full":"fast"}function hasReleaseCompletionIntent(text3){let raw=String(text3??"").trim();if(!raw)return!1;let lower4=raw.toLowerCase();for(let phrase of RELEASE_COMPLETION_PHRASES)if(phrase.match(/[\u4e00-\u9fff]/)){if(raw.includes(phrase))return!0}else if(lower4.includes(phrase.toLowerCase()))return!0;return!1}function shouldHardGateOnPhrase(phrase,layer){return phrase?layer==="full"?!0:hasReleaseCompletionIntent(phrase):!1}function countChangedPathsFromMessages(messages){let paths2=new Set;for(let i3=messages.length-1;i3>=0&&paths2.size<20;i3--){let m3=messages[i3];if(m3?.type!=="assistant")continue;let content=m3.message?.content;if(Array.isArray(content)){for(let block of content){if(block?.type!=="tool_use")continue;let name=String(block.name??"");if(name!=="Edit"&&name!=="Write"&&name!=="NotebookEdit"&&!name.includes("Edit")&&!name.includes("Write"))continue;let input2=block.input??{},filePath=typeof input2.file_path=="string"&&input2.file_path||typeof input2.filePath=="string"&&input2.filePath||typeof input2.path=="string"&&input2.path||"";filePath&&paths2.add(filePath)}break}}return paths2.size}var SOFT_COMPLETION_PHRASES,RELEASE_COMPLETION_PHRASES,init_executionPipeline=__esm({"src/services/plan/executionPipeline.ts"(){init_envUtils();SOFT_COMPLETION_PHRASES=["all done","task complete","completed the task","we are done","i am done","i'm done","work is done","fix is complete","\u641E\u5B9A\u4E86","\u641E\u5B9A","\u5168\u90E8\u5B8C\u6210","\u4EFB\u52A1\u5DF2\u5B8C\u6210","\u5DF2\u7ECF\u5B8C\u6210","\u5DF2\u5B8C\u6210","\u5B8C\u6210\u4E86","\u4EFB\u52A1\u5B8C\u6210","\u5F00\u53D1\u5B8C\u6210","\u4FEE\u590D\u5B8C\u6210","\u5B9E\u73B0\u5B8C\u6210","\u505A\u5B8C\u4E86"],RELEASE_COMPLETION_PHRASES=["ready to ship","ready to deliver","ready to merge","ship it","ready for review","\u53EF\u4EE5\u53D1\u7248","\u53EF\u4EE5\u53D1\u5E03","\u53EF\u4EE5\u63D0\u4EA4","\u53EF\u4EE5\u5408\u5E76","\u51C6\u5907\u53D1\u5E03","implementation complete","completed successfully"];__name(isPlanExecuteIsolationEnabled,"isPlanExecuteIsolationEnabled");__name(resolveVerifyLayer,"resolveVerifyLayer");__name(hasReleaseCompletionIntent,"hasReleaseCompletionIntent");__name(shouldHardGateOnPhrase,"shouldHardGateOnPhrase");__name(countChangedPathsFromMessages,"countChangedPathsFromMessages")}});function assembleStyles(){let codes=new Map;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(10),styles.bgColor.ansi256=wrapAnsi256(10),styles.bgColor.ansi16m=wrapAnsi16m(10),Object.defineProperties(styles,{rgbToAnsi256:{value(red2,green2,blue2){return red2===green2&&green2===blue2?red2<8?16:red2>248?231:Math.round((red2-8)/247*24)+232:16+36*Math.round(red2/255*5)+6*Math.round(green2/255*5)+Math.round(blue2/255*5)},enumerable:!1},hexToRgb:{value(hex){let matches2=/[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));if(!matches2)return[0,0,0];let[colorString]=matches2;colorString.length===3&&(colorString=[...colorString].map(character=>character+character).join(""));let integer2=Number.parseInt(colorString,16);return[integer2>>16&255,integer2>>8&255,integer2&255]},enumerable:!1},hexToAnsi256:{value:__name(hex=>styles.rgbToAnsi256(...styles.hexToRgb(hex)),"value"),enumerable:!1},ansi256ToAnsi:{value(code){if(code<8)return 30+code;if(code<16)return 90+(code-8);let red2,green2,blue2;if(code>=232)red2=((code-232)*10+8)/255,green2=red2,blue2=red2;else{code-=16;let remainder=code%36;red2=Math.floor(code/36)/5,green2=Math.floor(remainder/6)/5,blue2=remainder%6/5}let value=Math.max(red2,green2,blue2)*2;if(value===0)return 30;let result2=30+(Math.round(blue2)<<2|Math.round(green2)<<1|Math.round(red2));return value===2&&(result2+=60),result2},enumerable:!1},rgbToAnsi:{value:__name((red2,green2,blue2)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(red2,green2,blue2)),"value"),enumerable:!1},hexToAnsi:{value:__name(hex=>styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),"value"),enumerable:!1}}),styles}var wrapAnsi16,wrapAnsi256,wrapAnsi16m,styles,modifierNames,foregroundColorNames,backgroundColorNames,colorNames,ansiStyles,ansi_styles_default,init_ansi_styles=__esm({"../../node_modules/chalk/source/vendor/ansi-styles/index.js"(){wrapAnsi16=__name((offset=0)=>code=>`\x1B[${code+offset}m`,"wrapAnsi16"),wrapAnsi256=__name((offset=0)=>code=>`\x1B[${38+offset};5;${code}m`,"wrapAnsi256"),wrapAnsi16m=__name((offset=0)=>(red2,green2,blue2)=>`\x1B[${38+offset};2;${red2};${green2};${blue2}m`,"wrapAnsi16m"),styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},modifierNames=Object.keys(styles.modifier),foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor),colorNames=[...foregroundColorNames,...backgroundColorNames];__name(assembleStyles,"assembleStyles");ansiStyles=assembleStyles(),ansi_styles_default=ansiStyles}});import process2 from"node:process";import os from"node:os";import tty from"node:tty";function hasFlag(flag,argv=globalThis.Deno?globalThis.Deno.args:process2.argv){let prefix=flag.startsWith("-")?"":flag.length===1?"-":"--",position=argv.indexOf(prefix+flag),terminatorPosition=argv.indexOf("--");return position!==-1&&(terminatorPosition===-1||position<terminatorPosition)}function envForceColor(){if("FORCE_COLOR"in env)return env.FORCE_COLOR==="true"?1:env.FORCE_COLOR==="false"?0:env.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(env.FORCE_COLOR,10),3)}function translateLevel(level){return level===0?!1:{level,hasBasic:!0,has256:level>=2,has16m:level>=3}}function _supportsColor(haveStream,{streamIsTTY,sniffFlags=!0}={}){let noFlagForceColor=envForceColor();noFlagForceColor!==void 0&&(flagForceColor=noFlagForceColor);let forceColor=sniffFlags?flagForceColor:noFlagForceColor;if(forceColor===0)return 0;if(sniffFlags){if(hasFlag("color=16m")||hasFlag("color=full")||hasFlag("color=truecolor"))return 3;if(hasFlag("color=256"))return 2}if("TF_BUILD"in env&&"AGENT_NAME"in env)return 1;if(haveStream&&!streamIsTTY&&forceColor===void 0)return 0;let min2=forceColor||0;if(env.TERM==="dumb")return min2;if(process2.platform==="win32"){let osRelease3=os.release().split(".");return Number(osRelease3[0])>=10&&Number(osRelease3[2])>=10586?Number(osRelease3[2])>=14931?3:2:1}if("CI"in env)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(key=>key in env)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(sign=>sign in env)||env.CI_NAME==="codeship"?1:min2;if("TEAMCITY_VERSION"in env)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION)?1:0;if(env.COLORTERM==="truecolor"||env.TERM==="xterm-kitty"||env.TERM==="xterm-ghostty"||env.TERM==="wezterm")return 3;if("TERM_PROGRAM"in env){let version3=Number.parseInt((env.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(env.TERM_PROGRAM){case"iTerm.app":return version3>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(env.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)||"COLORTERM"in env?1:min2}function createSupportsColor(stream4,options={}){let level=_supportsColor(stream4,{streamIsTTY:stream4&&stream4.isTTY,...options});return translateLevel(level)}var env,flagForceColor,supportsColor,supports_color_default,init_supports_color=__esm({"../../node_modules/chalk/source/vendor/supports-color/index.js"(){__name(hasFlag,"hasFlag");({env}=process2);hasFlag("no-color")||hasFlag("no-colors")||hasFlag("color=false")||hasFlag("color=never")?flagForceColor=0:(hasFlag("color")||hasFlag("colors")||hasFlag("color=true")||hasFlag("color=always"))&&(flagForceColor=1);__name(envForceColor,"envForceColor");__name(translateLevel,"translateLevel");__name(_supportsColor,"_supportsColor");__name(createSupportsColor,"createSupportsColor");supportsColor={stdout:createSupportsColor({isTTY:tty.isatty(1)}),stderr:createSupportsColor({isTTY:tty.isatty(2)})},supports_color_default=supportsColor}});function stringReplaceAll(string4,substring,replacer){let index=string4.indexOf(substring);if(index===-1)return string4;let substringLength=substring.length,endIndex=0,returnValue2="";do returnValue2+=string4.slice(endIndex,index)+substring+replacer,endIndex=index+substringLength,index=string4.indexOf(substring,endIndex);while(index!==-1);return returnValue2+=string4.slice(endIndex),returnValue2}function stringEncaseCRLFWithFirstIndex(string4,prefix,postfix,index){let endIndex=0,returnValue2="";do{let gotCR=string4[index-1]==="\r";returnValue2+=string4.slice(endIndex,gotCR?index-1:index)+prefix+(gotCR?`\r
@@ -2604,7 +2604,7 @@ To update, please run:
2604
2604
  ${APP_UPDATE_COMMAND} update
2605
2605
 
2606
2606
  This will ensure you have access to the latest features and improvements.
2607
- `),gracefulShutdownSync(1))}catch(error40){logError2(error40)}}async function getMaxVersion(){let config3=await getMaxVersionConfig();return process.env.USER_TYPE==="ant"?config3.ant||void 0:config3.external||void 0}async function getMaxVersionMessage(){let config3=await getMaxVersionConfig();return process.env.USER_TYPE==="ant"?config3.ant_message||void 0:config3.external_message||void 0}async function getMaxVersionConfig(){try{return await getDynamicConfig_BLOCKS_ON_INIT("tengu_max_version_config",{})}catch(error40){return logError2(error40),{}}}function shouldSkipVersion(targetVersion){let minimumVersion=getInitialSettings()?.minimumVersion;if(!minimumVersion)return!1;let shouldSkip=!gte2(targetVersion,minimumVersion);return shouldSkip&&logForDebugging(`Skipping update to ${targetVersion} - below minimumVersion ${minimumVersion}`),shouldSkip}function getLockFilePath(){return join68(getClaudeConfigHomeDir(),".update.lock")}async function acquireLock(){let fs13=getFsImplementation(),lockPath2=getLockFilePath();try{let stats2=await fs13.stat(lockPath2);if(Date.now()-stats2.mtimeMs<LOCK_TIMEOUT_MS)return!1;try{let recheck=await fs13.stat(lockPath2);if(Date.now()-recheck.mtimeMs<LOCK_TIMEOUT_MS)return!1;await fs13.unlink(lockPath2)}catch(err2){if(!isENOENT(err2))return logError2(err2),!1}}catch(err2){if(!isENOENT(err2))return logError2(err2),!1}try{return await writeFile15(lockPath2,`${process.pid}`,{encoding:"utf8",flag:"wx"}),!0}catch(err2){let code=getErrnoCode(err2);if(code==="EEXIST")return!1;if(code==="ENOENT")try{return await fs13.mkdir(getClaudeConfigHomeDir()),await writeFile15(lockPath2,`${process.pid}`,{encoding:"utf8",flag:"wx"}),!0}catch(mkdirErr){return getErrnoCode(mkdirErr)==="EEXIST"||logError2(mkdirErr),!1}return logError2(err2),!1}}async function releaseLock(){let fs13=getFsImplementation(),lockPath2=getLockFilePath();try{await fs13.readFile(lockPath2,{encoding:"utf8"})===`${process.pid}`&&await fs13.unlink(lockPath2)}catch(err2){if(isENOENT(err2))return;logError2(err2)}}async function getInstallationPrefix(){let isBun=env4.isRunningWithBun(),prefixResult=null;return isBun?prefixResult=await execFileNoThrowWithCwd("bun",["pm","bin","-g"],{cwd:homedir17()}):prefixResult=await execFileNoThrowWithCwd("npm",["-g","config","get","prefix"],{cwd:homedir17()}),prefixResult.code!==0?(logError2(new Error(`Failed to check ${isBun?"bun":"npm"} permissions`)),null):prefixResult.stdout.trim()}async function checkGlobalInstallPermissions(){try{let prefix=await getInstallationPrefix();if(!prefix)return{hasPermissions:!1,npmPrefix:null};try{return await access4(prefix,fsConstants3.W_OK),{hasPermissions:!0,npmPrefix:prefix}}catch{return logError2(new AutoUpdaterError("Insufficient permissions for global npm install.")),{hasPermissions:!1,npmPrefix:prefix}}}catch(error40){return logError2(error40),{hasPermissions:!1,npmPrefix:null}}}async function getLatestVersion(channel){let result2=await execFileNoThrowWithCwd("npm",["view",`${APP_NPM_PACKAGE_NAME}@${channel==="stable"?"stable":"latest"}`,"version","--prefer-online"],{abortSignal:AbortSignal.timeout(5e3),cwd:homedir17()});return result2.code!==0?(logForDebugging(`npm view failed with code ${result2.code}`),result2.stderr?logForDebugging(`npm stderr: ${result2.stderr.trim()}`):logForDebugging("npm stderr: (empty)"),result2.stdout&&logForDebugging(`npm stdout: ${result2.stdout.trim()}`),null):result2.stdout.trim()}async function getNpmDistTags(){let result2=await execFileNoThrowWithCwd("npm",["view",APP_NPM_PACKAGE_NAME,"dist-tags","--json","--prefer-online"],{abortSignal:AbortSignal.timeout(5e3),cwd:homedir17()});if(result2.code!==0)return logForDebugging(`npm view dist-tags failed with code ${result2.code}`),{latest:null,stable:null};try{let parsed=jsonParse(result2.stdout.trim());return{latest:typeof parsed.latest=="string"?parsed.latest:null,stable:typeof parsed.stable=="string"?parsed.stable:null}}catch(error40){return logForDebugging(`Failed to parse dist-tags: ${error40}`),{latest:null,stable:null}}}async function getLatestVersionFromGcs(channel){return getLatestVersion(channel)}async function getGcsDistTags(){let[latest,stable]=await Promise.all([getLatestVersionFromGcs("latest"),getLatestVersionFromGcs("stable")]);return{latest,stable}}async function getVersionHistory(limit){if(process.env.USER_TYPE!=="ant")return[];let result2=await execFileNoThrowWithCwd("npm",["view",APP_NATIVE_NPM_PACKAGE_NAME,"versions","--json","--prefer-online"],{abortSignal:AbortSignal.timeout(3e4),cwd:homedir17()});if(result2.code!==0)return logForDebugging(`npm view versions failed with code ${result2.code}`),result2.stderr&&logForDebugging(`npm stderr: ${result2.stderr.trim()}`),[];try{return jsonParse(result2.stdout.trim()).slice(-limit).reverse()}catch(error40){return logForDebugging(`Failed to parse version history: ${error40}`),[]}}async function installGlobalPackage(specificVersion){if(!await acquireLock())return logError2(new AutoUpdaterError("Another process is currently installing an update")),logEvent("tengu_auto_updater_lock_contention",{pid:process.pid,currentVersion:"11.3.12"}),"in_progress";try{if(await removeClaudeAliasesFromShellConfigs(),!env4.isRunningWithBun()&&env4.isNpmFromWindowsPath())return logError2(new Error("Windows NPM detected in WSL environment")),logEvent("tengu_auto_updater_windows_npm_in_wsl",{currentVersion:"11.3.12"}),console.error(`
2607
+ `),gracefulShutdownSync(1))}catch(error40){logError2(error40)}}async function getMaxVersion(){let config3=await getMaxVersionConfig();return process.env.USER_TYPE==="ant"?config3.ant||void 0:config3.external||void 0}async function getMaxVersionMessage(){let config3=await getMaxVersionConfig();return process.env.USER_TYPE==="ant"?config3.ant_message||void 0:config3.external_message||void 0}async function getMaxVersionConfig(){try{return await getDynamicConfig_BLOCKS_ON_INIT("tengu_max_version_config",{})}catch(error40){return logError2(error40),{}}}function shouldSkipVersion(targetVersion){let minimumVersion=getInitialSettings()?.minimumVersion;if(!minimumVersion)return!1;let shouldSkip=!gte2(targetVersion,minimumVersion);return shouldSkip&&logForDebugging(`Skipping update to ${targetVersion} - below minimumVersion ${minimumVersion}`),shouldSkip}function getLockFilePath(){return join68(getClaudeConfigHomeDir(),".update.lock")}async function acquireLock(){let fs13=getFsImplementation(),lockPath2=getLockFilePath();try{let stats2=await fs13.stat(lockPath2);if(Date.now()-stats2.mtimeMs<LOCK_TIMEOUT_MS)return!1;try{let recheck=await fs13.stat(lockPath2);if(Date.now()-recheck.mtimeMs<LOCK_TIMEOUT_MS)return!1;await fs13.unlink(lockPath2)}catch(err2){if(!isENOENT(err2))return logError2(err2),!1}}catch(err2){if(!isENOENT(err2))return logError2(err2),!1}try{return await writeFile15(lockPath2,`${process.pid}`,{encoding:"utf8",flag:"wx"}),!0}catch(err2){let code=getErrnoCode(err2);if(code==="EEXIST")return!1;if(code==="ENOENT")try{return await fs13.mkdir(getClaudeConfigHomeDir()),await writeFile15(lockPath2,`${process.pid}`,{encoding:"utf8",flag:"wx"}),!0}catch(mkdirErr){return getErrnoCode(mkdirErr)==="EEXIST"||logError2(mkdirErr),!1}return logError2(err2),!1}}async function releaseLock(){let fs13=getFsImplementation(),lockPath2=getLockFilePath();try{await fs13.readFile(lockPath2,{encoding:"utf8"})===`${process.pid}`&&await fs13.unlink(lockPath2)}catch(err2){if(isENOENT(err2))return;logError2(err2)}}async function getInstallationPrefix(){let isBun=env4.isRunningWithBun(),prefixResult=null;return isBun?prefixResult=await execFileNoThrowWithCwd("bun",["pm","bin","-g"],{cwd:homedir17()}):prefixResult=await execFileNoThrowWithCwd("npm",["-g","config","get","prefix"],{cwd:homedir17()}),prefixResult.code!==0?(logError2(new Error(`Failed to check ${isBun?"bun":"npm"} permissions`)),null):prefixResult.stdout.trim()}async function checkGlobalInstallPermissions(){try{let prefix=await getInstallationPrefix();if(!prefix)return{hasPermissions:!1,npmPrefix:null};try{return await access4(prefix,fsConstants3.W_OK),{hasPermissions:!0,npmPrefix:prefix}}catch{return logError2(new AutoUpdaterError("Insufficient permissions for global npm install.")),{hasPermissions:!1,npmPrefix:prefix}}}catch(error40){return logError2(error40),{hasPermissions:!1,npmPrefix:null}}}async function getLatestVersion(channel){let result2=await execFileNoThrowWithCwd("npm",["view",`${APP_NPM_PACKAGE_NAME}@${channel==="stable"?"stable":"latest"}`,"version","--prefer-online"],{abortSignal:AbortSignal.timeout(5e3),cwd:homedir17()});return result2.code!==0?(logForDebugging(`npm view failed with code ${result2.code}`),result2.stderr?logForDebugging(`npm stderr: ${result2.stderr.trim()}`):logForDebugging("npm stderr: (empty)"),result2.stdout&&logForDebugging(`npm stdout: ${result2.stdout.trim()}`),null):result2.stdout.trim()}async function getNpmDistTags(){let result2=await execFileNoThrowWithCwd("npm",["view",APP_NPM_PACKAGE_NAME,"dist-tags","--json","--prefer-online"],{abortSignal:AbortSignal.timeout(5e3),cwd:homedir17()});if(result2.code!==0)return logForDebugging(`npm view dist-tags failed with code ${result2.code}`),{latest:null,stable:null};try{let parsed=jsonParse(result2.stdout.trim());return{latest:typeof parsed.latest=="string"?parsed.latest:null,stable:typeof parsed.stable=="string"?parsed.stable:null}}catch(error40){return logForDebugging(`Failed to parse dist-tags: ${error40}`),{latest:null,stable:null}}}async function getLatestVersionFromGcs(channel){return getLatestVersion(channel)}async function getGcsDistTags(){let[latest,stable]=await Promise.all([getLatestVersionFromGcs("latest"),getLatestVersionFromGcs("stable")]);return{latest,stable}}async function getVersionHistory(limit){if(process.env.USER_TYPE!=="ant")return[];let result2=await execFileNoThrowWithCwd("npm",["view",APP_NATIVE_NPM_PACKAGE_NAME,"versions","--json","--prefer-online"],{abortSignal:AbortSignal.timeout(3e4),cwd:homedir17()});if(result2.code!==0)return logForDebugging(`npm view versions failed with code ${result2.code}`),result2.stderr&&logForDebugging(`npm stderr: ${result2.stderr.trim()}`),[];try{return jsonParse(result2.stdout.trim()).slice(-limit).reverse()}catch(error40){return logForDebugging(`Failed to parse version history: ${error40}`),[]}}async function installGlobalPackage(specificVersion){if(!await acquireLock())return logError2(new AutoUpdaterError("Another process is currently installing an update")),logEvent("tengu_auto_updater_lock_contention",{pid:process.pid,currentVersion:"11.3.13"}),"in_progress";try{if(await removeClaudeAliasesFromShellConfigs(),!env4.isRunningWithBun()&&env4.isNpmFromWindowsPath())return logError2(new Error("Windows NPM detected in WSL environment")),logEvent("tengu_auto_updater_windows_npm_in_wsl",{currentVersion:"11.3.13"}),console.error(`
2608
2608
  Error: Windows NPM detected in WSL
2609
2609
 
2610
2610
  You're running ${APP_UPDATE_COMMAND} in WSL but using the Windows NPM installation from /mnt/c/.
@@ -2622,7 +2622,7 @@ Then open a new pane with: clavue`,tmuxConfSnippet:snippet}),warnings)}async fun
2622
2622
  # --- clavue doctor tmux color fix (${new Date().toISOString().slice(0,10)}) ---
2623
2623
  ${snippet}
2624
2624
  `;return await appendFile13(confPath,block),{ok:!0,message:`Appended truecolor settings to ${confPath} \xB7 run: tmux source-file ${confPath}`}}var init_tmuxColorDiagnostic=__esm({"src/utils/tmuxColorDiagnostic.ts"(){__name(isInsideTmux2,"isInsideTmux");__name(detectTmuxColorReduction,"detectTmuxColorReduction");__name(applyTmuxColorFix,"applyTmuxColorFix")}});var doctorDiagnostic_exports={};__export(doctorDiagnostic_exports,{detectLinuxGlobPatternWarnings:()=>detectLinuxGlobPatternWarnings,getCurrentInstallationType:()=>getCurrentInstallationType,getDoctorDiagnostic:()=>getDoctorDiagnostic,getInvokedBinary:()=>getInvokedBinary});import{readFile as readFile21,realpath as realpath7}from"fs/promises";import{homedir as homedir18}from"os";import{delimiter as delimiter2,join as join69,posix as posix6,win32 as win322}from"path";function getNormalizedPaths(){let invokedPath=process.argv[1]||"",execPath2=process.execPath||process.argv[0]||"";return getPlatform()==="windows"&&(invokedPath=invokedPath.split(win322.sep).join(posix6.sep),execPath2=execPath2.split(win322.sep).join(posix6.sep)),[invokedPath,execPath2]}async function getCurrentInstallationType(){if(process.env.NODE_ENV==="development")return"development";let[invokedPath]=getNormalizedPaths();if(isInBundledMode())return detectHomebrew()||detectWinget()||detectMise()||detectAsdf()||await detectPacman()||await detectDeb()||await detectRpm()||await detectApk()?"package-manager":"native";if(isRunningFromLocalInstallation())return"npm-local";if(["/usr/local/lib/node_modules","/usr/lib/node_modules","/opt/homebrew/lib/node_modules","/opt/homebrew/bin","/usr/local/bin","/.nvm/versions/node/"].some(path36=>invokedPath.includes(path36))||invokedPath.includes("/npm/")||invokedPath.includes("/nvm/"))return"npm-global";let npmConfigResult=await execa("npm config get prefix",{shell:!0,reject:!1}),globalPrefix=npmConfigResult.exitCode===0?npmConfigResult.stdout.trim():null;return globalPrefix&&invokedPath.startsWith(globalPrefix)?"npm-global":"unknown"}async function getInstallationPath(){if(process.env.NODE_ENV==="development")return getCwd();if(isInBundledMode()){try{return await realpath7(process.execPath)}catch{}try{let path36=await which(APP_EXECUTABLE_NAME);if(path36)return path36}catch{}try{return await getFsImplementation().stat(join69(homedir18(),".local/bin",APP_EXECUTABLE_NAME)),join69(homedir18(),".local/bin",APP_EXECUTABLE_NAME)}catch{}return"native"}try{return process.argv[0]||"unknown"}catch{return"unknown"}}function getInvokedBinary(){try{return isInBundledMode()?process.execPath||"unknown":process.argv[1]||"unknown"}catch{return"unknown"}}async function resolvePathConservatively(path36){try{return await realpath7(path36)}catch{return path36}}async function detectStalePathLauncherWarning(){let pathLauncher=null;try{pathLauncher=await which(APP_EXECUTABLE_NAME)}catch{return[]}if(!pathLauncher)return[];let[invokedPath,execPath2]=getNormalizedPaths(),resolvedPathLauncher;try{resolvedPathLauncher=await realpath7(pathLauncher)}catch{return[]}if((await Promise.all([invokedPath,execPath2].filter(Boolean).map(resolvePathConservatively))).includes(resolvedPathLauncher))return[];let pathLauncherVersion=await execFileNoThrow(pathLauncher,["--version"],{timeout:5e3,useCwd:!1});if(pathLauncherVersion.code!==0)return[];let reportedVersion=`${pathLauncherVersion.stdout}
2625
- ${pathLauncherVersion.stderr}`.trim().match(/\d+\.\d+\.\d+(?:[-+][^\s)]+)?/)?.[0];if(!reportedVersion||!lt2(reportedVersion,APP_UPDATE_VERSION))return[];let uninstallCmd=getKnownReleasePackageNames().map(packageName=>`npm -g uninstall ${packageName}`).join(" && ");return[{issue:`PATH launcher is stale: ${pathLauncher} reports ${reportedVersion} but this runtime is ${APP_UPDATE_VERSION}`,fix:`Remove stale npm/global launchers with: ${uninstallCmd}. If you use the native installer, run: ${APP_EXECUTABLE_NAME} install. To reinstall the npm launcher, run: npm i -g ${APP_NPM_PACKAGE_NAME}.`}]}async function detectMultipleInstallations(){let fs13=getFsImplementation(),installations=[],localPath=join69(homedir18(),".clavue","local",APP_EXECUTABLE_NAME);await localInstallationExists()&&installations.push({type:"npm-local",path:localPath});let packagesToCheck=getKnownReleasePackageNames(),npmResult=await execFileNoThrow("npm",["-g","config","get","prefix"]);if(npmResult.code===0&&npmResult.stdout){let npmPrefix=npmResult.stdout.trim(),isWindows2=getPlatform()==="windows",globalBinPath=isWindows2?join69(npmPrefix,APP_EXECUTABLE_NAME):join69(npmPrefix,"bin",APP_EXECUTABLE_NAME),globalBinExists=!1;try{await fs13.stat(globalBinPath),globalBinExists=!0}catch{}if(globalBinExists){let isCurrentHomebrewInstallation=!1;try{(await realpath7(globalBinPath)).includes("/Caskroom/")&&(isCurrentHomebrewInstallation=detectHomebrew())}catch{}isCurrentHomebrewInstallation||installations.push({type:"npm-global",path:globalBinPath})}else for(let packageName of packagesToCheck){let globalPackagePath=isWindows2?join69(npmPrefix,"node_modules",packageName):join69(npmPrefix,"lib","node_modules",packageName);try{await fs13.stat(globalPackagePath),installations.push({type:"npm-global-orphan",path:globalPackagePath})}catch{}}}let nativeBinPath=join69(homedir18(),".local","bin",APP_EXECUTABLE_NAME);try{await fs13.stat(nativeBinPath),installations.push({type:"native",path:nativeBinPath})}catch{}if(getGlobalConfig().installMethod==="native"){let nativeDataPath=join69(homedir18(),".local","share","claude");try{await fs13.stat(nativeDataPath),installations.some(i3=>i3.type==="native")||installations.push({type:"native",path:nativeDataPath})}catch{}}return installations}async function detectConfigurationIssues(type){let warnings=[];try{let raw=await readFile21(join69(getManagedFilePath(),"managed-settings.json"),"utf-8"),parsed=jsonParse(raw),field=parsed&&typeof parsed=="object"?parsed.strictPluginOnlyCustomization:void 0;if(field!==void 0&&typeof field!="boolean")if(!Array.isArray(field))warnings.push({issue:`managed-settings.json: strictPluginOnlyCustomization has an invalid value (expected true or an array, got ${typeof field})`,fix:`The field is silently ignored (schema .catch rescues it). Set it to true, or an array of: ${CUSTOMIZATION_SURFACES.join(", ")}.`});else{let unknown2=field.filter(x3=>typeof x3=="string"&&!CUSTOMIZATION_SURFACES.includes(x3));unknown2.length>0&&warnings.push({issue:`managed-settings.json: strictPluginOnlyCustomization has ${unknown2.length} value(s) this client doesn't recognize: ${unknown2.map(String).join(", ")}`,fix:`These are silently ignored (forwards-compat). Known surfaces for this version: ${CUSTOMIZATION_SURFACES.join(", ")}. Either remove them, or this client is older than the managed-settings intended.`})}}catch{}let config3=getGlobalConfig();if(type==="development")return warnings;if(type==="native"){let pathDirectories=(process.env.PATH||"").split(delimiter2),homeDir=homedir18(),localBinPath=join69(homeDir,".local","bin"),normalizedLocalBinPath=localBinPath;if(getPlatform()==="windows"&&(normalizedLocalBinPath=localBinPath.split(win322.sep).join(posix6.sep)),!pathDirectories.some(dir=>{let normalizedDir=dir;getPlatform()==="windows"&&(normalizedDir=dir.split(win322.sep).join(posix6.sep));let trimmedDir=normalizedDir.replace(/\/+$/,""),trimmedRawDir=dir.replace(/[/\\]+$/,"");return trimmedDir===normalizedLocalBinPath||trimmedRawDir==="~/.local/bin"||trimmedRawDir==="$HOME/.local/bin"}))if(getPlatform()==="windows"){let windowsLocalBinPath=localBinPath.split(posix6.sep).join(win322.sep);warnings.push({issue:`Native installation exists but ${windowsLocalBinPath} is not in your PATH`,fix:"Add it by opening: System Properties \u2192 Environment Variables \u2192 Edit User PATH \u2192 New \u2192 Add the path above. Then restart your terminal."})}else{let shellType=getShellType(),configFile=getShellConfigPaths()[shellType],displayPath=configFile?configFile.replace(homedir18(),"~"):"your shell config file";warnings.push({issue:"Native installation exists but ~/.local/bin is not in your PATH",fix:`Run: echo 'export PATH="$HOME/.local/bin:$PATH"' >> ${displayPath} then open a new terminal or run: source ${displayPath}`})}}isEnvTruthy2(process.env.DISABLE_INSTALLATION_CHECKS)||(type==="npm-local"&&config3.installMethod!=="local"&&warnings.push({issue:`Running from local installation but config install method is '${config3.installMethod}'`,fix:"Consider using native installation: clavue install"}),type==="native"&&config3.installMethod!=="native"&&warnings.push({issue:`Running native installation but config install method is '${config3.installMethod}'`,fix:"Run clavue install to update configuration"})),type==="npm-global"&&await localInstallationExists()&&warnings.push({issue:"Local installation exists but not being used",fix:"Consider using native installation: clavue install"});let existingAlias=await findClaudeAlias(),validAlias=await findValidClaudeAlias();return type==="npm-local"&&!await which(APP_EXECUTABLE_NAME)&&!validAlias&&(existingAlias?warnings.push({issue:"Local installation not accessible",fix:`Alias exists but points to invalid target: ${existingAlias}. Update alias: alias ${APP_EXECUTABLE_NAME}="~/.clavue/local/clavue"`}):warnings.push({issue:"Local installation not accessible",fix:`Create alias: alias ${APP_EXECUTABLE_NAME}="~/.clavue/local/clavue"`})),warnings}function detectLinuxGlobPatternWarnings(){if(getPlatform()!=="linux")return[];let warnings=[],globPatterns=SandboxManager.getLinuxGlobPatternWarnings();if(globPatterns.length>0){let displayPatterns=globPatterns.slice(0,3).join(", "),remaining=globPatterns.length-3,patternList=remaining>0?`${displayPatterns} (${remaining} more)`:displayPatterns;warnings.push({issue:"Glob patterns in sandbox permission rules are not fully supported on Linux",fix:`Found ${globPatterns.length} pattern(s): ${patternList}. On Linux, glob patterns in Edit/Read rules will be ignored.`})}return warnings}async function getDoctorDiagnostic(){let installationType=await getCurrentInstallationType(),version3=typeof MACRO<"u"?"11.3.12":"unknown",installationPath=await getInstallationPath(),invokedBinary=getInvokedBinary(),multipleInstallations=await detectMultipleInstallations(),warnings=await detectConfigurationIssues(installationType);warnings.push(...await detectStalePathLauncherWarning()),warnings.push(...detectLinuxGlobPatternWarnings());try{let{detectTmuxColorReduction:detectTmuxColorReduction2}=await Promise.resolve().then(()=>(init_tmuxColorDiagnostic(),tmuxColorDiagnostic_exports));for(let w2 of detectTmuxColorReduction2())warnings.push({issue:w2.issue,fix:w2.fix})}catch{}if(installationType==="native"){let npmInstalls=multipleInstallations.filter(i3=>i3.type==="npm-global"||i3.type==="npm-global-orphan"||i3.type==="npm-local"),isWindows2=getPlatform()==="windows";for(let install2 of npmInstalls)if(install2.type==="npm-global"){let uninstallCmd=getKnownReleasePackageNames().map(packageName=>`npm -g uninstall ${packageName}`).join(" && ");warnings.push({issue:`Leftover npm global installation at ${install2.path}`,fix:`Run: ${uninstallCmd}`})}else install2.type==="npm-global-orphan"?warnings.push({issue:`Orphaned npm global package at ${install2.path}`,fix:isWindows2?`Run: rmdir /s /q "${install2.path}"`:`Run: rm -rf ${install2.path}`}):install2.type==="npm-local"&&warnings.push({issue:`Leftover npm local installation at ${install2.path}`,fix:isWindows2?`Run: rmdir /s /q "${install2.path}"`:`Run: rm -rf ${install2.path}`})}let configInstallMethod=getGlobalConfig().installMethod||"not set",hasUpdatePermissions=null;installationType==="npm-global"&&(hasUpdatePermissions=(await checkGlobalInstallPermissions()).hasPermissions,!hasUpdatePermissions&&!getAutoUpdaterDisabledReason()&&warnings.push({issue:"Insufficient permissions for auto-updates",fix:"Do one of: (1) Re-install node without sudo, or (2) Use `clavue install` for native installation"}));let ripgrepStatusRaw=getRipgrepStatus(),ripgrepStatus2={working:ripgrepStatusRaw.working??!0,mode:ripgrepStatusRaw.mode,systemPath:ripgrepStatusRaw.mode==="system"?ripgrepStatusRaw.path:null},packageManager=installationType==="package-manager"?await getPackageManager():void 0;return{installationType,version:version3,installationPath,invokedBinary,configInstallMethod,autoUpdates:(()=>{let reason=getAutoUpdaterDisabledReason();return reason?`disabled (${formatAutoUpdaterDisabledReason(reason)})`:"enabled"})(),hasUpdatePermissions,multipleInstallations,warnings,packageManager,ripgrepStatus:ripgrepStatus2}}var init_doctorDiagnostic=__esm({"src/utils/doctorDiagnostic.ts"(){init_execa();init_autoUpdater();init_bundledMode();init_config11();init_cwd2();init_envUtils();init_execFileNoThrow();init_fsOperations();init_localInstaller();init_semver();init_packageManagers();init_platform2();init_ripgrep();init_sandbox_adapter();init_managedPath();init_types5();init_shellConfig();init_slowOperations();init_which();init_update2();__name(getNormalizedPaths,"getNormalizedPaths");__name(getCurrentInstallationType,"getCurrentInstallationType");__name(getInstallationPath,"getInstallationPath");__name(getInvokedBinary,"getInvokedBinary");__name(resolvePathConservatively,"resolvePathConservatively");__name(detectStalePathLauncherWarning,"detectStalePathLauncherWarning");__name(detectMultipleInstallations,"detectMultipleInstallations");__name(detectConfigurationIssues,"detectConfigurationIssues");__name(detectLinuxGlobPatternWarnings,"detectLinuxGlobPatternWarnings");__name(getDoctorDiagnostic,"getDoctorDiagnostic")}});function isStartupAutoIDEInstallError(status2){return!!(status2?.source==="startup-auto"&&status2.error)}var init_ideInstallationStatus=__esm({"src/utils/ideInstallationStatus.ts"(){__name(isStartupAutoIDEInstallError,"isStartupAutoIDEInstallError")}});import{homedir as osHomedir2}from"os";import{join as join70}from"path";function resolveOptions(options){return{env:options?.env??process.env,home:options?.homedir??process.env.HOME??osHomedir2()}}function getXDGStateHome(options){let{env:env5,home}=resolveOptions(options);return env5.XDG_STATE_HOME??join70(home,".local","state")}function getXDGCacheHome(options){let{env:env5,home}=resolveOptions(options);return env5.XDG_CACHE_HOME??join70(home,".cache")}function getXDGDataHome(options){let{env:env5,home}=resolveOptions(options);return env5.XDG_DATA_HOME??join70(home,".local","share")}function getUserBinDir(options){let{home}=resolveOptions(options);return join70(home,".local","bin")}var init_xdg=__esm({"src/utils/xdg.ts"(){__name(resolveOptions,"resolveOptions");__name(getXDGStateHome,"getXDGStateHome");__name(getXDGCacheHome,"getXDGCacheHome");__name(getXDGDataHome,"getXDGDataHome");__name(getUserBinDir,"getUserBinDir")}});import{createHash as createHash17}from"crypto";import{chmod as chmod6,writeFile as writeFile16}from"fs/promises";import{join as join71}from"path";async function getLatestVersionFromArtifactory(tag2="latest"){let startTime=Date.now(),{stdout,code,stderr}=await execFileNoThrowWithCwd("npm",["view",`@anthropic-ai/claude-code@${tag2}`,"version","--prefer-online","--registry",ARTIFACTORY_REGISTRY_URL],{timeout:3e4,preserveOutputOnError:!0}),latencyMs=Date.now()-startTime;if(code!==0){logEvent("tengu_version_check_failure",{latency_ms:latencyMs,source_npm:!0,exit_code:code});let error40=new Error(`npm view failed with code ${code}: ${stderr}`);throw logError2(error40),error40}return logEvent("tengu_version_check_success",{latency_ms:latencyMs,source_npm:!0}),logForDebugging(`npm view @anthropic-ai/claude-code@${tag2} version: ${stdout}`),stdout.trim()}async function getLatestVersionFromBinaryRepo(channel="latest",baseUrl,authConfig){let startTime=Date.now();try{let response=await axios_default.get(`${baseUrl}/${channel}`,{timeout:3e4,responseType:"text",...authConfig}),latencyMs=Date.now()-startTime;return logEvent("tengu_version_check_success",{latency_ms:latencyMs}),response.data.trim()}catch(error40){let latencyMs=Date.now()-startTime,errorMessage3=error40 instanceof Error?error40.message:String(error40),httpStatus;axios_default.isAxiosError(error40)&&error40.response&&(httpStatus=error40.response.status),logEvent("tengu_version_check_failure",{latency_ms:latencyMs,http_status:httpStatus,is_timeout:errorMessage3.includes("timeout")});let fetchError=new Error(`Failed to fetch version from ${baseUrl}/${channel}: ${errorMessage3}`);throw logError2(fetchError),fetchError}}async function getLatestVersion2(channelOrVersion){if(/^v?\d+\.\d+\.\d+(-\S+)?$/.test(channelOrVersion)){let normalized=channelOrVersion.startsWith("v")?channelOrVersion.slice(1):channelOrVersion;if(/^99\.99\./.test(normalized))throw new Error(`Version ${normalized} is not available for installation. Use 'stable' or 'latest'.`);return normalized}let channel=channelOrVersion;if(channel!=="stable"&&channel!=="latest")throw new Error(`Invalid channel: ${channelOrVersion}. Use 'stable' or 'latest'`);return process.env.USER_TYPE==="ant"?getLatestVersionFromArtifactory(channel==="stable"?"stable":"latest"):getLatestVersionFromBinaryRepo(channel,GCS_BUCKET_URL)}async function downloadVersionFromArtifactory(version3,stagingPath){let fs13=getFsImplementation();await fs13.rm(stagingPath,{recursive:!0,force:!0});let platform7=getPlatform2(),platformPackageName=`@anthropic-ai/claude-code-${platform7}`;logForDebugging(`Fetching integrity hash for ${platformPackageName}@${version3}`);let{stdout:integrityOutput,code,stderr}=await execFileNoThrowWithCwd("npm",["view",`${platformPackageName}@${version3}`,"dist.integrity","--registry",ARTIFACTORY_REGISTRY_URL],{timeout:3e4,preserveOutputOnError:!0});if(code!==0)throw new Error(`npm view integrity failed with code ${code}: ${stderr}`);let integrity=integrityOutput.trim();if(!integrity)throw new Error(`Failed to fetch integrity hash for ${platformPackageName}@${version3}`);logForDebugging(`Got integrity hash for ${platform7}: ${integrity}`),await fs13.mkdir(stagingPath);let packageJson={name:"clavue-native-installer",version:"0.0.1",dependencies:{clavue:version3}},packageLock={name:"clavue-native-installer",version:"0.0.1",lockfileVersion:3,requires:!0,packages:{"":{name:"clavue-native-installer",version:"0.0.1",dependencies:{clavue:version3}},"node_modules/clavue":{version:version3,optionalDependencies:{[platformPackageName]:version3}},[`node_modules/${platformPackageName}`]:{version:version3,integrity}}};writeFileSync3(join71(stagingPath,"package.json"),jsonStringify(packageJson,null,2),{encoding:"utf8",flush:!0}),writeFileSync3(join71(stagingPath,"package-lock.json"),jsonStringify(packageLock,null,2),{encoding:"utf8",flush:!0});let result2=await execFileNoThrowWithCwd("npm",["ci","--prefer-online","--registry",ARTIFACTORY_REGISTRY_URL],{timeout:6e4,preserveOutputOnError:!0,cwd:stagingPath});if(result2.code!==0)throw new Error(`npm ci failed with code ${result2.code}: ${result2.stderr}`);logForDebugging(`Successfully downloaded and verified @anthropic-ai/claude-code@${version3}`)}function getManifestBinaryName(platformInfo,platform7){return typeof platformInfo.binary=="string"&&platformInfo.binary?platformInfo.binary:getBinaryName(platform7)}function getStallTimeoutMs(){return Number(process.env.CLAUDE_CODE_STALL_TIMEOUT_MS_FOR_TESTING)||DEFAULT_STALL_TIMEOUT_MS}async function downloadAndVerifyBinary(binaryUrl,expectedChecksum,binaryPath,requestConfig={}){let lastError;for(let attempt2=1;attempt2<=MAX_DOWNLOAD_RETRIES;attempt2++){let controller=new AbortController,stallTimer,clearStallTimer=__name(()=>{stallTimer&&(clearTimeout(stallTimer),stallTimer=void 0)},"clearStallTimer"),resetStallTimer=__name(()=>{clearStallTimer(),stallTimer=setTimeout(c4=>c4.abort(),getStallTimeoutMs(),controller)},"resetStallTimer");try{resetStallTimer();let response=await axios_default.get(binaryUrl,{timeout:5*6e4,responseType:"arraybuffer",signal:controller.signal,onDownloadProgress:__name(()=>{resetStallTimer()},"onDownloadProgress"),...requestConfig});clearStallTimer();let hash2=createHash17("sha256");hash2.update(response.data);let actualChecksum=hash2.digest("hex");if(actualChecksum!==expectedChecksum)throw new Error(`Checksum mismatch: expected ${expectedChecksum}, got ${actualChecksum}`);await writeFile16(binaryPath,Buffer.from(response.data)),await chmod6(binaryPath,493);return}catch(error40){clearStallTimer();let isStallTimeout=axios_default.isCancel(error40);if(isStallTimeout?lastError=new StallTimeoutError:lastError=toError(error40),isStallTimeout&&attempt2<MAX_DOWNLOAD_RETRIES){logForDebugging(`Download stalled on attempt ${attempt2}/${MAX_DOWNLOAD_RETRIES}, retrying...`),await sleep2(1e3);continue}throw lastError}}throw lastError??new Error("Download failed after all retries")}async function downloadVersionFromBinaryRepo(version3,stagingPath,baseUrl,authConfig){let fs13=getFsImplementation();await fs13.rm(stagingPath,{recursive:!0,force:!0});let platform7=getPlatform2(),startTime=Date.now();logEvent("tengu_binary_download_attempt",{});let manifest;try{manifest=(await axios_default.get(`${baseUrl}/${version3}/manifest.json`,{timeout:1e4,responseType:"json",...authConfig})).data}catch(error40){let latencyMs=Date.now()-startTime,errorMessage3=error40 instanceof Error?error40.message:String(error40),httpStatus;throw axios_default.isAxiosError(error40)&&error40.response&&(httpStatus=error40.response.status),logEvent("tengu_binary_manifest_fetch_failure",{latency_ms:latencyMs,http_status:httpStatus,is_timeout:errorMessage3.includes("timeout")}),logError2(new Error(`Failed to fetch manifest from ${baseUrl}/${version3}/manifest.json: ${errorMessage3}`)),error40}let platformInfo=manifest.platforms[platform7];if(!platformInfo)throw logEvent("tengu_binary_platform_not_found",{}),new Error(`Platform ${platform7} not found in manifest for version ${version3}`);let expectedChecksum=platformInfo.checksum,artifactName=getManifestBinaryName(platformInfo,platform7),binaryName=getBinaryName(platform7),binaryUrl=`${baseUrl}/${version3}/${platform7}/${artifactName}`;await fs13.mkdir(stagingPath);let binaryPath=join71(stagingPath,binaryName);try{await downloadAndVerifyBinary(binaryUrl,expectedChecksum,binaryPath,authConfig||{});let latencyMs=Date.now()-startTime;logEvent("tengu_binary_download_success",{latency_ms:latencyMs})}catch(error40){let latencyMs=Date.now()-startTime,errorMessage3=error40 instanceof Error?error40.message:String(error40),httpStatus;throw axios_default.isAxiosError(error40)&&error40.response&&(httpStatus=error40.response.status),logEvent("tengu_binary_download_failure",{latency_ms:latencyMs,http_status:httpStatus,is_timeout:errorMessage3.includes("timeout"),is_checksum_mismatch:errorMessage3.includes("Checksum mismatch")}),logError2(new Error(`Failed to download binary from ${binaryUrl}: ${errorMessage3}`)),error40}}async function downloadVersion(version3,stagingPath){return process.env.USER_TYPE==="ant"?(await downloadVersionFromArtifactory(version3,stagingPath),"npm"):(await downloadVersionFromBinaryRepo(version3,stagingPath,GCS_BUCKET_URL),"binary")}var GCS_BUCKET_URL,ARTIFACTORY_REGISTRY_URL,DEFAULT_STALL_TIMEOUT_MS,MAX_DOWNLOAD_RETRIES,StallTimeoutError,init_download=__esm({"src/utils/nativeInstaller/download.ts"(){init_axios2();init_analytics();init_debug();init_errors2();init_execFileNoThrow();init_fsOperations();init_log3();init_sleep2();init_slowOperations();init_installer();GCS_BUCKET_URL="https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases",ARTIFACTORY_REGISTRY_URL="https://artifactory.infra.ant.dev/artifactory/api/npm/npm-all/";__name(getLatestVersionFromArtifactory,"getLatestVersionFromArtifactory");__name(getLatestVersionFromBinaryRepo,"getLatestVersionFromBinaryRepo");__name(getLatestVersion2,"getLatestVersion");__name(downloadVersionFromArtifactory,"downloadVersionFromArtifactory");DEFAULT_STALL_TIMEOUT_MS=6e4,MAX_DOWNLOAD_RETRIES=3;__name(getManifestBinaryName,"getManifestBinaryName");__name(getStallTimeoutMs,"getStallTimeoutMs");StallTimeoutError=class extends Error{static{__name(this,"StallTimeoutError")}constructor(){super("Download stalled: no data received for 60 seconds"),this.name="StallTimeoutError"}};__name(downloadAndVerifyBinary,"downloadAndVerifyBinary");__name(downloadVersionFromBinaryRepo,"downloadVersionFromBinaryRepo");__name(downloadVersion,"downloadVersion")}});import{basename as basename17,join as join72}from"path";function isPidBasedLockingEnabled(){let envVar=process.env.ENABLE_PID_BASED_VERSION_LOCKING;return isEnvTruthy2(envVar)?!0:isEnvDefinedFalsy(envVar)?!1:getFeatureValue_CACHED_MAY_BE_STALE("tengu_pid_based_version_locking",!1)}function isProcessRunning3(pid){if(pid<=1)return!1;try{return process.kill(pid,0),!0}catch{return!1}}function isClaudeProcess(pid,expectedExecPath){if(!isProcessRunning3(pid))return!1;if(pid===process.pid)return!0;try{let command8=getProcessCommand(pid);if(!command8)return!0;let normalizedCommand=command8.toLowerCase(),normalizedExecPath=expectedExecPath.toLowerCase();return normalizedCommand.includes("claude")||normalizedCommand.includes(normalizedExecPath)}catch{return!0}}function readLockContent(lockFilePath){let fs13=getFsImplementation();try{let content=fs13.readFileSync(lockFilePath,{encoding:"utf8"});if(!content||content.trim()==="")return null;let parsed=jsonParse(content);return typeof parsed.pid!="number"||!parsed.version||!parsed.execPath?null:parsed}catch{return null}}function isLockActive(lockFilePath){let content=readLockContent(lockFilePath);if(!content)return!1;let{pid,execPath:execPath2}=content;if(!isProcessRunning3(pid))return!1;if(!isClaudeProcess(pid,execPath2))return logForDebugging(`Lock PID ${pid} is running but does not appear to be Clavue - treating as stale`),!1;let fs13=getFsImplementation();try{let stats2=fs13.statSync(lockFilePath);if(Date.now()-stats2.mtimeMs>FALLBACK_STALE_MS&&!isProcessRunning3(pid))return!1}catch{}return!0}function writeLockFile(lockFilePath,content){let fs13=getFsImplementation(),tempPath=`${lockFilePath}.tmp.${process.pid}.${Date.now()}`;try{writeFileSync3(tempPath,jsonStringify(content,null,2),{encoding:"utf8",flush:!0}),fs13.renameSync(tempPath,lockFilePath)}catch(error40){try{fs13.unlinkSync(tempPath)}catch{}throw error40}}async function tryAcquireLock(versionPath,lockFilePath){let fs13=getFsImplementation(),versionName=basename17(versionPath);if(isLockActive(lockFilePath)){let existingContent=readLockContent(lockFilePath);return logForDebugging(`Cannot acquire lock for ${versionName} - held by PID ${existingContent?.pid}`),null}let lockContent={pid:process.pid,version:versionName,execPath:process.execPath,acquiredAt:Date.now()};try{return writeLockFile(lockFilePath,lockContent),readLockContent(lockFilePath)?.pid!==process.pid?null:(logForDebugging(`Acquired PID lock for ${versionName} (PID ${process.pid})`),()=>{try{readLockContent(lockFilePath)?.pid===process.pid&&(fs13.unlinkSync(lockFilePath),logForDebugging(`Released PID lock for ${versionName}`))}catch(error40){logForDebugging(`Failed to release lock for ${versionName}: ${error40}`)}})}catch(error40){return logForDebugging(`Failed to acquire lock for ${versionName}: ${error40}`),null}}async function acquireProcessLifetimeLock(versionPath,lockFilePath){let release2=await tryAcquireLock(versionPath,lockFilePath);if(!release2)return!1;let cleanup=__name(()=>{try{release2()}catch{}},"cleanup");return process.on("exit",cleanup),process.on("SIGINT",cleanup),process.on("SIGTERM",cleanup),!0}async function withLock(versionPath,lockFilePath,callback){let release2=await tryAcquireLock(versionPath,lockFilePath);if(!release2)return!1;try{return await callback(),!0}finally{release2()}}function cleanupStaleLocks(locksDir){let fs13=getFsImplementation(),cleanedCount=0;try{let lockEntries=fs13.readdirStringSync(locksDir).filter(f3=>f3.endsWith(".lock"));for(let lockEntry of lockEntries){let lockFilePath=join72(locksDir,lockEntry);try{fs13.lstatSync(lockFilePath).isDirectory()?(fs13.rmSync(lockFilePath,{recursive:!0,force:!0}),cleanedCount++,logForDebugging(`Cleaned up legacy directory lock: ${lockEntry}`)):isLockActive(lockFilePath)||(fs13.unlinkSync(lockFilePath),cleanedCount++,logForDebugging(`Cleaned up stale lock: ${lockEntry}`))}catch{}}}catch(error40){if(isENOENT(error40))return 0;logError2(toError(error40))}return cleanedCount}var FALLBACK_STALE_MS,init_pidLock=__esm({"src/utils/nativeInstaller/pidLock.ts"(){init_growthbook();init_debug();init_envUtils();init_errors2();init_fsOperations();init_genericProcessUtils();init_log3();init_slowOperations();__name(isPidBasedLockingEnabled,"isPidBasedLockingEnabled");FALLBACK_STALE_MS=7200*1e3;__name(isProcessRunning3,"isProcessRunning");__name(isClaudeProcess,"isClaudeProcess");__name(readLockContent,"readLockContent");__name(isLockActive,"isLockActive");__name(writeLockFile,"writeLockFile");__name(tryAcquireLock,"tryAcquireLock");__name(acquireProcessLifetimeLock,"acquireProcessLifetimeLock");__name(withLock,"withLock");__name(cleanupStaleLocks,"cleanupStaleLocks")}});import{constants as fsConstants4}from"fs";import{access as access5,chmod as chmod7,copyFile as copyFile7,lstat as lstat3,mkdir as mkdir15,readdir as readdir11,readlink,realpath as realpath8,rename,rm as rm4,rmdir,stat as stat24,symlink as symlink4,unlink as unlink9,writeFile as writeFile17}from"fs/promises";import{homedir as homedir19}from"os";import{basename as basename18,delimiter as delimiter3,dirname as dirname31,join as join73,resolve as resolve29}from"path";function getPlatform2(){let os5=env4.platform,arch3=process.arch==="x64"?"x64":process.arch==="arm64"?"arm64":null;if(!arch3){let error40=new Error(`Unsupported architecture: ${process.arch}`);throw logForDebugging(`Native installer does not support architecture: ${process.arch}`,{level:"error"}),error40}return os5==="linux"&&envDynamic.isMuslEnvironment()?`linux-${arch3}-musl`:`${os5}-${arch3}`}function getBinaryName(platform7){return platform7.startsWith("win32")?`${APP_EXECUTABLE_NAME}.exe`:APP_EXECUTABLE_NAME}function getBaseDirectories(){let platform7=getPlatform2(),executableName=getBinaryName(platform7);return{versions:join73(getXDGDataHome(),"clavue","versions"),staging:join73(getXDGCacheHome(),"clavue","staging"),locks:join73(getXDGStateHome(),"clavue","locks"),executable:join73(getUserBinDir(),executableName)}}async function isPossibleClaudeBinary(filePath){try{let stats2=await stat24(filePath);return!stats2.isFile()||stats2.size===0?!1:(await access5(filePath,fsConstants4.X_OK),!0)}catch{return!1}}async function getVersionPaths(version3){let dirs=getBaseDirectories(),dirsToCreate=[dirs.versions,dirs.staging,dirs.locks];await Promise.all(dirsToCreate.map(dir=>mkdir15(dir,{recursive:!0})));let executableParentDir=dirname31(dirs.executable);await mkdir15(executableParentDir,{recursive:!0});let installPath=join73(dirs.versions,version3);try{await stat24(installPath)}catch{await writeFile17(installPath,"",{encoding:"utf8"})}return{stagingPath:join73(dirs.staging,version3),installPath}}async function tryWithVersionLock(versionFilePath,callback,retries=0){let dirs=getBaseDirectories(),lockfilePath=getLockFilePathFromVersionPath(dirs,versionFilePath);if(await mkdir15(dirs.locks,{recursive:!0}),isPidBasedLockingEnabled()){let attempts=0,maxAttempts=retries+1,minTimeout=retries>0?1e3:100,maxTimeout=retries>0?5e3:500;for(;attempts<maxAttempts;){if(await withLock(versionFilePath,lockfilePath,async()=>{try{await callback()}catch(error40){throw logError2(error40),error40}}))return logEvent("tengu_version_lock_acquired",{is_pid_based:!0,is_lifetime_lock:!1,attempts:attempts+1}),!0;if(attempts++,attempts<maxAttempts){let timeout=Math.min(minTimeout*Math.pow(2,attempts-1),maxTimeout);await sleep2(timeout)}}return logEvent("tengu_version_lock_failed",{is_pid_based:!0,is_lifetime_lock:!1,attempts:maxAttempts}),logLockAcquisitionError(versionFilePath,new Error("Lock held by another process")),!1}let release2=null;try{try{release2=await lock(versionFilePath,{stale:LOCK_STALE_MS,retries:{retries,minTimeout:retries>0?1e3:100,maxTimeout:retries>0?5e3:500},lockfilePath,onCompromised:__name(err2=>{logForDebugging(`NON-FATAL: Version lock was compromised during operation: ${err2.message}`,{level:"info"})},"onCompromised")})}catch(lockError){return logEvent("tengu_version_lock_failed",{is_pid_based:!1,is_lifetime_lock:!1}),logLockAcquisitionError(versionFilePath,lockError),!1}try{return await callback(),logEvent("tengu_version_lock_acquired",{is_pid_based:!1,is_lifetime_lock:!1}),!0}catch(error40){throw logError2(error40),error40}}finally{release2&&await release2()}}async function atomicMoveToInstallPath(stagedBinaryPath,installPath){await mkdir15(dirname31(installPath),{recursive:!0});let tempInstallPath=`${installPath}.tmp.${process.pid}.${Date.now()}`;try{await copyFile7(stagedBinaryPath,tempInstallPath),await chmod7(tempInstallPath,493),await rename(tempInstallPath,installPath),logForDebugging(`Atomically installed binary to ${installPath}`)}catch(error40){try{await unlink9(tempInstallPath)}catch{}throw error40}}async function installVersionFromPackage(stagingPath,installPath){try{let nodeModulesDir=join73(stagingPath,"node_modules","@anthropic-ai"),nativePackage=(await readdir11(nodeModulesDir)).find(entry=>entry.startsWith("claude-cli-native-"));if(!nativePackage)throw logEvent("tengu_native_install_package_failure",{stage_find_package:!0,error_package_not_found:!0}),new Error("Could not find platform-specific native package");let stagedBinaryPath=join73(nodeModulesDir,nativePackage,"cli");try{await stat24(stagedBinaryPath)}catch{throw logEvent("tengu_native_install_package_failure",{stage_binary_exists:!0,error_binary_not_found:!0}),new Error("Native binary not found in staged package")}await atomicMoveToInstallPath(stagedBinaryPath,installPath),await rm4(stagingPath,{recursive:!0,force:!0}),logEvent("tengu_native_install_package_success",{})}catch(error40){let msg=errorMessage(error40);throw!msg.includes("Could not find platform-specific")&&!msg.includes("Native binary not found")&&logEvent("tengu_native_install_package_failure",{stage_atomic_move:!0,error_move_failed:!0}),logError2(toError(error40)),error40}}async function installVersionFromBinary(stagingPath,installPath){try{let platform7=getPlatform2(),binaryName=getBinaryName(platform7),stagedBinaryPath=join73(stagingPath,binaryName);try{await stat24(stagedBinaryPath)}catch{throw logEvent("tengu_native_install_binary_failure",{stage_binary_exists:!0,error_binary_not_found:!0}),new Error("Staged binary not found")}await atomicMoveToInstallPath(stagedBinaryPath,installPath),await rm4(stagingPath,{recursive:!0,force:!0}),logEvent("tengu_native_install_binary_success",{})}catch(error40){throw errorMessage(error40).includes("Staged binary not found")||logEvent("tengu_native_install_binary_failure",{stage_atomic_move:!0,error_move_failed:!0}),logError2(toError(error40)),error40}}async function installVersion(stagingPath,installPath,downloadType){downloadType==="npm"?await installVersionFromPackage(stagingPath,installPath):await installVersionFromBinary(stagingPath,installPath)}async function performVersionUpdate(version3,forceReinstall){let{stagingPath:baseStagingPath,installPath}=await getVersionPaths(version3),{executable:executablePath}=getBaseDirectories(),stagingPath=isEnvTruthy2(process.env.ENABLE_LOCKLESS_UPDATES)?`${baseStagingPath}.${process.pid}.${Date.now()}`:baseStagingPath,needsInstall=!await versionIsAvailable(version3)||forceReinstall;if(needsInstall){logForDebugging(forceReinstall?`Force reinstalling native installer version ${version3}`:`Downloading native installer version ${version3}`);let downloadType=await downloadVersion(version3,stagingPath);await installVersion(stagingPath,installPath,downloadType)}else logForDebugging(`Version ${version3} already installed, updating symlink`);if(await removeDirectoryIfEmpty(executablePath),await updateSymlink(executablePath,installPath),!await isPossibleClaudeBinary(executablePath)){let installPathExists=!1;try{await stat24(installPath),installPathExists=!0}catch{}throw new Error(`Failed to create executable at ${executablePath}. Source file exists: ${installPathExists}. Check write permissions to ${executablePath}.`)}return needsInstall}async function versionIsAvailable(version3){let{installPath}=await getVersionPaths(version3);return isPossibleClaudeBinary(installPath)}async function updateLatest(channelOrVersion,forceReinstall=!1){let startTime=Date.now(),version3=await getLatestVersion2(channelOrVersion),{executable:executablePath}=getBaseDirectories();if(logForDebugging(`Checking for native installer update to version ${version3}`),!forceReinstall){let maxVersion=await getMaxVersion();if(maxVersion&&gt2(version3,maxVersion)){if(logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version3} to ${maxVersion}`),gte2("2.1.88",maxVersion))return logForDebugging(`Native installer: current version 2.1.88 is already at or above maxVersion ${maxVersion}, skipping update`),logEvent("tengu_native_update_skipped_max_version",{latency_ms:Date.now()-startTime,max_version:maxVersion,available_version:version3}),{success:!0,latestVersion:version3};version3=maxVersion}}if(!forceReinstall&&version3==="11.3.12"&&await versionIsAvailable(version3)&&await isPossibleClaudeBinary(executablePath))return logForDebugging(`Found ${version3} at ${executablePath}, skipping install`),logEvent("tengu_native_update_complete",{latency_ms:Date.now()-startTime,was_new_install:!1,was_force_reinstall:!1,was_already_running:!0}),{success:!0,latestVersion:version3};if(!forceReinstall&&shouldSkipVersion(version3))return logEvent("tengu_native_update_skipped_minimum_version",{latency_ms:Date.now()-startTime,target_version:version3}),{success:!0,latestVersion:version3};let wasNewInstall=!1,latencyMs;if(isEnvTruthy2(process.env.ENABLE_LOCKLESS_UPDATES))wasNewInstall=await performVersionUpdate(version3,forceReinstall),latencyMs=Date.now()-startTime;else{let{installPath}=await getVersionPaths(version3);forceReinstall&&await forceRemoveLock(installPath);let lockAcquired=await tryWithVersionLock(installPath,async()=>{wasNewInstall=await performVersionUpdate(version3,forceReinstall)},3);if(latencyMs=Date.now()-startTime,!lockAcquired){let dirs=getBaseDirectories(),lockHolderPid;if(isPidBasedLockingEnabled()){let lockfilePath=getLockFilePathFromVersionPath(dirs,installPath);isLockActive(lockfilePath)&&(lockHolderPid=readLockContent(lockfilePath)?.pid)}return logEvent("tengu_native_update_lock_failed",{latency_ms:latencyMs,lock_holder_pid:lockHolderPid}),{success:!1,latestVersion:version3,lockFailed:!0,lockHolderPid}}}return logEvent("tengu_native_update_complete",{latency_ms:latencyMs,was_new_install:wasNewInstall,was_force_reinstall:forceReinstall}),logForDebugging(`Successfully updated to version ${version3}`),{success:!0,latestVersion:version3}}async function removeDirectoryIfEmpty(path36){try{await rmdir(path36),logForDebugging(`Removed empty directory at ${path36}`)}catch(error40){let code=getErrnoCode(error40);code!=="ENOTDIR"&&code!=="ENOENT"&&code!=="ENOTEMPTY"&&logForDebugging(`Could not remove directory at ${path36}: ${error40}`)}}async function updateSymlink(symlinkPath,targetPath){if(getPlatform2().startsWith("win32"))try{let parentDir2=dirname31(symlinkPath);await mkdir15(parentDir2,{recursive:!0});let existingStats;try{existingStats=await stat24(symlinkPath)}catch{}if(existingStats){try{let targetStats=await stat24(targetPath);if(existingStats.size===targetStats.size)return!1}catch{}let oldFileName=`${symlinkPath}.old.${Date.now()}`;await rename(symlinkPath,oldFileName);try{await copyFile7(targetPath,symlinkPath);try{await unlink9(oldFileName)}catch{}}catch(copyError){try{await rename(oldFileName,symlinkPath)}catch(restoreError){let errorWithCause=new Error(`Failed to restore old executable: ${restoreError}`,{cause:copyError});throw logError2(errorWithCause),errorWithCause}throw copyError}}else try{await copyFile7(targetPath,symlinkPath)}catch(e2){throw isENOENT(e2)?new Error(`Source file does not exist: ${targetPath}`):e2}return!0}catch(error40){return logError2(new Error(`Failed to copy executable from ${targetPath} to ${symlinkPath}: ${error40}`)),!1}let parentDir=dirname31(symlinkPath);try{await mkdir15(parentDir,{recursive:!0}),logForDebugging(`Created directory ${parentDir} for symlink`)}catch(mkdirError){return logError2(new Error(`Failed to create directory ${parentDir}: ${mkdirError}`)),!1}try{let symlinkExists=!1;try{await stat24(symlinkPath),symlinkExists=!0}catch{}if(symlinkExists){try{let currentTarget=await readlink(symlinkPath),resolvedCurrentTarget=resolve29(dirname31(symlinkPath),currentTarget),resolvedTargetPath=resolve29(targetPath);if(resolvedCurrentTarget===resolvedTargetPath)return!1}catch{}await unlink9(symlinkPath)}}catch(error40){logError2(new Error(`Failed to check/remove existing symlink: ${error40}`))}let tempSymlink=`${symlinkPath}.tmp.${process.pid}.${Date.now()}`;try{return await symlink4(targetPath,tempSymlink),await rename(tempSymlink,symlinkPath),logForDebugging(`Atomically updated symlink ${symlinkPath} -> ${targetPath}`),!0}catch(error40){try{await unlink9(tempSymlink)}catch{}return logError2(new Error(`Failed to create symlink from ${symlinkPath} to ${targetPath}: ${error40}`)),!1}}async function checkInstall(force=!1){if(isEnvTruthy2(process.env.DISABLE_INSTALLATION_CHECKS))return[];let installationType=await getCurrentInstallationType();if(installationType==="development")return[];let config3=getGlobalConfig();if(!(force||installationType==="native"||config3.installMethod==="native"))return[];let dirs=getBaseDirectories(),messages=[],localBinDir=dirname31(dirs.executable),resolvedLocalBinPath=resolve29(localBinDir),isWindows2=getPlatform2().startsWith("win32");try{await access5(localBinDir)}catch{messages.push({message:`installMethod is native, but directory ${localBinDir} does not exist`,userActionRequired:!0,type:"error"})}if(isWindows2)await isPossibleClaudeBinary(dirs.executable)||messages.push({message:`installMethod is native, but ${APP_EXECUTABLE_NAME} command is missing or invalid at ${dirs.executable}`,userActionRequired:!0,type:"error"});else try{let target=await readlink(dirs.executable),absoluteTarget=resolve29(dirname31(dirs.executable),target);await isPossibleClaudeBinary(absoluteTarget)||messages.push({message:`${APP_EXECUTABLE_NAME} symlink points to missing or invalid binary: ${target}`,userActionRequired:!0,type:"error"})}catch(e2){isENOENT(e2)?messages.push({message:`installMethod is native, but ${APP_EXECUTABLE_NAME} command not found at ${dirs.executable}`,userActionRequired:!0,type:"error"}):await isPossibleClaudeBinary(dirs.executable)||messages.push({message:`${dirs.executable} exists but is not a valid ${APP_EXECUTABLE_NAME} binary`,userActionRequired:!0,type:"error"})}if(!(process.env.PATH||"").split(delimiter3).some(entry=>{try{let resolvedEntry=resolve29(entry);return isWindows2?resolvedEntry.toLowerCase()===resolvedLocalBinPath.toLowerCase():resolvedEntry===resolvedLocalBinPath}catch{return!1}}))if(isWindows2){let windowsBinPath=localBinDir.replace(/\//g,"\\");messages.push({message:`Native installation exists but ${windowsBinPath} is not in your PATH. Add it by opening: System Properties \u2192 Environment Variables \u2192 Edit User PATH \u2192 New \u2192 Add the path above. Then restart your terminal.`,userActionRequired:!0,type:"path"})}else{let shellType=getShellType(),configFile=getShellConfigPaths()[shellType],displayPath=configFile?configFile.replace(homedir19(),"~"):"your shell config file";messages.push({message:`Native installation exists but ~/.local/bin is not in your PATH. Run:
2625
+ ${pathLauncherVersion.stderr}`.trim().match(/\d+\.\d+\.\d+(?:[-+][^\s)]+)?/)?.[0];if(!reportedVersion||!lt2(reportedVersion,APP_UPDATE_VERSION))return[];let uninstallCmd=getKnownReleasePackageNames().map(packageName=>`npm -g uninstall ${packageName}`).join(" && ");return[{issue:`PATH launcher is stale: ${pathLauncher} reports ${reportedVersion} but this runtime is ${APP_UPDATE_VERSION}`,fix:`Remove stale npm/global launchers with: ${uninstallCmd}. If you use the native installer, run: ${APP_EXECUTABLE_NAME} install. To reinstall the npm launcher, run: npm i -g ${APP_NPM_PACKAGE_NAME}.`}]}async function detectMultipleInstallations(){let fs13=getFsImplementation(),installations=[],localPath=join69(homedir18(),".clavue","local",APP_EXECUTABLE_NAME);await localInstallationExists()&&installations.push({type:"npm-local",path:localPath});let packagesToCheck=getKnownReleasePackageNames(),npmResult=await execFileNoThrow("npm",["-g","config","get","prefix"]);if(npmResult.code===0&&npmResult.stdout){let npmPrefix=npmResult.stdout.trim(),isWindows2=getPlatform()==="windows",globalBinPath=isWindows2?join69(npmPrefix,APP_EXECUTABLE_NAME):join69(npmPrefix,"bin",APP_EXECUTABLE_NAME),globalBinExists=!1;try{await fs13.stat(globalBinPath),globalBinExists=!0}catch{}if(globalBinExists){let isCurrentHomebrewInstallation=!1;try{(await realpath7(globalBinPath)).includes("/Caskroom/")&&(isCurrentHomebrewInstallation=detectHomebrew())}catch{}isCurrentHomebrewInstallation||installations.push({type:"npm-global",path:globalBinPath})}else for(let packageName of packagesToCheck){let globalPackagePath=isWindows2?join69(npmPrefix,"node_modules",packageName):join69(npmPrefix,"lib","node_modules",packageName);try{await fs13.stat(globalPackagePath),installations.push({type:"npm-global-orphan",path:globalPackagePath})}catch{}}}let nativeBinPath=join69(homedir18(),".local","bin",APP_EXECUTABLE_NAME);try{await fs13.stat(nativeBinPath),installations.push({type:"native",path:nativeBinPath})}catch{}if(getGlobalConfig().installMethod==="native"){let nativeDataPath=join69(homedir18(),".local","share","claude");try{await fs13.stat(nativeDataPath),installations.some(i3=>i3.type==="native")||installations.push({type:"native",path:nativeDataPath})}catch{}}return installations}async function detectConfigurationIssues(type){let warnings=[];try{let raw=await readFile21(join69(getManagedFilePath(),"managed-settings.json"),"utf-8"),parsed=jsonParse(raw),field=parsed&&typeof parsed=="object"?parsed.strictPluginOnlyCustomization:void 0;if(field!==void 0&&typeof field!="boolean")if(!Array.isArray(field))warnings.push({issue:`managed-settings.json: strictPluginOnlyCustomization has an invalid value (expected true or an array, got ${typeof field})`,fix:`The field is silently ignored (schema .catch rescues it). Set it to true, or an array of: ${CUSTOMIZATION_SURFACES.join(", ")}.`});else{let unknown2=field.filter(x3=>typeof x3=="string"&&!CUSTOMIZATION_SURFACES.includes(x3));unknown2.length>0&&warnings.push({issue:`managed-settings.json: strictPluginOnlyCustomization has ${unknown2.length} value(s) this client doesn't recognize: ${unknown2.map(String).join(", ")}`,fix:`These are silently ignored (forwards-compat). Known surfaces for this version: ${CUSTOMIZATION_SURFACES.join(", ")}. Either remove them, or this client is older than the managed-settings intended.`})}}catch{}let config3=getGlobalConfig();if(type==="development")return warnings;if(type==="native"){let pathDirectories=(process.env.PATH||"").split(delimiter2),homeDir=homedir18(),localBinPath=join69(homeDir,".local","bin"),normalizedLocalBinPath=localBinPath;if(getPlatform()==="windows"&&(normalizedLocalBinPath=localBinPath.split(win322.sep).join(posix6.sep)),!pathDirectories.some(dir=>{let normalizedDir=dir;getPlatform()==="windows"&&(normalizedDir=dir.split(win322.sep).join(posix6.sep));let trimmedDir=normalizedDir.replace(/\/+$/,""),trimmedRawDir=dir.replace(/[/\\]+$/,"");return trimmedDir===normalizedLocalBinPath||trimmedRawDir==="~/.local/bin"||trimmedRawDir==="$HOME/.local/bin"}))if(getPlatform()==="windows"){let windowsLocalBinPath=localBinPath.split(posix6.sep).join(win322.sep);warnings.push({issue:`Native installation exists but ${windowsLocalBinPath} is not in your PATH`,fix:"Add it by opening: System Properties \u2192 Environment Variables \u2192 Edit User PATH \u2192 New \u2192 Add the path above. Then restart your terminal."})}else{let shellType=getShellType(),configFile=getShellConfigPaths()[shellType],displayPath=configFile?configFile.replace(homedir18(),"~"):"your shell config file";warnings.push({issue:"Native installation exists but ~/.local/bin is not in your PATH",fix:`Run: echo 'export PATH="$HOME/.local/bin:$PATH"' >> ${displayPath} then open a new terminal or run: source ${displayPath}`})}}isEnvTruthy2(process.env.DISABLE_INSTALLATION_CHECKS)||(type==="npm-local"&&config3.installMethod!=="local"&&warnings.push({issue:`Running from local installation but config install method is '${config3.installMethod}'`,fix:"Consider using native installation: clavue install"}),type==="native"&&config3.installMethod!=="native"&&warnings.push({issue:`Running native installation but config install method is '${config3.installMethod}'`,fix:"Run clavue install to update configuration"})),type==="npm-global"&&await localInstallationExists()&&warnings.push({issue:"Local installation exists but not being used",fix:"Consider using native installation: clavue install"});let existingAlias=await findClaudeAlias(),validAlias=await findValidClaudeAlias();return type==="npm-local"&&!await which(APP_EXECUTABLE_NAME)&&!validAlias&&(existingAlias?warnings.push({issue:"Local installation not accessible",fix:`Alias exists but points to invalid target: ${existingAlias}. Update alias: alias ${APP_EXECUTABLE_NAME}="~/.clavue/local/clavue"`}):warnings.push({issue:"Local installation not accessible",fix:`Create alias: alias ${APP_EXECUTABLE_NAME}="~/.clavue/local/clavue"`})),warnings}function detectLinuxGlobPatternWarnings(){if(getPlatform()!=="linux")return[];let warnings=[],globPatterns=SandboxManager.getLinuxGlobPatternWarnings();if(globPatterns.length>0){let displayPatterns=globPatterns.slice(0,3).join(", "),remaining=globPatterns.length-3,patternList=remaining>0?`${displayPatterns} (${remaining} more)`:displayPatterns;warnings.push({issue:"Glob patterns in sandbox permission rules are not fully supported on Linux",fix:`Found ${globPatterns.length} pattern(s): ${patternList}. On Linux, glob patterns in Edit/Read rules will be ignored.`})}return warnings}async function getDoctorDiagnostic(){let installationType=await getCurrentInstallationType(),version3=typeof MACRO<"u"?"11.3.13":"unknown",installationPath=await getInstallationPath(),invokedBinary=getInvokedBinary(),multipleInstallations=await detectMultipleInstallations(),warnings=await detectConfigurationIssues(installationType);warnings.push(...await detectStalePathLauncherWarning()),warnings.push(...detectLinuxGlobPatternWarnings());try{let{detectTmuxColorReduction:detectTmuxColorReduction2}=await Promise.resolve().then(()=>(init_tmuxColorDiagnostic(),tmuxColorDiagnostic_exports));for(let w2 of detectTmuxColorReduction2())warnings.push({issue:w2.issue,fix:w2.fix})}catch{}if(installationType==="native"){let npmInstalls=multipleInstallations.filter(i3=>i3.type==="npm-global"||i3.type==="npm-global-orphan"||i3.type==="npm-local"),isWindows2=getPlatform()==="windows";for(let install2 of npmInstalls)if(install2.type==="npm-global"){let uninstallCmd=getKnownReleasePackageNames().map(packageName=>`npm -g uninstall ${packageName}`).join(" && ");warnings.push({issue:`Leftover npm global installation at ${install2.path}`,fix:`Run: ${uninstallCmd}`})}else install2.type==="npm-global-orphan"?warnings.push({issue:`Orphaned npm global package at ${install2.path}`,fix:isWindows2?`Run: rmdir /s /q "${install2.path}"`:`Run: rm -rf ${install2.path}`}):install2.type==="npm-local"&&warnings.push({issue:`Leftover npm local installation at ${install2.path}`,fix:isWindows2?`Run: rmdir /s /q "${install2.path}"`:`Run: rm -rf ${install2.path}`})}let configInstallMethod=getGlobalConfig().installMethod||"not set",hasUpdatePermissions=null;installationType==="npm-global"&&(hasUpdatePermissions=(await checkGlobalInstallPermissions()).hasPermissions,!hasUpdatePermissions&&!getAutoUpdaterDisabledReason()&&warnings.push({issue:"Insufficient permissions for auto-updates",fix:"Do one of: (1) Re-install node without sudo, or (2) Use `clavue install` for native installation"}));let ripgrepStatusRaw=getRipgrepStatus(),ripgrepStatus2={working:ripgrepStatusRaw.working??!0,mode:ripgrepStatusRaw.mode,systemPath:ripgrepStatusRaw.mode==="system"?ripgrepStatusRaw.path:null},packageManager=installationType==="package-manager"?await getPackageManager():void 0;return{installationType,version:version3,installationPath,invokedBinary,configInstallMethod,autoUpdates:(()=>{let reason=getAutoUpdaterDisabledReason();return reason?`disabled (${formatAutoUpdaterDisabledReason(reason)})`:"enabled"})(),hasUpdatePermissions,multipleInstallations,warnings,packageManager,ripgrepStatus:ripgrepStatus2}}var init_doctorDiagnostic=__esm({"src/utils/doctorDiagnostic.ts"(){init_execa();init_autoUpdater();init_bundledMode();init_config11();init_cwd2();init_envUtils();init_execFileNoThrow();init_fsOperations();init_localInstaller();init_semver();init_packageManagers();init_platform2();init_ripgrep();init_sandbox_adapter();init_managedPath();init_types5();init_shellConfig();init_slowOperations();init_which();init_update2();__name(getNormalizedPaths,"getNormalizedPaths");__name(getCurrentInstallationType,"getCurrentInstallationType");__name(getInstallationPath,"getInstallationPath");__name(getInvokedBinary,"getInvokedBinary");__name(resolvePathConservatively,"resolvePathConservatively");__name(detectStalePathLauncherWarning,"detectStalePathLauncherWarning");__name(detectMultipleInstallations,"detectMultipleInstallations");__name(detectConfigurationIssues,"detectConfigurationIssues");__name(detectLinuxGlobPatternWarnings,"detectLinuxGlobPatternWarnings");__name(getDoctorDiagnostic,"getDoctorDiagnostic")}});function isStartupAutoIDEInstallError(status2){return!!(status2?.source==="startup-auto"&&status2.error)}var init_ideInstallationStatus=__esm({"src/utils/ideInstallationStatus.ts"(){__name(isStartupAutoIDEInstallError,"isStartupAutoIDEInstallError")}});import{homedir as osHomedir2}from"os";import{join as join70}from"path";function resolveOptions(options){return{env:options?.env??process.env,home:options?.homedir??process.env.HOME??osHomedir2()}}function getXDGStateHome(options){let{env:env5,home}=resolveOptions(options);return env5.XDG_STATE_HOME??join70(home,".local","state")}function getXDGCacheHome(options){let{env:env5,home}=resolveOptions(options);return env5.XDG_CACHE_HOME??join70(home,".cache")}function getXDGDataHome(options){let{env:env5,home}=resolveOptions(options);return env5.XDG_DATA_HOME??join70(home,".local","share")}function getUserBinDir(options){let{home}=resolveOptions(options);return join70(home,".local","bin")}var init_xdg=__esm({"src/utils/xdg.ts"(){__name(resolveOptions,"resolveOptions");__name(getXDGStateHome,"getXDGStateHome");__name(getXDGCacheHome,"getXDGCacheHome");__name(getXDGDataHome,"getXDGDataHome");__name(getUserBinDir,"getUserBinDir")}});import{createHash as createHash17}from"crypto";import{chmod as chmod6,writeFile as writeFile16}from"fs/promises";import{join as join71}from"path";async function getLatestVersionFromArtifactory(tag2="latest"){let startTime=Date.now(),{stdout,code,stderr}=await execFileNoThrowWithCwd("npm",["view",`@anthropic-ai/claude-code@${tag2}`,"version","--prefer-online","--registry",ARTIFACTORY_REGISTRY_URL],{timeout:3e4,preserveOutputOnError:!0}),latencyMs=Date.now()-startTime;if(code!==0){logEvent("tengu_version_check_failure",{latency_ms:latencyMs,source_npm:!0,exit_code:code});let error40=new Error(`npm view failed with code ${code}: ${stderr}`);throw logError2(error40),error40}return logEvent("tengu_version_check_success",{latency_ms:latencyMs,source_npm:!0}),logForDebugging(`npm view @anthropic-ai/claude-code@${tag2} version: ${stdout}`),stdout.trim()}async function getLatestVersionFromBinaryRepo(channel="latest",baseUrl,authConfig){let startTime=Date.now();try{let response=await axios_default.get(`${baseUrl}/${channel}`,{timeout:3e4,responseType:"text",...authConfig}),latencyMs=Date.now()-startTime;return logEvent("tengu_version_check_success",{latency_ms:latencyMs}),response.data.trim()}catch(error40){let latencyMs=Date.now()-startTime,errorMessage3=error40 instanceof Error?error40.message:String(error40),httpStatus;axios_default.isAxiosError(error40)&&error40.response&&(httpStatus=error40.response.status),logEvent("tengu_version_check_failure",{latency_ms:latencyMs,http_status:httpStatus,is_timeout:errorMessage3.includes("timeout")});let fetchError=new Error(`Failed to fetch version from ${baseUrl}/${channel}: ${errorMessage3}`);throw logError2(fetchError),fetchError}}async function getLatestVersion2(channelOrVersion){if(/^v?\d+\.\d+\.\d+(-\S+)?$/.test(channelOrVersion)){let normalized=channelOrVersion.startsWith("v")?channelOrVersion.slice(1):channelOrVersion;if(/^99\.99\./.test(normalized))throw new Error(`Version ${normalized} is not available for installation. Use 'stable' or 'latest'.`);return normalized}let channel=channelOrVersion;if(channel!=="stable"&&channel!=="latest")throw new Error(`Invalid channel: ${channelOrVersion}. Use 'stable' or 'latest'`);return process.env.USER_TYPE==="ant"?getLatestVersionFromArtifactory(channel==="stable"?"stable":"latest"):getLatestVersionFromBinaryRepo(channel,GCS_BUCKET_URL)}async function downloadVersionFromArtifactory(version3,stagingPath){let fs13=getFsImplementation();await fs13.rm(stagingPath,{recursive:!0,force:!0});let platform7=getPlatform2(),platformPackageName=`@anthropic-ai/claude-code-${platform7}`;logForDebugging(`Fetching integrity hash for ${platformPackageName}@${version3}`);let{stdout:integrityOutput,code,stderr}=await execFileNoThrowWithCwd("npm",["view",`${platformPackageName}@${version3}`,"dist.integrity","--registry",ARTIFACTORY_REGISTRY_URL],{timeout:3e4,preserveOutputOnError:!0});if(code!==0)throw new Error(`npm view integrity failed with code ${code}: ${stderr}`);let integrity=integrityOutput.trim();if(!integrity)throw new Error(`Failed to fetch integrity hash for ${platformPackageName}@${version3}`);logForDebugging(`Got integrity hash for ${platform7}: ${integrity}`),await fs13.mkdir(stagingPath);let packageJson={name:"clavue-native-installer",version:"0.0.1",dependencies:{clavue:version3}},packageLock={name:"clavue-native-installer",version:"0.0.1",lockfileVersion:3,requires:!0,packages:{"":{name:"clavue-native-installer",version:"0.0.1",dependencies:{clavue:version3}},"node_modules/clavue":{version:version3,optionalDependencies:{[platformPackageName]:version3}},[`node_modules/${platformPackageName}`]:{version:version3,integrity}}};writeFileSync3(join71(stagingPath,"package.json"),jsonStringify(packageJson,null,2),{encoding:"utf8",flush:!0}),writeFileSync3(join71(stagingPath,"package-lock.json"),jsonStringify(packageLock,null,2),{encoding:"utf8",flush:!0});let result2=await execFileNoThrowWithCwd("npm",["ci","--prefer-online","--registry",ARTIFACTORY_REGISTRY_URL],{timeout:6e4,preserveOutputOnError:!0,cwd:stagingPath});if(result2.code!==0)throw new Error(`npm ci failed with code ${result2.code}: ${result2.stderr}`);logForDebugging(`Successfully downloaded and verified @anthropic-ai/claude-code@${version3}`)}function getManifestBinaryName(platformInfo,platform7){return typeof platformInfo.binary=="string"&&platformInfo.binary?platformInfo.binary:getBinaryName(platform7)}function getStallTimeoutMs(){return Number(process.env.CLAUDE_CODE_STALL_TIMEOUT_MS_FOR_TESTING)||DEFAULT_STALL_TIMEOUT_MS}async function downloadAndVerifyBinary(binaryUrl,expectedChecksum,binaryPath,requestConfig={}){let lastError;for(let attempt2=1;attempt2<=MAX_DOWNLOAD_RETRIES;attempt2++){let controller=new AbortController,stallTimer,clearStallTimer=__name(()=>{stallTimer&&(clearTimeout(stallTimer),stallTimer=void 0)},"clearStallTimer"),resetStallTimer=__name(()=>{clearStallTimer(),stallTimer=setTimeout(c4=>c4.abort(),getStallTimeoutMs(),controller)},"resetStallTimer");try{resetStallTimer();let response=await axios_default.get(binaryUrl,{timeout:5*6e4,responseType:"arraybuffer",signal:controller.signal,onDownloadProgress:__name(()=>{resetStallTimer()},"onDownloadProgress"),...requestConfig});clearStallTimer();let hash2=createHash17("sha256");hash2.update(response.data);let actualChecksum=hash2.digest("hex");if(actualChecksum!==expectedChecksum)throw new Error(`Checksum mismatch: expected ${expectedChecksum}, got ${actualChecksum}`);await writeFile16(binaryPath,Buffer.from(response.data)),await chmod6(binaryPath,493);return}catch(error40){clearStallTimer();let isStallTimeout=axios_default.isCancel(error40);if(isStallTimeout?lastError=new StallTimeoutError:lastError=toError(error40),isStallTimeout&&attempt2<MAX_DOWNLOAD_RETRIES){logForDebugging(`Download stalled on attempt ${attempt2}/${MAX_DOWNLOAD_RETRIES}, retrying...`),await sleep2(1e3);continue}throw lastError}}throw lastError??new Error("Download failed after all retries")}async function downloadVersionFromBinaryRepo(version3,stagingPath,baseUrl,authConfig){let fs13=getFsImplementation();await fs13.rm(stagingPath,{recursive:!0,force:!0});let platform7=getPlatform2(),startTime=Date.now();logEvent("tengu_binary_download_attempt",{});let manifest;try{manifest=(await axios_default.get(`${baseUrl}/${version3}/manifest.json`,{timeout:1e4,responseType:"json",...authConfig})).data}catch(error40){let latencyMs=Date.now()-startTime,errorMessage3=error40 instanceof Error?error40.message:String(error40),httpStatus;throw axios_default.isAxiosError(error40)&&error40.response&&(httpStatus=error40.response.status),logEvent("tengu_binary_manifest_fetch_failure",{latency_ms:latencyMs,http_status:httpStatus,is_timeout:errorMessage3.includes("timeout")}),logError2(new Error(`Failed to fetch manifest from ${baseUrl}/${version3}/manifest.json: ${errorMessage3}`)),error40}let platformInfo=manifest.platforms[platform7];if(!platformInfo)throw logEvent("tengu_binary_platform_not_found",{}),new Error(`Platform ${platform7} not found in manifest for version ${version3}`);let expectedChecksum=platformInfo.checksum,artifactName=getManifestBinaryName(platformInfo,platform7),binaryName=getBinaryName(platform7),binaryUrl=`${baseUrl}/${version3}/${platform7}/${artifactName}`;await fs13.mkdir(stagingPath);let binaryPath=join71(stagingPath,binaryName);try{await downloadAndVerifyBinary(binaryUrl,expectedChecksum,binaryPath,authConfig||{});let latencyMs=Date.now()-startTime;logEvent("tengu_binary_download_success",{latency_ms:latencyMs})}catch(error40){let latencyMs=Date.now()-startTime,errorMessage3=error40 instanceof Error?error40.message:String(error40),httpStatus;throw axios_default.isAxiosError(error40)&&error40.response&&(httpStatus=error40.response.status),logEvent("tengu_binary_download_failure",{latency_ms:latencyMs,http_status:httpStatus,is_timeout:errorMessage3.includes("timeout"),is_checksum_mismatch:errorMessage3.includes("Checksum mismatch")}),logError2(new Error(`Failed to download binary from ${binaryUrl}: ${errorMessage3}`)),error40}}async function downloadVersion(version3,stagingPath){return process.env.USER_TYPE==="ant"?(await downloadVersionFromArtifactory(version3,stagingPath),"npm"):(await downloadVersionFromBinaryRepo(version3,stagingPath,GCS_BUCKET_URL),"binary")}var GCS_BUCKET_URL,ARTIFACTORY_REGISTRY_URL,DEFAULT_STALL_TIMEOUT_MS,MAX_DOWNLOAD_RETRIES,StallTimeoutError,init_download=__esm({"src/utils/nativeInstaller/download.ts"(){init_axios2();init_analytics();init_debug();init_errors2();init_execFileNoThrow();init_fsOperations();init_log3();init_sleep2();init_slowOperations();init_installer();GCS_BUCKET_URL="https://storage.googleapis.com/claude-code-dist-86c565f3-f756-42ad-8dfa-d59b1c096819/claude-code-releases",ARTIFACTORY_REGISTRY_URL="https://artifactory.infra.ant.dev/artifactory/api/npm/npm-all/";__name(getLatestVersionFromArtifactory,"getLatestVersionFromArtifactory");__name(getLatestVersionFromBinaryRepo,"getLatestVersionFromBinaryRepo");__name(getLatestVersion2,"getLatestVersion");__name(downloadVersionFromArtifactory,"downloadVersionFromArtifactory");DEFAULT_STALL_TIMEOUT_MS=6e4,MAX_DOWNLOAD_RETRIES=3;__name(getManifestBinaryName,"getManifestBinaryName");__name(getStallTimeoutMs,"getStallTimeoutMs");StallTimeoutError=class extends Error{static{__name(this,"StallTimeoutError")}constructor(){super("Download stalled: no data received for 60 seconds"),this.name="StallTimeoutError"}};__name(downloadAndVerifyBinary,"downloadAndVerifyBinary");__name(downloadVersionFromBinaryRepo,"downloadVersionFromBinaryRepo");__name(downloadVersion,"downloadVersion")}});import{basename as basename17,join as join72}from"path";function isPidBasedLockingEnabled(){let envVar=process.env.ENABLE_PID_BASED_VERSION_LOCKING;return isEnvTruthy2(envVar)?!0:isEnvDefinedFalsy(envVar)?!1:getFeatureValue_CACHED_MAY_BE_STALE("tengu_pid_based_version_locking",!1)}function isProcessRunning3(pid){if(pid<=1)return!1;try{return process.kill(pid,0),!0}catch{return!1}}function isClaudeProcess(pid,expectedExecPath){if(!isProcessRunning3(pid))return!1;if(pid===process.pid)return!0;try{let command8=getProcessCommand(pid);if(!command8)return!0;let normalizedCommand=command8.toLowerCase(),normalizedExecPath=expectedExecPath.toLowerCase();return normalizedCommand.includes("claude")||normalizedCommand.includes(normalizedExecPath)}catch{return!0}}function readLockContent(lockFilePath){let fs13=getFsImplementation();try{let content=fs13.readFileSync(lockFilePath,{encoding:"utf8"});if(!content||content.trim()==="")return null;let parsed=jsonParse(content);return typeof parsed.pid!="number"||!parsed.version||!parsed.execPath?null:parsed}catch{return null}}function isLockActive(lockFilePath){let content=readLockContent(lockFilePath);if(!content)return!1;let{pid,execPath:execPath2}=content;if(!isProcessRunning3(pid))return!1;if(!isClaudeProcess(pid,execPath2))return logForDebugging(`Lock PID ${pid} is running but does not appear to be Clavue - treating as stale`),!1;let fs13=getFsImplementation();try{let stats2=fs13.statSync(lockFilePath);if(Date.now()-stats2.mtimeMs>FALLBACK_STALE_MS&&!isProcessRunning3(pid))return!1}catch{}return!0}function writeLockFile(lockFilePath,content){let fs13=getFsImplementation(),tempPath=`${lockFilePath}.tmp.${process.pid}.${Date.now()}`;try{writeFileSync3(tempPath,jsonStringify(content,null,2),{encoding:"utf8",flush:!0}),fs13.renameSync(tempPath,lockFilePath)}catch(error40){try{fs13.unlinkSync(tempPath)}catch{}throw error40}}async function tryAcquireLock(versionPath,lockFilePath){let fs13=getFsImplementation(),versionName=basename17(versionPath);if(isLockActive(lockFilePath)){let existingContent=readLockContent(lockFilePath);return logForDebugging(`Cannot acquire lock for ${versionName} - held by PID ${existingContent?.pid}`),null}let lockContent={pid:process.pid,version:versionName,execPath:process.execPath,acquiredAt:Date.now()};try{return writeLockFile(lockFilePath,lockContent),readLockContent(lockFilePath)?.pid!==process.pid?null:(logForDebugging(`Acquired PID lock for ${versionName} (PID ${process.pid})`),()=>{try{readLockContent(lockFilePath)?.pid===process.pid&&(fs13.unlinkSync(lockFilePath),logForDebugging(`Released PID lock for ${versionName}`))}catch(error40){logForDebugging(`Failed to release lock for ${versionName}: ${error40}`)}})}catch(error40){return logForDebugging(`Failed to acquire lock for ${versionName}: ${error40}`),null}}async function acquireProcessLifetimeLock(versionPath,lockFilePath){let release2=await tryAcquireLock(versionPath,lockFilePath);if(!release2)return!1;let cleanup=__name(()=>{try{release2()}catch{}},"cleanup");return process.on("exit",cleanup),process.on("SIGINT",cleanup),process.on("SIGTERM",cleanup),!0}async function withLock(versionPath,lockFilePath,callback){let release2=await tryAcquireLock(versionPath,lockFilePath);if(!release2)return!1;try{return await callback(),!0}finally{release2()}}function cleanupStaleLocks(locksDir){let fs13=getFsImplementation(),cleanedCount=0;try{let lockEntries=fs13.readdirStringSync(locksDir).filter(f3=>f3.endsWith(".lock"));for(let lockEntry of lockEntries){let lockFilePath=join72(locksDir,lockEntry);try{fs13.lstatSync(lockFilePath).isDirectory()?(fs13.rmSync(lockFilePath,{recursive:!0,force:!0}),cleanedCount++,logForDebugging(`Cleaned up legacy directory lock: ${lockEntry}`)):isLockActive(lockFilePath)||(fs13.unlinkSync(lockFilePath),cleanedCount++,logForDebugging(`Cleaned up stale lock: ${lockEntry}`))}catch{}}}catch(error40){if(isENOENT(error40))return 0;logError2(toError(error40))}return cleanedCount}var FALLBACK_STALE_MS,init_pidLock=__esm({"src/utils/nativeInstaller/pidLock.ts"(){init_growthbook();init_debug();init_envUtils();init_errors2();init_fsOperations();init_genericProcessUtils();init_log3();init_slowOperations();__name(isPidBasedLockingEnabled,"isPidBasedLockingEnabled");FALLBACK_STALE_MS=7200*1e3;__name(isProcessRunning3,"isProcessRunning");__name(isClaudeProcess,"isClaudeProcess");__name(readLockContent,"readLockContent");__name(isLockActive,"isLockActive");__name(writeLockFile,"writeLockFile");__name(tryAcquireLock,"tryAcquireLock");__name(acquireProcessLifetimeLock,"acquireProcessLifetimeLock");__name(withLock,"withLock");__name(cleanupStaleLocks,"cleanupStaleLocks")}});import{constants as fsConstants4}from"fs";import{access as access5,chmod as chmod7,copyFile as copyFile7,lstat as lstat3,mkdir as mkdir15,readdir as readdir11,readlink,realpath as realpath8,rename,rm as rm4,rmdir,stat as stat24,symlink as symlink4,unlink as unlink9,writeFile as writeFile17}from"fs/promises";import{homedir as homedir19}from"os";import{basename as basename18,delimiter as delimiter3,dirname as dirname31,join as join73,resolve as resolve29}from"path";function getPlatform2(){let os5=env4.platform,arch3=process.arch==="x64"?"x64":process.arch==="arm64"?"arm64":null;if(!arch3){let error40=new Error(`Unsupported architecture: ${process.arch}`);throw logForDebugging(`Native installer does not support architecture: ${process.arch}`,{level:"error"}),error40}return os5==="linux"&&envDynamic.isMuslEnvironment()?`linux-${arch3}-musl`:`${os5}-${arch3}`}function getBinaryName(platform7){return platform7.startsWith("win32")?`${APP_EXECUTABLE_NAME}.exe`:APP_EXECUTABLE_NAME}function getBaseDirectories(){let platform7=getPlatform2(),executableName=getBinaryName(platform7);return{versions:join73(getXDGDataHome(),"clavue","versions"),staging:join73(getXDGCacheHome(),"clavue","staging"),locks:join73(getXDGStateHome(),"clavue","locks"),executable:join73(getUserBinDir(),executableName)}}async function isPossibleClaudeBinary(filePath){try{let stats2=await stat24(filePath);return!stats2.isFile()||stats2.size===0?!1:(await access5(filePath,fsConstants4.X_OK),!0)}catch{return!1}}async function getVersionPaths(version3){let dirs=getBaseDirectories(),dirsToCreate=[dirs.versions,dirs.staging,dirs.locks];await Promise.all(dirsToCreate.map(dir=>mkdir15(dir,{recursive:!0})));let executableParentDir=dirname31(dirs.executable);await mkdir15(executableParentDir,{recursive:!0});let installPath=join73(dirs.versions,version3);try{await stat24(installPath)}catch{await writeFile17(installPath,"",{encoding:"utf8"})}return{stagingPath:join73(dirs.staging,version3),installPath}}async function tryWithVersionLock(versionFilePath,callback,retries=0){let dirs=getBaseDirectories(),lockfilePath=getLockFilePathFromVersionPath(dirs,versionFilePath);if(await mkdir15(dirs.locks,{recursive:!0}),isPidBasedLockingEnabled()){let attempts=0,maxAttempts=retries+1,minTimeout=retries>0?1e3:100,maxTimeout=retries>0?5e3:500;for(;attempts<maxAttempts;){if(await withLock(versionFilePath,lockfilePath,async()=>{try{await callback()}catch(error40){throw logError2(error40),error40}}))return logEvent("tengu_version_lock_acquired",{is_pid_based:!0,is_lifetime_lock:!1,attempts:attempts+1}),!0;if(attempts++,attempts<maxAttempts){let timeout=Math.min(minTimeout*Math.pow(2,attempts-1),maxTimeout);await sleep2(timeout)}}return logEvent("tengu_version_lock_failed",{is_pid_based:!0,is_lifetime_lock:!1,attempts:maxAttempts}),logLockAcquisitionError(versionFilePath,new Error("Lock held by another process")),!1}let release2=null;try{try{release2=await lock(versionFilePath,{stale:LOCK_STALE_MS,retries:{retries,minTimeout:retries>0?1e3:100,maxTimeout:retries>0?5e3:500},lockfilePath,onCompromised:__name(err2=>{logForDebugging(`NON-FATAL: Version lock was compromised during operation: ${err2.message}`,{level:"info"})},"onCompromised")})}catch(lockError){return logEvent("tengu_version_lock_failed",{is_pid_based:!1,is_lifetime_lock:!1}),logLockAcquisitionError(versionFilePath,lockError),!1}try{return await callback(),logEvent("tengu_version_lock_acquired",{is_pid_based:!1,is_lifetime_lock:!1}),!0}catch(error40){throw logError2(error40),error40}}finally{release2&&await release2()}}async function atomicMoveToInstallPath(stagedBinaryPath,installPath){await mkdir15(dirname31(installPath),{recursive:!0});let tempInstallPath=`${installPath}.tmp.${process.pid}.${Date.now()}`;try{await copyFile7(stagedBinaryPath,tempInstallPath),await chmod7(tempInstallPath,493),await rename(tempInstallPath,installPath),logForDebugging(`Atomically installed binary to ${installPath}`)}catch(error40){try{await unlink9(tempInstallPath)}catch{}throw error40}}async function installVersionFromPackage(stagingPath,installPath){try{let nodeModulesDir=join73(stagingPath,"node_modules","@anthropic-ai"),nativePackage=(await readdir11(nodeModulesDir)).find(entry=>entry.startsWith("claude-cli-native-"));if(!nativePackage)throw logEvent("tengu_native_install_package_failure",{stage_find_package:!0,error_package_not_found:!0}),new Error("Could not find platform-specific native package");let stagedBinaryPath=join73(nodeModulesDir,nativePackage,"cli");try{await stat24(stagedBinaryPath)}catch{throw logEvent("tengu_native_install_package_failure",{stage_binary_exists:!0,error_binary_not_found:!0}),new Error("Native binary not found in staged package")}await atomicMoveToInstallPath(stagedBinaryPath,installPath),await rm4(stagingPath,{recursive:!0,force:!0}),logEvent("tengu_native_install_package_success",{})}catch(error40){let msg=errorMessage(error40);throw!msg.includes("Could not find platform-specific")&&!msg.includes("Native binary not found")&&logEvent("tengu_native_install_package_failure",{stage_atomic_move:!0,error_move_failed:!0}),logError2(toError(error40)),error40}}async function installVersionFromBinary(stagingPath,installPath){try{let platform7=getPlatform2(),binaryName=getBinaryName(platform7),stagedBinaryPath=join73(stagingPath,binaryName);try{await stat24(stagedBinaryPath)}catch{throw logEvent("tengu_native_install_binary_failure",{stage_binary_exists:!0,error_binary_not_found:!0}),new Error("Staged binary not found")}await atomicMoveToInstallPath(stagedBinaryPath,installPath),await rm4(stagingPath,{recursive:!0,force:!0}),logEvent("tengu_native_install_binary_success",{})}catch(error40){throw errorMessage(error40).includes("Staged binary not found")||logEvent("tengu_native_install_binary_failure",{stage_atomic_move:!0,error_move_failed:!0}),logError2(toError(error40)),error40}}async function installVersion(stagingPath,installPath,downloadType){downloadType==="npm"?await installVersionFromPackage(stagingPath,installPath):await installVersionFromBinary(stagingPath,installPath)}async function performVersionUpdate(version3,forceReinstall){let{stagingPath:baseStagingPath,installPath}=await getVersionPaths(version3),{executable:executablePath}=getBaseDirectories(),stagingPath=isEnvTruthy2(process.env.ENABLE_LOCKLESS_UPDATES)?`${baseStagingPath}.${process.pid}.${Date.now()}`:baseStagingPath,needsInstall=!await versionIsAvailable(version3)||forceReinstall;if(needsInstall){logForDebugging(forceReinstall?`Force reinstalling native installer version ${version3}`:`Downloading native installer version ${version3}`);let downloadType=await downloadVersion(version3,stagingPath);await installVersion(stagingPath,installPath,downloadType)}else logForDebugging(`Version ${version3} already installed, updating symlink`);if(await removeDirectoryIfEmpty(executablePath),await updateSymlink(executablePath,installPath),!await isPossibleClaudeBinary(executablePath)){let installPathExists=!1;try{await stat24(installPath),installPathExists=!0}catch{}throw new Error(`Failed to create executable at ${executablePath}. Source file exists: ${installPathExists}. Check write permissions to ${executablePath}.`)}return needsInstall}async function versionIsAvailable(version3){let{installPath}=await getVersionPaths(version3);return isPossibleClaudeBinary(installPath)}async function updateLatest(channelOrVersion,forceReinstall=!1){let startTime=Date.now(),version3=await getLatestVersion2(channelOrVersion),{executable:executablePath}=getBaseDirectories();if(logForDebugging(`Checking for native installer update to version ${version3}`),!forceReinstall){let maxVersion=await getMaxVersion();if(maxVersion&&gt2(version3,maxVersion)){if(logForDebugging(`Native installer: maxVersion ${maxVersion} is set, capping update from ${version3} to ${maxVersion}`),gte2("2.1.88",maxVersion))return logForDebugging(`Native installer: current version 2.1.88 is already at or above maxVersion ${maxVersion}, skipping update`),logEvent("tengu_native_update_skipped_max_version",{latency_ms:Date.now()-startTime,max_version:maxVersion,available_version:version3}),{success:!0,latestVersion:version3};version3=maxVersion}}if(!forceReinstall&&version3==="11.3.13"&&await versionIsAvailable(version3)&&await isPossibleClaudeBinary(executablePath))return logForDebugging(`Found ${version3} at ${executablePath}, skipping install`),logEvent("tengu_native_update_complete",{latency_ms:Date.now()-startTime,was_new_install:!1,was_force_reinstall:!1,was_already_running:!0}),{success:!0,latestVersion:version3};if(!forceReinstall&&shouldSkipVersion(version3))return logEvent("tengu_native_update_skipped_minimum_version",{latency_ms:Date.now()-startTime,target_version:version3}),{success:!0,latestVersion:version3};let wasNewInstall=!1,latencyMs;if(isEnvTruthy2(process.env.ENABLE_LOCKLESS_UPDATES))wasNewInstall=await performVersionUpdate(version3,forceReinstall),latencyMs=Date.now()-startTime;else{let{installPath}=await getVersionPaths(version3);forceReinstall&&await forceRemoveLock(installPath);let lockAcquired=await tryWithVersionLock(installPath,async()=>{wasNewInstall=await performVersionUpdate(version3,forceReinstall)},3);if(latencyMs=Date.now()-startTime,!lockAcquired){let dirs=getBaseDirectories(),lockHolderPid;if(isPidBasedLockingEnabled()){let lockfilePath=getLockFilePathFromVersionPath(dirs,installPath);isLockActive(lockfilePath)&&(lockHolderPid=readLockContent(lockfilePath)?.pid)}return logEvent("tengu_native_update_lock_failed",{latency_ms:latencyMs,lock_holder_pid:lockHolderPid}),{success:!1,latestVersion:version3,lockFailed:!0,lockHolderPid}}}return logEvent("tengu_native_update_complete",{latency_ms:latencyMs,was_new_install:wasNewInstall,was_force_reinstall:forceReinstall}),logForDebugging(`Successfully updated to version ${version3}`),{success:!0,latestVersion:version3}}async function removeDirectoryIfEmpty(path36){try{await rmdir(path36),logForDebugging(`Removed empty directory at ${path36}`)}catch(error40){let code=getErrnoCode(error40);code!=="ENOTDIR"&&code!=="ENOENT"&&code!=="ENOTEMPTY"&&logForDebugging(`Could not remove directory at ${path36}: ${error40}`)}}async function updateSymlink(symlinkPath,targetPath){if(getPlatform2().startsWith("win32"))try{let parentDir2=dirname31(symlinkPath);await mkdir15(parentDir2,{recursive:!0});let existingStats;try{existingStats=await stat24(symlinkPath)}catch{}if(existingStats){try{let targetStats=await stat24(targetPath);if(existingStats.size===targetStats.size)return!1}catch{}let oldFileName=`${symlinkPath}.old.${Date.now()}`;await rename(symlinkPath,oldFileName);try{await copyFile7(targetPath,symlinkPath);try{await unlink9(oldFileName)}catch{}}catch(copyError){try{await rename(oldFileName,symlinkPath)}catch(restoreError){let errorWithCause=new Error(`Failed to restore old executable: ${restoreError}`,{cause:copyError});throw logError2(errorWithCause),errorWithCause}throw copyError}}else try{await copyFile7(targetPath,symlinkPath)}catch(e2){throw isENOENT(e2)?new Error(`Source file does not exist: ${targetPath}`):e2}return!0}catch(error40){return logError2(new Error(`Failed to copy executable from ${targetPath} to ${symlinkPath}: ${error40}`)),!1}let parentDir=dirname31(symlinkPath);try{await mkdir15(parentDir,{recursive:!0}),logForDebugging(`Created directory ${parentDir} for symlink`)}catch(mkdirError){return logError2(new Error(`Failed to create directory ${parentDir}: ${mkdirError}`)),!1}try{let symlinkExists=!1;try{await stat24(symlinkPath),symlinkExists=!0}catch{}if(symlinkExists){try{let currentTarget=await readlink(symlinkPath),resolvedCurrentTarget=resolve29(dirname31(symlinkPath),currentTarget),resolvedTargetPath=resolve29(targetPath);if(resolvedCurrentTarget===resolvedTargetPath)return!1}catch{}await unlink9(symlinkPath)}}catch(error40){logError2(new Error(`Failed to check/remove existing symlink: ${error40}`))}let tempSymlink=`${symlinkPath}.tmp.${process.pid}.${Date.now()}`;try{return await symlink4(targetPath,tempSymlink),await rename(tempSymlink,symlinkPath),logForDebugging(`Atomically updated symlink ${symlinkPath} -> ${targetPath}`),!0}catch(error40){try{await unlink9(tempSymlink)}catch{}return logError2(new Error(`Failed to create symlink from ${symlinkPath} to ${targetPath}: ${error40}`)),!1}}async function checkInstall(force=!1){if(isEnvTruthy2(process.env.DISABLE_INSTALLATION_CHECKS))return[];let installationType=await getCurrentInstallationType();if(installationType==="development")return[];let config3=getGlobalConfig();if(!(force||installationType==="native"||config3.installMethod==="native"))return[];let dirs=getBaseDirectories(),messages=[],localBinDir=dirname31(dirs.executable),resolvedLocalBinPath=resolve29(localBinDir),isWindows2=getPlatform2().startsWith("win32");try{await access5(localBinDir)}catch{messages.push({message:`installMethod is native, but directory ${localBinDir} does not exist`,userActionRequired:!0,type:"error"})}if(isWindows2)await isPossibleClaudeBinary(dirs.executable)||messages.push({message:`installMethod is native, but ${APP_EXECUTABLE_NAME} command is missing or invalid at ${dirs.executable}`,userActionRequired:!0,type:"error"});else try{let target=await readlink(dirs.executable),absoluteTarget=resolve29(dirname31(dirs.executable),target);await isPossibleClaudeBinary(absoluteTarget)||messages.push({message:`${APP_EXECUTABLE_NAME} symlink points to missing or invalid binary: ${target}`,userActionRequired:!0,type:"error"})}catch(e2){isENOENT(e2)?messages.push({message:`installMethod is native, but ${APP_EXECUTABLE_NAME} command not found at ${dirs.executable}`,userActionRequired:!0,type:"error"}):await isPossibleClaudeBinary(dirs.executable)||messages.push({message:`${dirs.executable} exists but is not a valid ${APP_EXECUTABLE_NAME} binary`,userActionRequired:!0,type:"error"})}if(!(process.env.PATH||"").split(delimiter3).some(entry=>{try{let resolvedEntry=resolve29(entry);return isWindows2?resolvedEntry.toLowerCase()===resolvedLocalBinPath.toLowerCase():resolvedEntry===resolvedLocalBinPath}catch{return!1}}))if(isWindows2){let windowsBinPath=localBinDir.replace(/\//g,"\\");messages.push({message:`Native installation exists but ${windowsBinPath} is not in your PATH. Add it by opening: System Properties \u2192 Environment Variables \u2192 Edit User PATH \u2192 New \u2192 Add the path above. Then restart your terminal.`,userActionRequired:!0,type:"path"})}else{let shellType=getShellType(),configFile=getShellConfigPaths()[shellType],displayPath=configFile?configFile.replace(homedir19(),"~"):"your shell config file";messages.push({message:`Native installation exists but ~/.local/bin is not in your PATH. Run:
2626
2626
 
2627
2627
  echo 'export PATH="$HOME/.local/bin:$PATH"' >> ${displayPath} && source ${displayPath}`,userActionRequired:!0,type:"path"})}return messages}function installLatest(channelOrVersion,forceReinstall=!1){if(forceReinstall)return installLatestImpl(channelOrVersion,forceReinstall);if(inFlightInstall)return logForDebugging("installLatest: joining in-flight call"),inFlightInstall;let promise2=installLatestImpl(channelOrVersion,forceReinstall);inFlightInstall=promise2;let clear2=__name(()=>{inFlightInstall=null},"clear");return promise2.then(clear2,clear2),promise2}async function installLatestImpl(channelOrVersion,forceReinstall=!1){let updateResult=await updateLatest(channelOrVersion,forceReinstall);return updateResult.success?(getGlobalConfig().installMethod!=="native"&&(saveGlobalConfig(current=>({...current,installMethod:"native",autoUpdates:!1,autoUpdatesProtectedForNative:!0})),logForDebugging('Native installer: Set installMethod to "native" and disabled legacy auto-updater for protection')),cleanupOldVersions(),{latestVersion:updateResult.latestVersion,wasUpdated:updateResult.success,lockFailed:!1}):{latestVersion:null,wasUpdated:!1,lockFailed:updateResult.lockFailed,lockHolderPid:updateResult.lockHolderPid}}async function getVersionFromSymlink(symlinkPath){try{let target=await readlink(symlinkPath),absoluteTarget=resolve29(dirname31(symlinkPath),target);if(await isPossibleClaudeBinary(absoluteTarget))return absoluteTarget}catch{}return null}function getLockFilePathFromVersionPath(dirs,versionPath){let versionName=basename18(versionPath);return join73(dirs.locks,`${versionName}.lock`)}async function lockCurrentVersion(){let dirs=getBaseDirectories();if(!process.execPath.includes(dirs.versions))return;let versionPath=resolve29(process.execPath);try{let lockfilePath=getLockFilePathFromVersionPath(dirs,versionPath);if(await mkdir15(dirs.locks,{recursive:!0}),isPidBasedLockingEnabled()){if(!await acquireProcessLifetimeLock(versionPath,lockfilePath)){logEvent("tengu_version_lock_failed",{is_pid_based:!0,is_lifetime_lock:!0}),logLockAcquisitionError(versionPath,new Error("Lock already held by another process"));return}logEvent("tengu_version_lock_acquired",{is_pid_based:!0,is_lifetime_lock:!0}),logForDebugging(`Acquired PID lock on running version: ${versionPath}`)}else{let release2;try{release2=await lock(versionPath,{stale:LOCK_STALE_MS,retries:0,lockfilePath,onCompromised:__name(err2=>{logForDebugging(`NON-FATAL: Lock on running version was compromised: ${err2.message}`,{level:"info"})},"onCompromised")}),logEvent("tengu_version_lock_acquired",{is_pid_based:!1,is_lifetime_lock:!0}),logForDebugging(`Acquired mtime-based lock on running version: ${versionPath}`),registerCleanup(async()=>{try{await release2?.()}catch{}})}catch(lockError){if(isENOENT(lockError)){logForDebugging(`Cannot lock current version - file does not exist: ${versionPath}`,{level:"info"});return}logEvent("tengu_version_lock_failed",{is_pid_based:!1,is_lifetime_lock:!0}),logLockAcquisitionError(versionPath,lockError);return}}}catch(error40){if(isENOENT(error40)){logForDebugging(`Cannot lock current version - file does not exist: ${versionPath}`,{level:"info"});return}logForDebugging(`NON-FATAL: Failed to lock current version during execution ${errorMessage(error40)}`,{level:"info"})}}function logLockAcquisitionError(versionPath,lockError){logError2(new Error(`NON-FATAL: Lock acquisition failed for ${versionPath} (expected in multi-process scenarios)`,{cause:lockError}))}async function forceRemoveLock(versionFilePath){let dirs=getBaseDirectories(),lockfilePath=getLockFilePathFromVersionPath(dirs,versionFilePath);try{await unlink9(lockfilePath),logForDebugging(`Force-removed lock file at ${lockfilePath}`)}catch(error40){logForDebugging(`Failed to force-remove lock file: ${errorMessage(error40)}`)}}async function cleanupOldVersions(){await Promise.resolve();let dirs=getBaseDirectories(),oneHourAgo=Date.now()-36e5;if(getPlatform2().startsWith("win32")){let executableDir=dirname31(dirs.executable);try{let files2=await readdir11(executableDir),cleanedCount=0;for(let file2 of files2)if(/^claude\.exe\.old\.\d+$/.test(file2))try{await unlink9(join73(executableDir,file2)),cleanedCount++}catch{}cleanedCount>0&&logForDebugging(`Cleaned up ${cleanedCount} old Windows executables on startup`)}catch(error40){isENOENT(error40)||logForDebugging(`Failed to clean up old Windows executables: ${error40}`)}}try{let stagingEntries=await readdir11(dirs.staging),stagingCleanedCount=0;for(let entry of stagingEntries){let stagingPath=join73(dirs.staging,entry);try{(await stat24(stagingPath)).mtime.getTime()<oneHourAgo&&(await rm4(stagingPath,{recursive:!0,force:!0}),stagingCleanedCount++,logForDebugging(`Cleaned up old staging directory: ${entry}`))}catch{}}stagingCleanedCount>0&&(logForDebugging(`Cleaned up ${stagingCleanedCount} orphaned staging directories`),logEvent("tengu_native_staging_cleanup",{cleaned_count:stagingCleanedCount}))}catch(error40){isENOENT(error40)||logForDebugging(`Failed to clean up staging directories: ${error40}`)}if(isPidBasedLockingEnabled()){let staleLocksCleaned=cleanupStaleLocks(dirs.locks);staleLocksCleaned>0&&(logForDebugging(`Cleaned up ${staleLocksCleaned} stale version locks`),logEvent("tengu_native_stale_locks_cleanup",{cleaned_count:staleLocksCleaned}))}let versionEntries;try{versionEntries=await readdir11(dirs.versions)}catch(error40){isENOENT(error40)||logForDebugging(`Failed to readdir versions directory: ${error40}`);return}let versionFiles=[],tempFilesCleanedCount=0;for(let entry of versionEntries){let entryPath=join73(dirs.versions,entry);if(/\.tmp\.\d+\.\d+$/.test(entry)){try{(await stat24(entryPath)).mtime.getTime()<oneHourAgo&&(await unlink9(entryPath),tempFilesCleanedCount++,logForDebugging(`Cleaned up orphaned temp install file: ${entry}`))}catch{}continue}try{let stats2=await stat24(entryPath);if(!stats2.isFile()||process.platform!=="win32"&&stats2.size>0&&(stats2.mode&73)===0)continue;versionFiles.push({name:entry,path:entryPath,resolvedPath:resolve29(entryPath),mtime:stats2.mtime})}catch{}}if(tempFilesCleanedCount>0&&(logForDebugging(`Cleaned up ${tempFilesCleanedCount} orphaned temp install files`),logEvent("tengu_native_temp_files_cleanup",{cleaned_count:tempFilesCleanedCount})),versionFiles.length!==0)try{let currentBinaryPath=process.execPath,protectedVersions=new Set;currentBinaryPath&&currentBinaryPath.includes(dirs.versions)&&protectedVersions.add(resolve29(currentBinaryPath));let currentSymlinkVersion=await getVersionFromSymlink(dirs.executable);currentSymlinkVersion&&protectedVersions.add(currentSymlinkVersion);for(let v2 of versionFiles){if(protectedVersions.has(v2.resolvedPath))continue;let lockFilePath=getLockFilePathFromVersionPath(dirs,v2.resolvedPath),hasActiveLock=!1;if(isPidBasedLockingEnabled())hasActiveLock=isLockActive(lockFilePath);else try{hasActiveLock=await check2(v2.resolvedPath,{stale:LOCK_STALE_MS,lockfilePath:lockFilePath})}catch{hasActiveLock=!1}hasActiveLock&&(protectedVersions.add(v2.resolvedPath),logForDebugging(`Protecting locked version from cleanup: ${v2.name}`))}let versionsToDelete=versionFiles.filter(v2=>!protectedVersions.has(v2.resolvedPath)).sort((a2,b3)=>b3.mtime.getTime()-a2.mtime.getTime()).slice(VERSION_RETENTION_COUNT);if(versionsToDelete.length===0){logEvent("tengu_native_version_cleanup",{total_count:versionFiles.length,deleted_count:0,protected_count:protectedVersions.size,retained_count:VERSION_RETENTION_COUNT,lock_failed_count:0,error_count:0});return}let deletedCount=0,lockFailedCount=0,errorCount=0;await Promise.all(versionsToDelete.map(async version3=>{try{await tryWithVersionLock(version3.path,async()=>{await unlink9(version3.path)})?deletedCount++:(lockFailedCount++,logForDebugging(`Skipping deletion of ${version3.name} - locked by another process`))}catch(error40){errorCount++,logError2(new Error(`Failed to delete version ${version3.name}: ${error40}`))}})),logEvent("tengu_native_version_cleanup",{total_count:versionFiles.length,deleted_count:deletedCount,protected_count:protectedVersions.size,retained_count:VERSION_RETENTION_COUNT,lock_failed_count:lockFailedCount,error_count:errorCount})}catch(error40){isENOENT(error40)||logError2(new Error(`Version cleanup failed: ${error40}`))}}async function isNpmSymlink(executablePath){let targetPath=executablePath;return(await lstat3(executablePath)).isSymbolicLink()&&(targetPath=await realpath8(executablePath)),targetPath.endsWith(".js")||targetPath.includes("node_modules")}async function removeInstalledSymlink(){let dirs=getBaseDirectories();try{if(await isNpmSymlink(dirs.executable)){logForDebugging(`Skipping removal of ${dirs.executable} - appears to be npm-managed`);return}await unlink9(dirs.executable),logForDebugging(`Removed claude symlink at ${dirs.executable}`)}catch(error40){if(isENOENT(error40))return;logError2(new Error(`Failed to remove claude symlink: ${error40}`))}}async function cleanupShellAliases(){let messages=[],configMap=getShellConfigPaths();for(let[shellType,configFile]of Object.entries(configMap))try{let lines=await readFileLines(configFile);if(!lines)continue;let{filtered,hadAlias}=filterClaudeAliases(lines);hadAlias&&(await writeFileLines(configFile,filtered),messages.push({message:`Removed claude alias from ${configFile}. Run: unalias claude`,userActionRequired:!0,type:"alias"}),logForDebugging(`Cleaned up claude alias from ${shellType} config`))}catch(error40){logError2(error40),messages.push({message:`Failed to clean up ${configFile}: ${error40}`,userActionRequired:!1,type:"error"})}return messages}async function manualRemoveNpmPackage(packageName){try{let prefixResult=await execFileNoThrowWithCwd("npm",["config","get","prefix"]);if(prefixResult.code!==0||!prefixResult.stdout)return{success:!1,error:"Failed to get npm global prefix"};let globalPrefix=prefixResult.stdout.trim(),manuallyRemoved=!1;async function tryRemove(filePath,description){try{return await unlink9(filePath),logForDebugging(`Manually removed ${description}: ${filePath}`),!0}catch{return!1}}if(__name(tryRemove,"tryRemove"),getPlatform2().startsWith("win32")){let binCmd=join73(globalPrefix,"claude.cmd"),binPs1=join73(globalPrefix,"claude.ps1"),binExe=join73(globalPrefix,APP_EXECUTABLE_NAME);await tryRemove(binCmd,"bin script")&&(manuallyRemoved=!0),await tryRemove(binPs1,"PowerShell script")&&(manuallyRemoved=!0),await tryRemove(binExe,"bin executable")&&(manuallyRemoved=!0)}else{let binSymlink=join73(globalPrefix,"bin","claude");await tryRemove(binSymlink,"bin symlink")&&(manuallyRemoved=!0)}if(manuallyRemoved){logForDebugging(`Successfully removed ${packageName} manually`);let nodeModulesPath=getPlatform2().startsWith("win32")?join73(globalPrefix,"node_modules",packageName):join73(globalPrefix,"lib","node_modules",packageName);return{success:!0,warning:`${packageName} executables removed, but node_modules directory was left intact for safety. You may manually delete it later at: ${nodeModulesPath}`}}else return{success:!1}}catch(manualError){return logForDebugging(`Manual removal failed: ${manualError}`,{level:"error"}),{success:!1,error:`Manual removal failed: ${manualError}`}}}async function attemptNpmUninstall(packageName){let{code,stderr}=await execFileNoThrowWithCwd("npm",["uninstall","-g",packageName],{cwd:process.cwd()});if(code===0)return logForDebugging(`Removed global npm installation of ${packageName}`),{success:!0};if(stderr&&!stderr.includes("npm ERR! code E404")){if(stderr.includes("npm error code ENOTEMPTY")){logForDebugging(`Failed to uninstall global npm package ${packageName}: ${stderr}`,{level:"error"}),logForDebugging("Attempting manual removal due to ENOTEMPTY error");let manualResult=await manualRemoveNpmPackage(packageName);if(manualResult.success)return{success:!0,warning:manualResult.warning};if(manualResult.error)return{success:!1,error:`Failed to remove global npm installation of ${packageName}: ${stderr}. Manual removal also failed: ${manualResult.error}`}}return logForDebugging(`Failed to uninstall global npm package ${packageName}: ${stderr}`,{level:"error"}),{success:!1,error:`Failed to remove global npm installation of ${packageName}: ${stderr}`}}return{success:!1}}async function cleanupNpmInstallations(){let errors=[],warnings=[],removed=0,activePackageResult=await attemptNpmUninstall(APP_NPM_PACKAGE_NAME);activePackageResult.success?(removed++,activePackageResult.warning&&warnings.push(activePackageResult.warning)):activePackageResult.error&&errors.push(activePackageResult.error);for(let packageName of LEGACY_NPM_PACKAGE_NAMES){let packageResult=await attemptNpmUninstall(packageName);packageResult.success?(removed++,packageResult.warning&&warnings.push(packageResult.warning)):packageResult.error&&errors.push(packageResult.error)}let localInstallDir=join73(homedir19(),".clavue","local");try{await rm4(localInstallDir,{recursive:!0}),removed++,logForDebugging(`Removed local installation at ${localInstallDir}`)}catch(error40){isENOENT(error40)||(errors.push(`Failed to remove ${localInstallDir}: ${error40}`),logForDebugging(`Failed to remove local installation: ${error40}`,{level:"error"}))}return{removed,errors,warnings}}var VERSION_RETENTION_COUNT,LOCK_STALE_MS,inFlightInstall,init_installer=__esm({"src/utils/nativeInstaller/installer.ts"(){init_analytics();init_autoUpdater();init_cleanupRegistry();init_config11();init_debug();init_doctorDiagnostic();init_env2();init_envDynamic();init_envUtils();init_errors2();init_execFileNoThrow();init_localInstaller();init_lockfile();init_log3();init_semver();init_shellConfig();init_update2();init_sleep2();init_xdg();init_download();init_pidLock();VERSION_RETENTION_COUNT=2,LOCK_STALE_MS=10080*60*1e3;__name(getPlatform2,"getPlatform");__name(getBinaryName,"getBinaryName");__name(getBaseDirectories,"getBaseDirectories");__name(isPossibleClaudeBinary,"isPossibleClaudeBinary");__name(getVersionPaths,"getVersionPaths");__name(tryWithVersionLock,"tryWithVersionLock");__name(atomicMoveToInstallPath,"atomicMoveToInstallPath");__name(installVersionFromPackage,"installVersionFromPackage");__name(installVersionFromBinary,"installVersionFromBinary");__name(installVersion,"installVersion");__name(performVersionUpdate,"performVersionUpdate");__name(versionIsAvailable,"versionIsAvailable");__name(updateLatest,"updateLatest");__name(removeDirectoryIfEmpty,"removeDirectoryIfEmpty");__name(updateSymlink,"updateSymlink");__name(checkInstall,"checkInstall");inFlightInstall=null;__name(installLatest,"installLatest");__name(installLatestImpl,"installLatestImpl");__name(getVersionFromSymlink,"getVersionFromSymlink");__name(getLockFilePathFromVersionPath,"getLockFilePathFromVersionPath");__name(lockCurrentVersion,"lockCurrentVersion");__name(logLockAcquisitionError,"logLockAcquisitionError");__name(forceRemoveLock,"forceRemoveLock");__name(cleanupOldVersions,"cleanupOldVersions");__name(isNpmSymlink,"isNpmSymlink");__name(removeInstalledSymlink,"removeInstalledSymlink");__name(cleanupShellAliases,"cleanupShellAliases");__name(manualRemoveNpmPackage,"manualRemoveNpmPackage");__name(attemptNpmUninstall,"attemptNpmUninstall");__name(cleanupNpmInstallations,"cleanupNpmInstallations")}});var init_nativeInstaller=__esm({"src/utils/nativeInstaller/index.ts"(){init_installer()}});function getSettingsWithAllErrors(){let result2=getSettingsWithErrors(),mcpErrors=["user","project","local"].flatMap(scope=>getMcpConfigsByScope(scope).errors);return{settings:result2.settings,errors:[...result2.errors,...mcpErrors]}}var init_allErrors=__esm({"src/utils/settings/allErrors.ts"(){init_config8();init_settings2();__name(getSettingsWithAllErrors,"getSettingsWithAllErrors")}});function buildSandboxProperties(){return[]}function buildIDEProperties(mcpClients,ideInstallationStatus=null,theme2){let ideClient=mcpClients?.find(client2=>client2.name==="ide");if(ideInstallationStatus){let ideName=toIDEDisplayName(ideInstallationStatus.ideType),pluginOrExtension=isJetBrainsIde(ideInstallationStatus.ideType)?"plugin":"extension";if(ideInstallationStatus.error){let isStartupAutoInstall=isStartupAutoIDEInstallError(ideInstallationStatus),icon=isStartupAutoInstall?color("warning",theme2)(figures_default.warning):color("error",theme2)(figures_default.cross),summary=isStartupAutoInstall?`Could not auto-install ${ideName} ${pluginOrExtension}`:`Error installing ${ideName} ${pluginOrExtension}`,followUp=isStartupAutoInstall?"Clavue still works normally. To hide this diagnostic, disable auto-install IDE extension in /config, or run /ide after fixing your IDE CLI.":"Please restart your IDE and try again.";return[{label:"IDE",value:(0,import_jsx_runtime20.jsxs)(ThemedText,{children:[icon," ",summary,": ",ideInstallationStatus.error,`
2628
2628
  `,followUp]})}]}if(ideInstallationStatus.installed)return ideClient&&ideClient.type==="connected"?ideInstallationStatus.installedVersion!==ideClient.serverInfo?.version?[{label:"IDE",value:`Connected to ${ideName} ${pluginOrExtension} version ${ideInstallationStatus.installedVersion} (server version: ${ideClient.serverInfo?.version})`}]:[{label:"IDE",value:`Connected to ${ideName} ${pluginOrExtension} version ${ideInstallationStatus.installedVersion}`}]:[{label:"IDE",value:`Installed ${ideName} ${pluginOrExtension}`}]}else if(ideClient){let ideName=getIdeClientName(ideClient)??"IDE";return ideClient.type==="connected"?[{label:"IDE",value:`Connected to ${ideName} extension`}]:[{label:"IDE",value:`${color("error",theme2)(figures_default.cross)} Not connected to ${ideName}`}]}return[]}function buildMcpProperties(clients=[],theme2){let servers=clients.filter(client2=>client2.name!=="ide");if(!servers.length)return[];let byState={connected:0,pending:0,needsAuth:0,failed:0};for(let s2 of servers)s2.type==="connected"?byState.connected++:s2.type==="pending"?byState.pending++:s2.type==="needs-auth"?byState.needsAuth++:byState.failed++;let parts=[];return byState.connected&&parts.push(color("success",theme2)(`${byState.connected} connected`)),byState.needsAuth&&parts.push(color("warning",theme2)(`${byState.needsAuth} need auth`)),byState.pending&&parts.push(color("inactive",theme2)(`${byState.pending} pending`)),byState.failed&&parts.push(color("error",theme2)(`${byState.failed} failed`)),[{label:"MCP servers",value:`${parts.join(", ")} ${color("inactive",theme2)("\xB7 /mcp")}`}]}async function buildMemoryDiagnostics(){let files2=await getMemoryFiles(),largeFiles=getLargeMemoryFiles(files2),diagnostics=[];return largeFiles.forEach(file2=>{let displayPath=getDisplayPath(file2.path);diagnostics.push(`Large ${displayPath} will impact performance (${formatNumber(file2.content.length)} chars > ${formatNumber(MAX_MEMORY_CHARACTER_COUNT)})`)}),diagnostics}function buildSettingSourcesProperties(){return[{label:"Setting sources",value:getEnabledSettingSources().filter(source=>{let settings=getSettingsForSource(source);return settings!==null&&Object.keys(settings).length>0}).map(source=>{if(source==="policySettings"){let origin2=getPolicySettingsOrigin();if(origin2===null)return null;switch(origin2){case"remote":return"Enterprise managed settings (remote)";case"plist":return"Enterprise managed settings (plist)";case"hklm":return"Enterprise managed settings (HKLM)";case"file":{let{hasBase,hasDropIns}=getManagedFileSettingsPresence();return hasBase&&hasDropIns?"Enterprise managed settings (file + drop-ins)":hasDropIns?"Enterprise managed settings (drop-ins)":"Enterprise managed settings (file)"}case"hkcu":return"Enterprise managed settings (HKCU)"}}return getSettingSourceDisplayNameCapitalized(source)}).filter(name=>name!==null)}]}async function buildInstallationDiagnostics(){return(await checkInstall()).map(warning=>warning.message)}async function buildInstallationHealthDiagnostics(){let diagnostic=await getDoctorDiagnostic(),items=[],{errors:validationErrors}=getSettingsWithAllErrors();if(validationErrors.length>0){let fileList=Array.from(new Set(validationErrors.map(error40=>error40.file))).join(", ");items.push(`Found invalid settings files: ${fileList}. They will be ignored.`)}return diagnostic.warnings.forEach(warning=>{items.push(warning.issue)}),diagnostic.hasUpdatePermissions===!1&&items.push("No write permissions for auto-updates (requires sudo)"),items}function buildAccountProperties(){let accountInfo=getAccountInformation();if(!accountInfo)return[];let properties=[];return accountInfo.subscription&&properties.push({label:"Login method",value:`${accountInfo.subscription} Account`}),accountInfo.tokenSource&&properties.push({label:"Auth token",value:accountInfo.tokenSource}),accountInfo.apiKeySource&&properties.push({label:"API key",value:accountInfo.apiKeySource}),accountInfo.organization&&!process.env.IS_DEMO&&properties.push({label:"Organization",value:accountInfo.organization}),accountInfo.email&&!process.env.IS_DEMO&&properties.push({label:"Email",value:accountInfo.email}),properties}function buildAPIProviderProperties(){let apiProvider=getAPIProvider(),properties=[];if(apiProvider!=="firstParty"){let providerLabel={bedrock:"AWS Bedrock",vertex:"Google Vertex AI",foundry:"Microsoft Foundry"}[apiProvider];properties.push({label:"API provider",value:providerLabel})}if(apiProvider==="firstParty"){let anthropicBaseUrl=process.env.ANTHROPIC_BASE_URL;anthropicBaseUrl&&properties.push({label:"Anthropic base URL",value:anthropicBaseUrl})}else if(apiProvider==="bedrock"){let bedrockBaseUrl=process.env.BEDROCK_BASE_URL;bedrockBaseUrl&&properties.push({label:"Bedrock base URL",value:bedrockBaseUrl}),properties.push({label:"AWS region",value:getAWSRegion()}),isEnvTruthy2(process.env.CLAUDE_CODE_SKIP_BEDROCK_AUTH)&&properties.push({value:"AWS auth skipped"})}else if(apiProvider==="vertex"){let vertexBaseUrl=process.env.VERTEX_BASE_URL;vertexBaseUrl&&properties.push({label:"Vertex base URL",value:vertexBaseUrl});let gcpProject=process.env.ANTHROPIC_VERTEX_PROJECT_ID;gcpProject&&properties.push({label:"GCP project",value:gcpProject}),properties.push({label:"Default region",value:getDefaultVertexRegion()}),isEnvTruthy2(process.env.CLAUDE_CODE_SKIP_VERTEX_AUTH)&&properties.push({value:"GCP auth skipped"})}else if(apiProvider==="foundry"){let foundryBaseUrl=process.env.ANTHROPIC_FOUNDRY_BASE_URL;foundryBaseUrl&&properties.push({label:"Microsoft Foundry base URL",value:foundryBaseUrl});let foundryResource=process.env.ANTHROPIC_FOUNDRY_RESOURCE;foundryResource&&properties.push({label:"Microsoft Foundry resource",value:foundryResource}),isEnvTruthy2(process.env.CLAUDE_CODE_SKIP_FOUNDRY_AUTH)&&properties.push({value:"Microsoft Foundry auth skipped"})}let proxyUrl=getProxyUrl();proxyUrl&&properties.push({label:"Proxy",value:proxyUrl});let mtlsConfig=getMTLSConfig();return process.env.NODE_EXTRA_CA_CERTS&&properties.push({label:"Additional CA cert(s)",value:process.env.NODE_EXTRA_CA_CERTS}),mtlsConfig&&(mtlsConfig.cert&&process.env.CLAUDE_CODE_CLIENT_CERT&&properties.push({label:"mTLS client cert",value:process.env.CLAUDE_CODE_CLIENT_CERT}),mtlsConfig.key&&process.env.CLAUDE_CODE_CLIENT_KEY&&properties.push({label:"mTLS client key",value:process.env.CLAUDE_CODE_CLIENT_KEY})),properties}function getModelDisplayLabel(mainLoopModel){let modelLabel=modelDisplayString(mainLoopModel);if(mainLoopModel===null&&isClaudeAISubscriber()){let description=getClaudeAiUserDefaultModelDescription();modelLabel=`${source_default.bold("Default")} ${description}`}return modelLabel}var import_jsx_runtime20,init_status=__esm({"src/utils/status.tsx"(){init_source();init_figures();init_ink();init_auth6();init_claudemd();init_doctorDiagnostic();init_envUtils();init_file2();init_format();init_ide();init_ideInstallationStatus();init_model3();init_providers();init_mtls();init_nativeInstaller();init_proxy();init_sandbox_adapter();init_allErrors();init_constants6();init_settings2();import_jsx_runtime20=__toESM(require_jsx_runtime());__name(buildSandboxProperties,"buildSandboxProperties");__name(buildIDEProperties,"buildIDEProperties");__name(buildMcpProperties,"buildMcpProperties");__name(buildMemoryDiagnostics,"buildMemoryDiagnostics");__name(buildSettingSourcesProperties,"buildSettingSourcesProperties");__name(buildInstallationDiagnostics,"buildInstallationDiagnostics");__name(buildInstallationHealthDiagnostics,"buildInstallationHealthDiagnostics");__name(buildAccountProperties,"buildAccountProperties");__name(buildAPIProviderProperties,"buildAPIProviderProperties");__name(getModelDisplayLabel,"getModelDisplayLabel")}});var auth_exports={};__export(auth_exports,{authLogin:()=>authLogin,authLogout:()=>authLogout,authStatus:()=>authStatus,installOAuthTokens:()=>installOAuthTokens});async function installOAuthTokens(tokens){await performLogout({clearOnboarding:!1});let profile=tokens.profile??await getOauthProfileFromOauthToken(tokens.accessToken);profile?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??void 0,billingType:profile.organization.billing_type??void 0,subscriptionCreatedAt:profile.organization.subscription_created_at??void 0,accountCreatedAt:profile.account.created_at}):tokens.tokenAccount&&storeOAuthAccountInfo({accountUuid:tokens.tokenAccount.uuid,emailAddress:tokens.tokenAccount.emailAddress,organizationUuid:tokens.tokenAccount.organizationUuid});let storageResult=saveOAuthTokensIfNeeded(tokens);if(clearOAuthTokenCache(),storageResult.warning&&logEvent("tengu_oauth_storage_warning",{warning:storageResult.warning}),await fetchAndStoreUserRoles(tokens.accessToken).catch(err2=>logForDebugging(String(err2),{level:"error"})),shouldUseClaudeAIAuth(tokens.scopes))await fetchAndStoreClaudeCodeFirstTokenDate().catch(err2=>logForDebugging(String(err2),{level:"error"}));else if(!await createAndStoreApiKey(tokens.accessToken))throw new Error("Unable to create API key. The server accepted the request but did not return a key.");await clearAuthRelatedCaches()}async function authLogin({email:email3,sso,console:useConsole,claudeai}){useConsole&&claudeai&&(process.stderr.write(`Error: --console and --claudeai cannot be used together.
@@ -5561,10 +5561,10 @@ Once they complete the flow, the server's tools will become available automatica
5561
5561
  [OUTPUT TRUNCATED - exceeded ${getMaxMcpOutputTokens()} token limit]
5562
5562
 
5563
5563
  The tool output was truncated. If this MCP server provides pagination or filtering tools, use them to retrieve specific portions of the data. If pagination is not available, inform the user that you are working with truncated output and results may be incomplete.`}function truncateString(content,maxChars){return content.length<=maxChars?content:content.slice(0,maxChars)}async function truncateContentBlocks(blocks,maxChars){let result2=[],currentChars=0;for(let block of blocks)if(isTextBlock(block)){let remainingChars=maxChars-currentChars;if(remainingChars<=0)break;if(block.text.length<=remainingChars)result2.push(block),currentChars+=block.text.length;else{result2.push({type:"text",text:block.text.slice(0,remainingChars)});break}}else if(isImageBlock(block)){let imageChars=IMAGE_TOKEN_ESTIMATE*4;if(currentChars+imageChars<=maxChars)result2.push(block),currentChars+=imageChars;else{let remainingChars=maxChars-currentChars;if(remainingChars>0){let remainingBytes=Math.floor(remainingChars*.75);try{let compressedBlock=await compressImageBlock(block,remainingBytes);result2.push(compressedBlock),compressedBlock.source.type==="base64"?currentChars+=compressedBlock.source.data.length:currentChars+=imageChars}catch{}}}}else result2.push(block);return result2}async function mcpContentNeedsTruncation(content){if(!content||getContentSizeEstimate(content)<=getMaxMcpOutputTokens()*MCP_TOKEN_COUNT_THRESHOLD_FACTOR)return!1;try{let tokenCount=await countMessagesTokensWithAPI(typeof content=="string"?[{role:"user",content}]:[{role:"user",content}],[]);return!!(tokenCount&&tokenCount>getMaxMcpOutputTokens())}catch(error40){return logError2(error40),!1}}async function truncateMcpContent(content){if(!content)return content;let maxChars=getMaxMcpOutputChars(),truncationMsg=getTruncationMessage();if(typeof content=="string")return truncateString(content,maxChars)+truncationMsg;{let truncatedBlocks=await truncateContentBlocks(content,maxChars);return truncatedBlocks.push({type:"text",text:truncationMsg}),truncatedBlocks}}async function truncateMcpContentIfNeeded(content){return await mcpContentNeedsTruncation(content)?await truncateMcpContent(content):content}var MCP_TOKEN_COUNT_THRESHOLD_FACTOR,IMAGE_TOKEN_ESTIMATE,DEFAULT_MAX_MCP_OUTPUT_TOKENS,init_mcpValidation=__esm({"src/utils/mcpValidation.ts"(){init_growthbook();init_tokenEstimation();init_imageResizer();init_log3();MCP_TOKEN_COUNT_THRESHOLD_FACTOR=.5,IMAGE_TOKEN_ESTIMATE=1600,DEFAULT_MAX_MCP_OUTPUT_TOKENS=25e3;__name(getMaxMcpOutputTokens,"getMaxMcpOutputTokens");__name(isTextBlock,"isTextBlock");__name(isImageBlock,"isImageBlock");__name(getContentSizeEstimate,"getContentSizeEstimate");__name(getMaxMcpOutputChars,"getMaxMcpOutputChars");__name(getTruncationMessage,"getTruncationMessage");__name(truncateString,"truncateString");__name(truncateContentBlocks,"truncateContentBlocks");__name(mcpContentNeedsTruncation,"mcpContentNeedsTruncation");__name(truncateMcpContent,"truncateMcpContent");__name(truncateMcpContentIfNeeded,"truncateMcpContentIfNeeded")}});async function transformResultContent(resultContent,serverName){switch(resultContent.type){case"text":return[{type:"text",text:resultContent.text}];case"audio":{let audioData=resultContent;return await persistBlobToTextBlock(Buffer.from(audioData.data,"base64"),audioData.mimeType,serverName,`[Audio from ${serverName}] `)}case"image":return await transformImageContent(String(resultContent.data??""),resultContent.mimeType,serverName);case"resource":{let resource=resultContent.resource,prefix=`[Resource from ${serverName} at ${resource.uri}] `;if("text"in resource)return[{type:"text",text:`${prefix}${resource.text}`}];if("blob"in resource)if(IMAGE_MIME_TYPES.has(resource.mimeType??"")){let imageBlocks=await transformImageContent(String(resource.blob??""),resource.mimeType,serverName);return prefix?[{type:"text",text:prefix},...imageBlocks]:imageBlocks}else return await persistBlobToTextBlock(Buffer.from(resource.blob,"base64"),resource.mimeType,serverName,prefix);return[]}case"resource_link":{let resourceLink=resultContent,text3=`[Resource link: ${resourceLink.name}] ${resourceLink.uri}`;return resourceLink.description&&(text3+=` (${resourceLink.description})`),[{type:"text",text:text3}]}default:return[]}}function normalizeBase64ImagePayload(raw){let s2=String(raw||"").trim();if(!s2)return"";let dataUrl=/^data:image\/[a-z0-9.+-]+;base64,(.+)$/i.exec(s2);dataUrl?.[1]&&(s2=dataUrl[1]),s2=s2.replace(/\s+/g,""),/[-_]/.test(s2)&&!/[+/]/.test(s2.slice(0,80))?s2=s2.replace(/-/g,"+").replace(/_/g,"/"):/[-_]/.test(s2)&&(s2=s2.replace(/-/g,"+").replace(/_/g,"/"));let pad7=s2.length%4;return pad7===2?s2+="==":pad7===3?s2+="=":pad7===1&&(s2+="==="),s2}function looksLikeImageBuffer(buf){return buf.length<8?!1:buf[0]===137&&buf[1]===80&&buf[2]===78&&buf[3]===71||buf[0]===255&&buf[1]===216&&buf[2]===255||buf[0]===71&&buf[1]===73&&buf[2]===70||buf[0]===82&&buf[1]===73&&buf[2]===70&&buf[3]===70&&buf.length>=12&&buf[8]===87&&buf[9]===69&&buf[10]===66&&buf[11]===80}async function transformImageContent(rawData,mimeType,serverName){try{let b64=normalizeBase64ImagePayload(rawData);if(!b64)return[{type:"text",text:`[Image from ${serverName}] empty image payload \u2014 tool returned no data.`}];!/^[A-Za-z0-9+/]+=*$/.test(b64.slice(0,64))&&b64.length>64;let imageBuffer;try{imageBuffer=Buffer.from(b64,"base64")}catch(err2){return[{type:"text",text:`[Image from ${serverName}] invalid base64 (${errorMessage2(err2)}).`}]}if(imageBuffer.length<32)return[{type:"text",text:`[Image from ${serverName}] payload too small (${imageBuffer.length} bytes) \u2014 likely truncated.`}];looksLikeImageBuffer(imageBuffer)||logMCPError(serverName,`image magic bytes unrecognized (len=${imageBuffer.length}); attempting decode anyway`);let ext=mimeType?.split("/")[1]?.split("+")[0]||"png",outBuffer,outMediaType;try{let resized=await maybeResizeAndDownsampleImageBuffer(imageBuffer,imageBuffer.length,ext);outBuffer=resized.buffer,outMediaType=`image/${resized.mediaType}`;let trimmed=await applyTokenBudgetToImage(outBuffer,outMediaType);trimmed&&(outBuffer=trimmed.buffer,outMediaType=trimmed.mediaType)}catch(err2){return logMCPError(serverName,`image resize failed (${errorMessage2(err2)}); persisting blob`),await persistBlobToTextBlock(imageBuffer,mimeType||"image/png",serverName,`[Image from ${serverName}] `)}return!outBuffer||outBuffer.length<32?[{type:"text",text:`[Image from ${serverName}] resize produced empty buffer \u2014 original ${imageBuffer.length} bytes.`}]:[{type:"image",source:{data:outBuffer.toString("base64"),media_type:outMediaType,type:"base64"}}]}catch(err2){return logMCPError(serverName,`transformImageContent fatal: ${errorMessage2(err2)}`),[{type:"text",text:`[Image from ${serverName}] failed to process screenshot: ${errorMessage2(err2)}`}]}}function errorMessage2(err2){return err2 instanceof Error?err2.message:String(err2)}async function persistBlobToTextBlock(bytes,mimeType,serverName,sourceDescription){let persistId=`mcp-${normalizeNameForMCP(serverName)}-blob-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,result2=await persistBinaryContent(bytes,mimeType,persistId);return"error"in result2?[{type:"text",text:`${sourceDescription}Binary content (${mimeType||"unknown type"}, ${bytes.length} bytes) could not be saved to disk: ${result2.error}`}]:[{type:"text",text:getBinaryBlobSavedMessage(result2.filepath,mimeType,result2.size,sourceDescription)}]}function inferCompactSchema(value,depth=2){if(value===null)return"null";if(Array.isArray(value))return value.length===0?"[]":`[${inferCompactSchema(value[0],depth-1)}]`;if(typeof value=="object"){if(depth<=0)return"{...}";let props=Object.entries(value).slice(0,10).map(([k2,v2])=>`${k2}: ${inferCompactSchema(v2,depth-1)}`),suffix=Object.keys(value).length>10?", ...":"";return`{${props.join(", ")}${suffix}}`}return typeof value}async function transformMCPResult(result2,tool,name){if(result2&&typeof result2=="object"){if("toolResult"in result2)return{content:String(result2.toolResult),type:"toolResult"};if("structuredContent"in result2&&result2.structuredContent!==void 0)return{content:jsonStringify(result2.structuredContent),type:"structuredContent",schema:inferCompactSchema(result2.structuredContent)};if("content"in result2&&Array.isArray(result2.content)){let transformedContent=(await Promise.all(result2.content.map(item=>transformResultContent(item,name)))).flat();return{content:transformedContent,type:"contentArray",schema:inferCompactSchema(transformedContent)}}}let errorMessage3=`MCP server "${name}" tool "${tool}": unexpected response format`;throw logMCPError(name,errorMessage3),new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(errorMessage3,"MCP tool unexpected response format")}function contentContainsImages(content){return!content||typeof content=="string"?!1:content.some(block=>block.type==="image")}async function processMCPResult(result2,tool,name){let{content,type,schema}=await transformMCPResult(result2,tool,name);if(name==="ide"||!await mcpContentNeedsTruncation(content))return content;let sizeEstimateTokens=getContentSizeEstimate(content);if(isEnvDefinedFalsy(process.env.ENABLE_MCP_LARGE_OUTPUT_FILES))return logEvent("tengu_mcp_large_result_handled",{outcome:"truncated",reason:"env_disabled",sizeEstimateTokens}),await truncateMcpContentIfNeeded(content);if(!content)return content;if(contentContainsImages(content))return logEvent("tengu_mcp_large_result_handled",{outcome:"truncated",reason:"contains_images",sizeEstimateTokens}),await truncateMcpContentIfNeeded(content);let timestamp=Date.now(),persistId=`mcp-${normalizeNameForMCP(name)}-${normalizeNameForMCP(tool)}-${timestamp}`,contentStr=typeof content=="string"?content:jsonStringify(content,null,2),persistResult=await persistToolResult(contentStr,persistId);if(isPersistError(persistResult)){let contentLength=contentStr.length;return logEvent("tengu_mcp_large_result_handled",{outcome:"truncated",reason:"persist_failed",sizeEstimateTokens}),`Error: result (${contentLength.toLocaleString()} characters) exceeds maximum allowed tokens. Failed to save output to file: ${persistResult.error}. If this MCP server provides pagination or filtering tools, use them to retrieve specific portions of the data.`}logEvent("tengu_mcp_large_result_handled",{outcome:"persisted",reason:"file_saved",sizeEstimateTokens,persistedSizeChars:persistResult.originalSize});let formatDescription=getFormatDescription(type,schema);return getLargeOutputInstructions(persistResult.filepath,persistResult.originalSize,formatDescription)}var IMAGE_MIME_TYPES,init_resultTransform=__esm({"src/services/mcp/resultTransform.ts"(){init_envUtils();init_errors2();init_imageResizer();init_log3();init_mcpOutputStorage();init_mcpValidation();init_normalization();init_slowOperations();init_toolResultStorage();init_analytics();IMAGE_MIME_TYPES=new Set(["image/jpeg","image/png","image/gif","image/webp"]);__name(transformResultContent,"transformResultContent");__name(normalizeBase64ImagePayload,"normalizeBase64ImagePayload");__name(looksLikeImageBuffer,"looksLikeImageBuffer");__name(transformImageContent,"transformImageContent");__name(errorMessage2,"errorMessage");__name(persistBlobToTextBlock,"persistBlobToTextBlock");__name(inferCompactSchema,"inferCompactSchema");__name(transformMCPResult,"transformMCPResult");__name(contentContainsImages,"contentContainsImages");__name(processMCPResult,"processMCPResult")}});function isMcpTransientToolCallError(error40){if(!(error40 instanceof Error)||error40.name==="AbortError"||error40 instanceof McpAuthError||error40 instanceof McpSessionExpiredError||error40 instanceof McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS)return!1;let code="code"in error40?error40.code:void 0;return typeof code=="number"&&(code===-32e3||code===-32001)||typeof code=="string"&&TRANSIENT_TOOL_CALL_ERROR_SUBSTRINGS.includes(code)?!0:TRANSIENT_TOOL_CALL_ERROR_SUBSTRINGS.some(fragment=>error40.message.includes(fragment))}async function callMCPTool({client:{client:client2,name,config:config3},tool,args,meta,signal,onProgress},{clearServerCache:clearServerCache2}){let toolStartTime=Date.now(),progressInterval;try{logMCPDebug(name,`Calling MCP tool: ${tool}`),progressInterval=setInterval((startTime,name2,tool2)=>{let elapsed2=Date.now()-startTime,duration4=`${Math.floor(elapsed2/1e3)}s`;logMCPDebug(name2,`Tool '${tool2}' still running (${duration4} elapsed)`)},3e4,toolStartTime,name,tool);let timeoutMs=getMcpToolTimeoutMs(),timeoutId,timeoutPromise=new Promise((_2,reject2)=>{timeoutId=setTimeout((reject3,name2,tool2,timeoutMs2)=>{reject3(new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(`MCP server "${name2}" tool "${tool2}" timed out after ${Math.floor(timeoutMs2/1e3)}s`,"MCP tool timeout"))},timeoutMs,reject2,name,tool,timeoutMs)}),result2=await Promise.race([client2.callTool({name:tool,arguments:args,_meta:meta},CallToolResultSchema,{signal,timeout:timeoutMs,onprogress:onProgress?sdkProgress=>{onProgress({type:"mcp_progress",status:"progress",serverName:name,toolName:tool,progress:sdkProgress.progress,total:sdkProgress.total,progressMessage:sdkProgress.message})}:void 0}),timeoutPromise]).finally(()=>{timeoutId&&clearTimeout(timeoutId)});if("isError"in result2&&result2.isError){let errorDetails="Unknown error";if("content"in result2&&Array.isArray(result2.content)&&result2.content.length>0){let firstContent=result2.content[0];firstContent&&typeof firstContent=="object"&&"text"in firstContent&&(errorDetails=firstContent.text)}else"error"in result2&&(errorDetails=String(result2.error));throw logMCPError(name,errorDetails),new McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(errorDetails,"MCP tool returned error","_meta"in result2&&result2._meta?{_meta:result2._meta}:void 0)}let elapsed=Date.now()-toolStartTime,duration3=elapsed<1e3?`${elapsed}ms`:elapsed<6e4?`${Math.floor(elapsed/1e3)}s`:`${Math.floor(elapsed/6e4)}m ${Math.floor(elapsed%6e4/1e3)}s`;logMCPDebug(name,`Tool '${tool}' completed successfully in ${duration3}`);let codeIndexingTool=detectCodeIndexingFromMcpServerName(name);return codeIndexingTool&&logEvent("tengu_code_indexing_tool_used",{tool:codeIndexingTool,source:"mcp",success:!0}),{content:await processMCPResult(result2,tool,name),_meta:result2._meta,structuredContent:result2.structuredContent}}catch(e2){progressInterval!==void 0&&clearInterval(progressInterval);let elapsed=Date.now()-toolStartTime;if(e2 instanceof Error&&e2.name!=="AbortError"&&logMCPDebug(name,`Tool '${tool}' failed after ${Math.floor(elapsed/1e3)}s: ${e2.message}`),e2 instanceof Error){if(("code"in e2?e2.code:void 0)===401||e2 instanceof UnauthorizedError)throw logMCPDebug(name,"Tool call returned 401 Unauthorized - token may have expired"),logEvent("tengu_mcp_tool_call_auth_error",{}),new McpAuthError(name,`MCP server "${name}" requires re-authorization (token expired)`);let isSessionExpired=isMcpSessionExpiredError(e2),isConnectionClosedOnHttp="code"in e2&&e2.code===-32e3&&e2.message.includes("Connection closed")&&(config3.type==="http"||config3.type==="claudeai-proxy");if(isSessionExpired||isConnectionClosedOnHttp)throw logMCPDebug(name,`MCP session expired during tool call (${isSessionExpired?"404/-32001":"connection closed"}), clearing connection cache for re-initialization`),logEvent("tengu_mcp_session_expired",{}),await clearServerCache2(name,config3),new McpSessionExpiredError(name)}if(!(e2 instanceof Error)||e2.name!=="AbortError")throw e2;return{content:void 0}}finally{progressInterval!==void 0&&clearInterval(progressInterval)}}var TRANSIENT_TOOL_CALL_ERROR_SUBSTRINGS,init_toolCaller=__esm({"src/services/mcp/toolCaller.ts"(){init_types3();init_auth3();init_analytics();init_codeIndexing();init_errors2();init_log3();init_resultTransform();init_utils10();TRANSIENT_TOOL_CALL_ERROR_SUBSTRINGS=["Connection closed","ECONNRESET","ETIMEDOUT","EPIPE","EHOSTUNREACH","ECONNREFUSED","Body Timeout Error","SSE stream disconnected","Failed to reconnect SSE stream","Maximum reconnection attempts"];__name(isMcpTransientToolCallError,"isMcpTransientToolCallError");__name(callMCPTool,"callMCPTool")}});var toolRendering_exports={};__export(toolRendering_exports,{getClaudeInChromeMCPToolOverrides:()=>getClaudeInChromeMCPToolOverrides,renderChromeToolResultMessage:()=>renderChromeToolResultMessage});function renderChromeToolUseMessage(input2,toolName5,verbose){let tabId=input2.tabId;typeof tabId=="number"&&trackClaudeInChromeTabId(tabId);let secondaryInfo=[];switch(toolName5){case"navigate":if(typeof input2.url=="string")try{let url3=new URL(input2.url);secondaryInfo.push(url3.hostname)}catch{secondaryInfo.push(truncateToWidth(input2.url,30))}break;case"find":typeof input2.query=="string"&&secondaryInfo.push(`pattern: ${truncateToWidth(input2.query,30)}`);break;case"computer":if(typeof input2.action=="string"){let action=input2.action;action==="left_click"||action==="right_click"||action==="double_click"||action==="middle_click"?typeof input2.ref=="string"?secondaryInfo.push(`${action} on ${input2.ref}`):Array.isArray(input2.coordinate)?secondaryInfo.push(`${action} at (${input2.coordinate.join(", ")})`):secondaryInfo.push(action):action==="type"&&typeof input2.text=="string"?secondaryInfo.push(`type "${truncateToWidth(input2.text,15)}"`):action==="key"&&typeof input2.text=="string"?secondaryInfo.push(`key ${input2.text}`):action==="scroll"&&typeof input2.scroll_direction=="string"?secondaryInfo.push(`scroll ${input2.scroll_direction}`):action==="wait"&&typeof input2.duration=="number"?secondaryInfo.push(`wait ${input2.duration}s`):action==="left_click_drag"?secondaryInfo.push("drag"):secondaryInfo.push(action)}break;case"gif_creator":typeof input2.action=="string"&&secondaryInfo.push(`${input2.action}`);break;case"resize_window":typeof input2.width=="number"&&typeof input2.height=="number"&&secondaryInfo.push(`${input2.width}x${input2.height}`);break;case"read_console_messages":typeof input2.pattern=="string"&&secondaryInfo.push(`pattern: ${truncateToWidth(input2.pattern,20)}`),input2.onlyErrors===!0&&secondaryInfo.push("errors only");break;case"read_network_requests":typeof input2.urlPattern=="string"&&secondaryInfo.push(`pattern: ${truncateToWidth(input2.urlPattern,20)}`);break;case"shortcuts_execute":typeof input2.shortcutId=="string"&&secondaryInfo.push(`shortcut_id: ${input2.shortcutId}`);break;case"javascript_tool":return verbose&&typeof input2.text=="string"?input2.text:"";case"tabs_create_mcp":case"tabs_context_mcp":case"form_input":case"shortcuts_list":case"read_page":case"upload_image":case"get_page_text":case"update_plan":return""}return secondaryInfo.join(", ")||null}function renderChromeViewTabLink(input2){if(!supportsHyperlinks2()||typeof input2!="object"||input2===null||!("tabId"in input2))return null;let tabId=typeof input2.tabId=="number"?input2.tabId:typeof input2.tabId=="string"?parseInt(input2.tabId,10):NaN;if(isNaN(tabId))return null;let linkUrl=`${CHROME_EXTENSION_FOCUS_TAB_URL_BASE}${tabId}`;return(0,import_jsx_runtime57.jsxs)(ThemedText,{children:[" ",(0,import_jsx_runtime57.jsx)(Link,{url:linkUrl,children:(0,import_jsx_runtime57.jsx)(ThemedText,{color:"subtle",children:"[View Tab]"})})]})}function renderChromeToolResultMessage(output2,toolName5,verbose){if(verbose)return renderToolResultMessage(output2,[],{verbose});let summary=null;switch(toolName5){case"navigate":summary="Navigation completed";break;case"tabs_create_mcp":summary="Tab created";break;case"tabs_context_mcp":summary="Tabs read";break;case"form_input":summary="Input completed";break;case"computer":summary="Action completed";break;case"resize_window":summary="Window resized";break;case"find":summary="Search completed";break;case"gif_creator":summary="GIF action completed";break;case"read_console_messages":summary="Console messages retrieved";break;case"read_network_requests":summary="Network requests retrieved";break;case"shortcuts_list":summary="Shortcuts retrieved";break;case"shortcuts_execute":summary="Shortcut executed";break;case"javascript_tool":summary="Script executed";break;case"read_page":summary="Page read";break;case"upload_image":summary="Image uploaded";break;case"get_page_text":summary="Page text retrieved";break;case"update_plan":summary="Plan updated";break}return summary?(0,import_jsx_runtime57.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime57.jsx)(ThemedText,{dimColor:!0,children:summary})}):null}function getClaudeInChromeMCPToolOverrides(toolName5){return{userFacingName(_input){return`Clavue Browser[${toolName5.replace(/_mcp$/,"")}]`},renderToolUseMessage(input2,{verbose}){return renderChromeToolUseMessage(input2,toolName5,verbose)},renderToolUseTag(input2){return renderChromeViewTabLink(input2)},renderToolResultMessage(output2,_progressMessagesForMessage,{verbose}){return isMCPToolResult(output2)?renderChromeToolResultMessage(output2,toolName5,verbose):null}}}function isMCPToolResult(output2){return typeof output2=="object"&&output2!==null}var import_jsx_runtime57,CHROME_EXTENSION_FOCUS_TAB_URL_BASE,init_toolRendering=__esm({"src/utils/claudeInChrome/toolRendering.tsx"(){init_MessageResponse();init_supportsHyperlinks();init_ink();init_toolUiStub();init_format();init_common2();import_jsx_runtime57=__toESM(require_jsx_runtime()),CHROME_EXTENSION_FOCUS_TAB_URL_BASE="https://clau.de/chrome/tab/";__name(renderChromeToolUseMessage,"renderChromeToolUseMessage");__name(renderChromeViewTabLink,"renderChromeViewTabLink");__name(renderChromeToolResultMessage,"renderChromeToolResultMessage");__name(getClaudeInChromeMCPToolOverrides,"getClaudeInChromeMCPToolOverrides");__name(isMCPToolResult,"isMCPToolResult")}});var DEFAULT_GRANT_FLAGS,init_types17=__esm({"src/utils/computerUse/types.ts"(){DEFAULT_GRANT_FLAGS={clipboardRead:!1,clipboardWrite:!1,systemKeyCombos:!1}}});function getSentinelCategory(bundleId2){return SENTINELS[bundleId2]}var SENTINELS,init_sentinelApps=__esm({"src/utils/computerUse/sentinelApps.ts"(){SENTINELS={"com.apple.Terminal":"shell","com.googlecode.iterm2":"shell","com.mitchellh.ghostty":"shell","dev.warp.Warp-Stable":"shell","com.apple.finder":"filesystem","com.apple.systempreferences":"system_settings","com.apple.SystemSettings":"system_settings"};__name(getSentinelCategory,"getSentinelCategory")}});function ComputerUseActionApproval({risk,target,onDone}){return(0,import_jsx_runtime58.jsx)(Dialog,{title:"Confirm Computer Use action",onCancel:()=>onDone(!1),children:(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[(0,import_jsx_runtime58.jsx)(ThemedText,{children:target}),(0,import_jsx_runtime58.jsx)(ThemedText,{bold:!0,children:risk}),(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"UI labels may come from third-party content. Confirm only if this is the action you intend."}),(0,import_jsx_runtime58.jsx)(Select,{options:[{label:"Continue once",value:"continue"},{label:"Cancel",value:"cancel"}],onChange:value=>onDone(value==="continue"),onCancel:()=>onDone(!1)})]})})}function ComputerUseApproval({request,onDone}){return request.tccState?(0,import_jsx_runtime58.jsx)(ComputerUseTccPanel,{tccState:request.tccState,onDone:()=>onDone(DENY_ALL_RESPONSE)}):(0,import_jsx_runtime58.jsx)(ComputerUseAppListPanel,{request,onDone})}function ComputerUseTccPanel({tccState,onDone}){let options=(0,import_react43.useMemo)(()=>{let opts=[];return tccState.accessibility||opts.push({label:"Open System Settings \u2192 Accessibility",value:"open_accessibility"}),tccState.screenRecording||opts.push({label:"Open System Settings \u2192 Screen Recording",value:"open_screen_recording"}),opts.push({label:"Try again",value:"retry"}),opts},[tccState.accessibility,tccState.screenRecording]);function onChange(value){switch(value){case"open_accessibility":execFileNoThrow("open",["x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"],{useCwd:!1});return;case"open_screen_recording":execFileNoThrow("open",["x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture"],{useCwd:!1});return;case"retry":onDone();return}}return __name(onChange,"onChange"),(0,import_jsx_runtime58.jsx)(Dialog,{title:"Computer Use needs macOS permissions",onCancel:onDone,children:(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime58.jsxs)(ThemedText,{children:["Accessibility:"," ",tccState.accessibility?`${figures_default.tick} granted`:`${figures_default.cross} not granted`]}),(0,import_jsx_runtime58.jsxs)(ThemedText,{children:["Screen Recording:"," ",tccState.screenRecording?`${figures_default.tick} granted`:`${figures_default.cross} not granted`]})]}),(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:'Grant the missing permissions in System Settings, then select "Try again". macOS may require you to restart Clavue after granting Screen Recording.'}),(0,import_jsx_runtime58.jsx)(Select,{options,onChange,onCancel:onDone})]})})}function ComputerUseAppListPanel({request,onDone}){let[checked]=(0,import_react43.useState)(()=>new Set(request.apps.flatMap(a2=>a2.resolved&&!a2.alreadyGranted?[a2.resolved.bundleId]:[]))),ALL_FLAG_KEYS=["clipboardRead","clipboardWrite","systemKeyCombos"],requestedFlagKeys=(0,import_react43.useMemo)(()=>ALL_FLAG_KEYS.filter(k2=>request.requestedFlags[k2]),[request.requestedFlags]),options=(0,import_react43.useMemo)(()=>[{label:`Allow for this session (${checked.size} ${plural(checked.size,"app")})`,value:"allow_all"},{label:(0,import_jsx_runtime58.jsxs)(ThemedText,{children:["Deny, and tell Clavue what to do differently ",(0,import_jsx_runtime58.jsx)(ThemedText,{bold:!0,children:"(esc)"})]}),value:"deny"}],[checked.size]);function respond(allow){if(!allow){onDone(DENY_ALL_RESPONSE);return}let now3=Date.now(),granted=request.apps.flatMap(a2=>a2.resolved&&checked.has(a2.resolved.bundleId)?[{bundleId:a2.resolved.bundleId,displayName:a2.resolved.displayName,grantedAt:now3}]:[]),denied=request.apps.filter(a2=>!a2.resolved||!checked.has(a2.resolved.bundleId)).map(a2=>({bundleId:a2.resolved?.bundleId??a2.requestedName,reason:a2.resolved?"user_denied":"not_installed"})),flags={...DEFAULT_GRANT_FLAGS,...Object.fromEntries(requestedFlagKeys.map(k2=>[k2,!0]))};onDone({granted,denied,flags})}return __name(respond,"respond"),(0,import_jsx_runtime58.jsx)(Dialog,{title:"Computer Use wants to control these apps",onCancel:()=>respond(!1),children:(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[request.reason?(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:request.reason}):null,(0,import_jsx_runtime58.jsx)(ThemedText,{bold:!0,children:"Screen images and accessibility content from granted apps may be sent to your configured AI model provider for analysis."}),(0,import_jsx_runtime58.jsx)(ThemedBox_default,{flexDirection:"column",children:request.apps.map(a2=>{let resolved=a2.resolved;if(!resolved)return(0,import_jsx_runtime58.jsxs)(ThemedText,{dimColor:!0,children:[" ",figures_default.circle," ",a2.requestedName," ",(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"(not installed)"})]},a2.requestedName);if(a2.alreadyGranted)return(0,import_jsx_runtime58.jsxs)(ThemedText,{dimColor:!0,children:[" ",figures_default.tick," ",resolved.displayName," ",(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"(already granted)"})]},resolved.bundleId);let sentinel=getSentinelCategory(resolved.bundleId),isChecked=checked.has(resolved.bundleId);return(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime58.jsxs)(ThemedText,{children:[" ",isChecked?figures_default.circleFilled:figures_default.circle," ",resolved.displayName]}),sentinel?(0,import_jsx_runtime58.jsxs)(ThemedText,{bold:!0,children:[" ",figures_default.warning," ",SENTINEL_WARNING[sentinel]]}):null]},resolved.bundleId)})}),requestedFlagKeys.length>0?(0,import_jsx_runtime58.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime58.jsx)(ThemedText,{dimColor:!0,children:"Also requested:"}),requestedFlagKeys.map(flag=>{let flagName=String(flag);return(0,import_jsx_runtime58.jsxs)(ThemedText,{dimColor:!0,children:[" ","\xB7 ",flagName]},flagName)})]}):null,request.willHide&&request.willHide.length>0?(0,import_jsx_runtime58.jsxs)(ThemedText,{dimColor:!0,children:[request.willHide.length," other"," ",plural(request.willHide.length,"app")," will be hidden while Clavue works."]}):null,(0,import_jsx_runtime58.jsx)(Select,{options,onChange:v2=>respond(v2==="allow_all"),onCancel:()=>respond(!1)})]})})}var import_react43,import_jsx_runtime58,DENY_ALL_RESPONSE,SENTINEL_WARNING,init_ComputerUseApproval=__esm({"src/components/permissions/ComputerUseApproval/ComputerUseApproval.tsx"(){init_types17();init_sentinelApps();init_figures();import_react43=__toESM(require_react());init_ink();init_execFileNoThrow();init_stringUtils();init_select();init_Dialog();import_jsx_runtime58=__toESM(require_jsx_runtime());__name(ComputerUseActionApproval,"ComputerUseActionApproval");DENY_ALL_RESPONSE={granted:[],denied:[],flags:DEFAULT_GRANT_FLAGS};__name(ComputerUseApproval,"ComputerUseApproval");__name(ComputerUseTccPanel,"ComputerUseTccPanel");SENTINEL_WARNING={shell:"equivalent to shell access",filesystem:"can read/write any file",system_settings:"can change system settings"};__name(ComputerUseAppListPanel,"ComputerUseAppListPanel")}});import{appendFile as appendFile6,mkdir as mkdir41}from"fs/promises";import{join as join121}from"path";function auditPath(){return join121(getClaudeConfigHomeDir(),"cache","computer-use","audit.jsonl")}async function appendComputerUseAudit(event){try{let dir=join121(getClaudeConfigHomeDir(),"cache","computer-use");await mkdir41(dir,{recursive:!0});let line=jsonStringify({...event,ts:event.ts||new Date().toISOString()})+`
5564
- `;await appendFile6(auditPath(),line,{encoding:"utf-8",mode:384})}catch(error40){logForDebugging(`[computer-use] audit write failed: ${errorMessage(error40)}`)}}var init_audit=__esm({"src/utils/computerUse/audit.ts"(){init_envUtils();init_debug();init_errors2();init_slowOperations();__name(auditPath,"auditPath");__name(appendComputerUseAudit,"appendComputerUseAudit")}});function fmtCoord(c4){return c4?`(${c4[0]}, ${c4[1]})`:""}function getComputerUseMCPRenderingOverrides(toolName5){return{userFacingName(){return`Computer Use[${toolName5}]`},renderToolUseMessage(input2){switch(toolName5){case"screenshot":case"cursor_position":case"list_granted_applications":case"read_clipboard":case"computer_status":return"";case"left_click":case"right_click":case"double_click":case"triple_click":case"mouse_move":return fmtCoord(input2.coordinate);case"left_click_drag":return input2.start_coordinate?`${fmtCoord(input2.start_coordinate)} \u2192 ${fmtCoord(input2.coordinate)}`:`to ${fmtCoord(input2.coordinate)}`;case"type":return typeof input2.text=="string"?`"${truncateToWidth(input2.text,40)}"`:"";case"key":return typeof input2.text=="string"?input2.text:"";case"scroll":return[input2.direction,input2.amount&&`\xD7${input2.amount}`,input2.coordinate&&`at ${fmtCoord(input2.coordinate)}`].filter(Boolean).join(" ");case"zoom":{let r2=input2.region;return Array.isArray(r2)&&r2.length===4?`[${r2[0]}, ${r2[1]}, ${r2[2]}, ${r2[3]}]`:""}case"wait":return typeof input2.duration=="number"?`${input2.duration}s`:"";case"write_clipboard":return typeof input2.text=="string"?`"${truncateToWidth(input2.text,40)}"`:"";case"open_application":return typeof input2.bundle_id=="string"?String(input2.bundle_id):"";case"inspect_ui":return typeof input2.bundle_id=="string"?String(input2.bundle_id):"";case"find_label":case"click_text":return[typeof input2.bundle_id=="string"?input2.bundle_id:"",typeof input2.query=="string"?`"${truncateToWidth(input2.query,32)}"`:""].filter(Boolean).join(" ");case"ui_action":return[input2.action,input2.path].filter(v2=>typeof v2=="string").join(" ");case"request_access":{let apps=input2.apps;return Array.isArray(apps)?apps.map(a2=>typeof a2?.displayName=="string"?a2.displayName:"").filter(Boolean).join(", "):""}default:return""}},renderToolResultMessage(output2,_progress,{verbose}){if(verbose||typeof output2!="object"||output2===null)return null;let summary=RESULT_SUMMARY[toolName5];return summary?(0,import_jsx_runtime59.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime59.jsx)(ThemedText,{dimColor:!0,children:summary})}):null}}}var import_jsx_runtime59,RESULT_SUMMARY,init_toolRendering2=__esm({"src/utils/computerUse/toolRendering.tsx"(){init_MessageResponse();init_ink();init_format();import_jsx_runtime59=__toESM(require_jsx_runtime());__name(fmtCoord,"fmtCoord");RESULT_SUMMARY={screenshot:"Captured",zoom:"Captured",request_access:"Access updated",left_click:"Clicked",right_click:"Clicked",double_click:"Clicked",triple_click:"Clicked",type:"Typed",key:"Pressed",scroll:"Scrolled",left_click_drag:"Dragged",open_application:"Opened",inspect_ui:"Inspected",ui_action:"Updated",find_label:"Found",click_text:"Clicked",computer_status:"Checked"};__name(getComputerUseMCPRenderingOverrides,"getComputerUseMCPRenderingOverrides")}});function asRecord5(value){return value&&typeof value=="object"&&!Array.isArray(value)?value:null}function asString(value){return typeof value=="string"?value:""}function extractInspectElements(payload){let root2=asRecord5(payload),raw=Array.isArray(payload)?payload:Array.isArray(root2?.elements)?root2.elements:[],out=[];for(let row3 of raw){let r2=asRecord5(row3);if(!r2)continue;let path36=asString(r2.path),role=asString(r2.role).trim()||"AXUnknown";if(!("path"in r2)&&!role)continue;let frameRaw=asRecord5(r2.frame),frame=frameRaw&&typeof frameRaw.x=="number"&&typeof frameRaw.y=="number"&&typeof frameRaw.width=="number"&&typeof frameRaw.height=="number"?{x:frameRaw.x,y:frameRaw.y,width:frameRaw.width,height:frameRaw.height}:void 0,actions=Array.isArray(r2.actions)?r2.actions.filter(a2=>typeof a2=="string"):void 0;out.push({path:asString(r2.path),role,subrole:asString(r2.subrole)||void 0,title:asString(r2.title)||void 0,description:asString(r2.description)||void 0,identifier:asString(r2.identifier)||void 0,value:asString(r2.value)||void 0,enabled:typeof r2.enabled=="boolean"?r2.enabled:void 0,actions,frame})}return out}function elementSearchBlob(el){return[el.title,el.description,el.identifier,el.value,el.role,el.subrole].filter(Boolean).join(" | ")}function matchesLabel(el,query2,exact){let q2=query2.trim();if(!q2)return!1;let fields=[el.title,el.description,el.identifier,el.value].map(f3=>(f3??"").trim()).filter(Boolean);if(fields.length===0)return!1;if(exact){let ql2=q2.toLowerCase();return fields.some(f3=>f3.toLowerCase()===ql2)}let ql=q2.toLowerCase();return fields.some(f3=>f3.toLowerCase().includes(ql))}function isLikelyInteractive(el){let role=el.role;return!!(/AXButton|AXCheckBox|AXRadioButton|AXPopUpButton|AXMenuItem|AXLink|AXTab|AXComboBox|AXTextField|AXTextArea|AXSearchField|AXSlider|AXIncrementor/i.test(role)||el.actions?.some(a2=>/AXPress|AXConfirm|AXShowMenu|AXOpen/i.test(a2)))}function findElementsByLabel(elements,query2,options){let exact=options?.exact===!0,role=options?.role?.trim(),limit=Math.max(1,Math.min(options?.limit??12,50)),q2=query2.trim();if(!q2)return[];let hits=elements.filter(el=>role&&el.role!==role&&el.subrole!==role||el.enabled===!1?!1:matchesLabel(el,q2,exact));return hits=[...hits].sort((a2,b3)=>{let aTitle=(a2.title??"").toLowerCase(),bTitle=(b3.title??"").toLowerCase(),ql=q2.toLowerCase(),aExact=aTitle===ql?0:1,bExact=bTitle===ql?0:1;if(aExact!==bExact)return aExact-bExact;let aIx=isLikelyInteractive(a2)?0:1,bIx=isLikelyInteractive(b3)?0:1;return aIx!==bIx?aIx-bIx:aTitle.length-bTitle.length}),hits.slice(0,limit)}function pickClickAction(el){let actions=el.actions??[];return actions.some(a2=>a2==="AXPress"||/Press/i.test(a2))?"press":actions.some(a2=>a2==="AXConfirm"||/Confirm/i.test(a2))?"confirm":/AXTextField|AXTextArea|AXSearchField|AXComboBox/i.test(el.role)||actions.some(a2=>/AXFocus|Focus/i.test(a2))?"focus":/AXButton|AXCheckBox|AXRadioButton|AXMenuItem|AXLink|AXTab/i.test(el.role)?"press":null}function frameCenter(frame){return{x:Math.round(frame.x+frame.width/2),y:Math.round(frame.y+frame.height/2)}}function summarizeElement(el){return{path:el.path,role:el.role,title:el.title,description:el.description,value:el.value,enabled:el.enabled,actions:el.actions,frame:el.frame,blob:elementSearchBlob(el).slice(0,120)}}var COMPUTER_USE_VERIFY_NUDGE,init_uiFind=__esm({"src/utils/computerUse/uiFind.ts"(){init_efficiencyLaw();__name(asRecord5,"asRecord");__name(asString,"asString");__name(extractInspectElements,"extractInspectElements");__name(elementSearchBlob,"elementSearchBlob");__name(matchesLabel,"matchesLabel");__name(isLikelyInteractive,"isLikelyInteractive");__name(findElementsByLabel,"findElementsByLabel");__name(pickClickAction,"pickClickAction");__name(frameCenter,"frameCenter");__name(summarizeElement,"summarizeElement");COMPUTER_USE_VERIFY_NUDGE=getComputerUseVerifyNudgeText()}});var wrapper_exports2={};__export(wrapper_exports2,{buildSessionContext:()=>buildSessionContext,getComputerUseMCPToolOverrides:()=>getComputerUseMCPToolOverrides});function tuc(){return currentToolUseContext}function formatLockHeld(holder){return`Computer use is in use by another Clavue session (${holder.slice(0,8)}...). Wait for that session to finish or run /exit there.`}function updateComputerUseState(update3){tuc().setAppState(previous=>({...previous,computerUseMcpState:update3(previous.computerUseMcpState??{})}))}function buildSessionContext(){return{getAllowedApps:__name(()=>tuc().getAppState().computerUseMcpState?.allowedApps??[],"getAllowedApps"),getGrantFlags:__name(()=>tuc().getAppState().computerUseMcpState?.grantFlags??DEFAULT_GRANT_FLAGS,"getGrantFlags"),getSelectedDisplayId:__name(()=>tuc().getAppState().computerUseMcpState?.selectedDisplayId,"getSelectedDisplayId"),getLastScreenshotDims:__name(()=>{let dims=tuc().getAppState().computerUseMcpState?.lastScreenshotDims;return dims?{...dims,displayId:dims.displayId??0,originX:dims.originX??0,originY:dims.originY??0}:void 0},"getLastScreenshotDims"),getAbortSignal:__name(()=>tuc().abortController.signal,"getAbortSignal"),onPermissionRequest:__name(request=>runPermissionDialog(request),"onPermissionRequest"),onAllowedAppsChanged:__name((apps,flags)=>updateComputerUseState(state4=>({...state4,allowedApps:apps,grantFlags:flags})),"onAllowedAppsChanged"),onAppsHidden:__name(bundleIds=>{bundleIds.length!==0&&updateComputerUseState(state4=>({...state4,hiddenDuringTurn:new Set([...state4.hiddenDuringTurn??[],...bundleIds])}))},"onAppsHidden"),onScreenshotCaptured:__name(dims=>updateComputerUseState(state4=>({...state4,lastScreenshotDims:dims})),"onScreenshotCaptured"),checkCuLock:__name(async()=>{let result2=await checkComputerUseLock();return result2.kind==="free"?{holder:void 0,isSelf:!1}:result2.kind==="held_by_self"?{holder:getSessionId(),isSelf:!0}:{holder:result2.by,isSelf:!1}},"checkCuLock"),acquireCuLock:__name(async()=>{let result2=await tryAcquireComputerUseLock();if(result2.kind==="blocked")throw new Error(formatLockHeld(result2.by));if(result2.fresh){let escape2=await registerEscHotkey(()=>tuc().abortController.abort());tuc().sendOSNotification?.({message:escape2?"Clavue is using your computer - press Esc to stop":"Clavue is using your computer - press Ctrl+C to stop",notificationType:"computer_use_enter"})}},"acquireCuLock"),formatLockHeldMessage:formatLockHeld}}function text(content,isError2=!1){return{content:[{type:"text",text:content}],...isError2?{isError:isError2}:{}}}function objectText(value){return text(JSON.stringify(value))}function withVerifyNudge(result2,toolName5){if(result2.isError)return result2;let obligation=buildComputerUseVerifyObligation(toolName5),nudge=getComputerUseVerifyNudgeText(),content=result2.content.map(block=>{if(block.type!=="text"||typeof block.text!="string")return block;let raw=block.text.trim();if(!raw.startsWith("{")&&!raw.startsWith("["))return block;try{let parsed=JSON.parse(raw);if(parsed&&typeof parsed=="object"&&!Array.isArray(parsed))return{...block,text:JSON.stringify({...parsed,verifyObligation:obligation})}}catch{}return block});return{...result2,content:[...content,{type:"text",text:nudge}]}}async function assertScreenshotNotSensitiveFrontmost(){if(isComputerUseSensitiveAllowed())return;let frontmost=await getComputerUseFrontmostApp();if(frontmost&&isSensitiveComputerUseApp(frontmost.displayName,frontmost.bundleId))throw new Error(`Screenshot blocked: sensitive app frontmost (${frontmost.displayName||frontmost.bundleId}). Hide the vault or set CLAVUE_CU_ALLOW_SENSITIVE=1 only if intentional. A screenshot of a visible password is a leak.`)}async function ensureAppFrontmost(bundleId2){if((await getComputerUseFrontmostApp())?.bundleId===bundleId2)return;await openComputerUseApp(bundleId2),await sleep2(150);let activated=await getComputerUseFrontmostApp();if(activated?.bundleId!==bundleId2)throw new Error(`Could not bring ${bundleId2} to the foreground; ${activated?.displayName??"another application"} remains frontmost.`)}function stringArg(args,name){let value=args[name];if(typeof value!="string")throw new Error(`${name} must be a string`);return value}function numberArg(args,name,fallback){let value=args[name];if(value===void 0&&fallback!==void 0)return fallback;if(typeof value!="number"||!Number.isFinite(value))throw new Error(`${name} must be a finite number`);return value}function coordinateArg(args,name="coordinate"){let value=args[name];if(!Array.isArray(value)||value.length!==2||value.some(item=>typeof item!="number"||!Number.isFinite(item)))throw new Error(`${name} must be [x, y]`);return{x:value[0],y:value[1]}}function appByRequest(installed2,request){let normalized=request.trim().toLocaleLowerCase();return installed2.find(app=>app.bundleId.toLocaleLowerCase()===normalized)??installed2.find(app=>app.displayName.toLocaleLowerCase()===normalized)??installed2.find(app=>app.displayName.toLocaleLowerCase().includes(normalized))}function allowedSet(ctx){return new Set(ctx.getAllowedApps().map(app=>app.bundleId))}function requireAllowedBundle(ctx,bundleId2){if(!allowedSet(ctx).has(bundleId2))throw new Error(`Application ${bundleId2} is not granted. Call request_access first.`)}async function requireInputTarget(ctx){let frontmost=await getComputerUseFrontmostApp();if(!frontmost)throw new Error("No frontmost application is available.");let grant=ctx.getAllowedApps().find(app=>app.bundleId===frontmost.bundleId);if(!grant)throw new Error(`Frontmost application ${frontmost.displayName} (${frontmost.bundleId}) is not granted. Refusing keyboard input.`);return grant}async function requirePointTarget(ctx,point){let app=await getComputerUseAppUnderPoint(point.x,point.y);if(!app)throw new Error("No application window exists under that point.");let grant=ctx.getAllowedApps().find(candidate=>candidate.bundleId===app.bundleId);if(!grant)throw new Error(`Application under the point is ${app.displayName} (${app.bundleId}), which is not granted. Refusing pointer action.`);return grant}async function ensureLock(ctx){let state4=await ctx.checkCuLock();if(state4.holder&&!state4.isSelf)throw new Error(ctx.formatLockHeldMessage(state4.holder));state4.holder||await ctx.acquireCuLock()}async function ensureOsPermissions(){let state4=await getComputerUseCapabilities();if(!state4.accessibility||!state4.screenRecording)throw new Error(`macOS permissions missing: Accessibility=${state4.accessibility}, Screen Recording=${state4.screenRecording}. Call request_access to open the permission flow.`)}async function prepareGrantedApps(ctx){let hidden2=await prepareComputerUseApps([...allowedSet(ctx)]);ctx.onAppsHidden(hidden2)}async function assertScreenshotIsFiltered(ctx){let allowed=allowedSet(ctx),blocked=(await listVisibleComputerUseApps()).filter(app=>!allowed.has(app.bundleId)&&!SAFE_SYSTEM_CHROME.has(app.bundleId.toLowerCase()));if(blocked.length>0)throw new Error(`Screenshot blocked because ungranted windows remain visible: ${blocked.map(app=>`${app.displayName} (${app.bundleId})`).join(", ")}. Resolve or grant those windows, then retry.`)}function screenshotDims(capture,display){return{width:capture.width,height:capture.height,displayWidth:display.width,displayHeight:display.height,displayId:display.id,originX:display.x,originY:display.y}}function scaleFromScreenshot(ctx,point){let dims=ctx.getLastScreenshotDims();return dims?{x:Math.round(dims.originX+point.x*dims.displayWidth/dims.width),y:Math.round(dims.originY+point.y*dims.displayHeight/dims.height)}:point}function classifyRiskyElement(element){if(!element||typeof element!="object")return;let record2=element,target=[record2.title,record2.description,record2.identifier,record2.value].filter(value=>typeof value=="string").join(" | ");if(record2.subrole==="AXCloseButton")return{risk:"This will close a local window or tab and may discard unsaved work.",target:target||"macOS close control"};if(!target)return;let match=RISK_PATTERNS.find(candidate=>candidate.pattern.test(target));return match?{risk:match.risk,target}:void 0}function uiElementFingerprint(element){if(!element||typeof element!="object")return"";let record2=element;return JSON.stringify([record2.path,record2.role,record2.subrole,record2.title,record2.description,record2.identifier,record2.value])}async function confirmRiskyUiAction(element){let risk=classifyRiskyElement(element);if(!risk)return!1;if(!await runActionConfirmation(risk))throw new Error("Risky Computer Use action was cancelled by the user.");return!0}async function confirmDeclaredRisk(args,meta){let risk=stringArg(args,"risk"),intent=stringArg(args,"intent");if(risk==="none")return!1;if(!await runActionConfirmation({target:intent,risk:`The model declared this action as ${risk}.`}))throw isComputerUseConsentRisk(risk)&&appendComputerUseAudit({ts:new Date().toISOString(),tool:meta?.tool??"unknown",risk,intent,bundleId:meta?.bundleId,confirmed:!1,sessionId:getSessionId(),note:"user_cancelled"}),new Error("Declared-risk Computer Use action was cancelled by the user.");return isComputerUseConsentRisk(risk)&&appendComputerUseAudit({ts:new Date().toISOString(),tool:meta?.tool??"unknown",risk,intent,bundleId:meta?.bundleId,confirmed:!0,sessionId:getSessionId()}),!0}async function requestAccess(ctx,args){let requested=args.apps;if(!Array.isArray(requested)||requested.some(item=>typeof item!="string"))throw new Error("apps must be an array of application names or bundle identifiers");let tcc=await getComputerUseCapabilities();if(!tcc.accessibility||!tcc.screenRecording)return await ctx.onPermissionRequest({apps:[],requestedFlags:{},tccState:tcc}),objectText({granted:!1,reason:"macOS permissions are incomplete",...tcc});let installed2=await listComputerUseInstalledApps(),existing=ctx.getAllowedApps(),requestedApps=requested.map(value=>{let resolved=appByRequest(installed2,value);return{requestedName:value,resolved,alreadyGranted:resolved?existing.some(grant=>grant.bundleId===resolved.bundleId):!1}}),requestedFlags={clipboardRead:args.clipboard_read===!0,clipboardWrite:args.clipboard_write===!0,systemKeyCombos:args.system_key_combos===!0},response=await ctx.onPermissionRequest({apps:requestedApps,requestedFlags,reason:typeof args.reason=="string"?args.reason:void 0}),merged=new Map(existing.map(app=>[app.bundleId,app]));for(let grant of response.granted)merged.set(grant.bundleId,grant);let flags={clipboardRead:ctx.getGrantFlags().clipboardRead||response.flags.clipboardRead,clipboardWrite:ctx.getGrantFlags().clipboardWrite||response.flags.clipboardWrite,systemKeyCombos:ctx.getGrantFlags().systemKeyCombos||response.flags.systemKeyCombos};return ctx.onAllowedAppsChanged([...merged.values()],flags),objectText({granted:response.granted,denied:response.denied,flags})}async function dispatch(toolName5,args,ctx){if(toolName5==="computer_status"){let[capabilities,displays,running,frontmost,bridgeWarm]=await Promise.all([getComputerUseCapabilities(),listComputerUseDisplays(),listComputerUseRunningApps(),getComputerUseFrontmostApp(),warmComputerUseBridge()]);return objectText({capabilities,displays,frontmost,runningApps:running,bridgeWarm})}if(toolName5==="request_access")return requestAccess(ctx,args);if(toolName5==="list_granted_applications")return objectText({apps:ctx.getAllowedApps(),flags:ctx.getGrantFlags()});await ensureOsPermissions(),await ensureLock(ctx);let signal=ctx.getAbortSignal();if(signal.aborted)throw new Error("Computer Use action was aborted.");switch(toolName5){case"open_application":{let bundleId2=stringArg(args,"bundle_id");return requireAllowedBundle(ctx,bundleId2),await openComputerUseApp(bundleId2),text(`Opened ${bundleId2}.`)}case"screenshot":{if(ctx.getAllowedApps().length===0)throw new Error("No applications are granted.");await prepareGrantedApps(ctx),await assertScreenshotIsFiltered(ctx),await assertScreenshotNotSensitiveFrontmost();let display=await getComputerUseDisplay(typeof args.display_id=="number"?args.display_id:ctx.getSelectedDisplayId()),capture=await captureComputerUseScreenshot({displayId:display.id,signal});return ctx.onScreenshotCaptured(screenshotDims(capture,display)),{content:[{type:"image",data:capture.base64,mimeType:capture.mediaType},{type:"text",text:`Display ${display.name}: screenshot ${capture.width}x${capture.height}; logical display ${display.width}x${display.height}. Coordinates in this image are scaled automatically for pointer tools. Prefer inspect_ui/find_label for targeting \u2014 full screenshot is last-resort eyes.`}]}}case"zoom":{let region=args.region;if(!Array.isArray(region)||region.length!==4||region.some(v2=>typeof v2!="number"))throw new Error("region must be [x, y, width, height]");await prepareGrantedApps(ctx),await assertScreenshotIsFiltered(ctx),await assertScreenshotNotSensitiveFrontmost();let[x3,y2,width,height]=region,capture=await captureComputerUseScreenshot({region:{x:x3,y:y2,width,height},signal});return{content:[{type:"image",data:capture.base64,mimeType:capture.mediaType}]}}case"inspect_ui":{let bundleId2=stringArg(args,"bundle_id");return requireAllowedBundle(ctx,bundleId2),objectText(await inspectComputerUseUi({bundleId:bundleId2,maxDepth:numberArg(args,"max_depth",6),maxElements:numberArg(args,"max_elements",120),includeMenuBar:args.include_menu_bar===!0}))}case"ui_action":{let bundleId2=stringArg(args,"bundle_id");requireAllowedBundle(ctx,bundleId2),await ensureAppFrontmost(bundleId2);let path36=stringArg(args,"path"),targetBefore=await describeComputerUseUiElement({bundleId:bundleId2,path:path36}),confirmed=await confirmDeclaredRisk(args,{tool:"ui_action",bundleId:bundleId2}),labelConfirmed=confirmed?!1:await confirmRiskyUiAction(targetBefore);if(confirmed||labelConfirmed){let targetAfter=await describeComputerUseUiElement({bundleId:bundleId2,path:path36});if(uiElementFingerprint(targetBefore)!==uiElementFingerprint(targetAfter))throw new Error("The confirmed UI target changed before execution. Inspect the UI again.")}return withVerifyNudge(objectText(await actOnComputerUseUi({bundleId:bundleId2,path:path36,action:stringArg(args,"action"),value:typeof args.value=="string"?args.value:void 0})),"ui_action")}case"find_label":{let bundleId2=stringArg(args,"bundle_id");requireAllowedBundle(ctx,bundleId2);let query2=stringArg(args,"query"),inspected=await inspectComputerUseUi({bundleId:bundleId2,maxDepth:numberArg(args,"max_depth",6),maxElements:numberArg(args,"max_elements",120),includeMenuBar:!1}),elements=extractInspectElements(inspected),matches2=findElementsByLabel(elements,query2,{exact:args.exact===!0,role:typeof args.role=="string"?args.role:void 0,limit:numberArg(args,"limit",12)});return objectText({bundleId:bundleId2,query:query2,exact:args.exact===!0,matchCount:matches2.length,matches:matches2.map(summarizeElement),hint:matches2.length===0?"No matches. Try substring query, broader role, or inspect_ui manually.":matches2.length===1?"One match \u2014 use click_text or ui_action with path.":"Multiple matches \u2014 pass exact=true or role=AXButton, or pick path for ui_action."})}case"click_text":{let bundleId2=stringArg(args,"bundle_id");requireAllowedBundle(ctx,bundleId2),await ensureAppFrontmost(bundleId2);let query2=stringArg(args,"query"),inspected=await inspectComputerUseUi({bundleId:bundleId2,maxDepth:numberArg(args,"max_depth",6),maxElements:numberArg(args,"max_elements",120),includeMenuBar:!1}),elements=extractInspectElements(inspected),matches2=findElementsByLabel(elements,query2,{exact:args.exact===!0,role:typeof args.role=="string"?args.role:void 0,limit:8});if(matches2.length===0)throw new Error(`No UI element matching "${query2}" in ${bundleId2}. Try find_label or inspect_ui.`);if(matches2.length>1&&args.exact!==!0)return objectText({ok:!1,reason:"ambiguous",query:query2,matchCount:matches2.length,matches:matches2.map(summarizeElement),hint:"Pass exact=true, role=\u2026, or call ui_action with a chosen path."});let target=matches2[0],targetBefore=await describeComputerUseUiElement({bundleId:bundleId2,path:target.path}),confirmed=await confirmDeclaredRisk(args,{tool:"click_text",bundleId:bundleId2}),labelConfirmed=confirmed?!1:await confirmRiskyUiAction(targetBefore);if(confirmed||labelConfirmed){let targetAfter=await describeComputerUseUiElement({bundleId:bundleId2,path:target.path});if(uiElementFingerprint(targetBefore)!==uiElementFingerprint(targetAfter))throw new Error("The confirmed UI target changed before execution. Inspect the UI again.")}let axAction=pickClickAction(target);if(axAction){let acted=await actOnComputerUseUi({bundleId:bundleId2,path:target.path,action:axAction});return withVerifyNudge(objectText({ok:!0,method:"ax",action:axAction,target:summarizeElement(target),result:acted}),"click_text")}if(!target.frame)throw new Error(`Matched "${query2}" at path ${target.path} but no AXPress action and no frame for click.`);let point=frameCenter(target.frame);return await requirePointTarget(ctx,point),await clickComputerUseMouse({...point,button:"left",count:1}),withVerifyNudge(objectText({ok:!0,method:"frame_click",coordinate:[point.x,point.y],target:summarizeElement(target)}),"click_text")}case"mouse_move":{let point=scaleFromScreenshot(ctx,coordinateArg(args));return await moveComputerUseMouse(point.x,point.y),text(`Moved to (${point.x}, ${point.y}).`)}case"left_click":case"right_click":case"double_click":case"triple_click":{let point=scaleFromScreenshot(ctx,coordinateArg(args));await requirePointTarget(ctx,point);let targetBefore=await getComputerUseUiElementAtPoint(point.x,point.y),confirmed=await confirmDeclaredRisk(args,{tool:toolName5}),labelConfirmed=confirmed?!1:await confirmRiskyUiAction(targetBefore);if(confirmed||labelConfirmed){let targetAfter=await getComputerUseUiElementAtPoint(point.x,point.y);if(uiElementFingerprint(targetBefore)!==uiElementFingerprint(targetAfter))throw new Error("The confirmed pointer target changed before execution. Take a new screenshot and retry.")}return await clickComputerUseMouse({...point,button:toolName5==="right_click"?"right":"left",count:toolName5==="double_click"?2:toolName5==="triple_click"?3:1}),withVerifyNudge(text(`Clicked (${point.x}, ${point.y}).`),toolName5)}case"left_click_drag":{await confirmDeclaredRisk(args,{tool:"left_click_drag"});let from=scaleFromScreenshot(ctx,coordinateArg(args,"start_coordinate")),to=scaleFromScreenshot(ctx,coordinateArg(args));return await requirePointTarget(ctx,from),await dragComputerUseMouse(from,to),withVerifyNudge(text(`Dragged (${from.x}, ${from.y}) to (${to.x}, ${to.y}).`),"left_click_drag")}case"scroll":{if(args.coordinate){let point=scaleFromScreenshot(ctx,coordinateArg(args));await requirePointTarget(ctx,point),await moveComputerUseMouse(point.x,point.y)}else await requireInputTarget(ctx);let amount=numberArg(args,"amount",3)*120,direction=stringArg(args,"direction");return await scrollComputerUseMouse(direction==="left"?-amount:direction==="right"?amount:0,direction==="up"?amount:direction==="down"?-amount:0),text(`Scrolled ${direction}.`)}case"type":return await requireInputTarget(ctx),await confirmDeclaredRisk(args,{tool:"type"}),await typeComputerUseText(stringArg(args,"text")),withVerifyNudge(text("Typed text."),"type");case"key":{await requireInputTarget(ctx),await confirmDeclaredRisk(args,{tool:"key"});let keys2=stringArg(args,"text").split("+").filter(Boolean);if(keys2.length>1&&!ctx.getGrantFlags().systemKeyCombos)throw new Error("System key combinations were not granted. Call request_access with system_key_combos=true.");let repeat3=numberArg(args,"repeat",1);keys2.length===1&&["escape","esc"].includes(keys2[0].toLowerCase())&&void 0;for(let index=0;index<repeat3;index++)await pressComputerUseKeys(keys2);return withVerifyNudge(text(`Pressed ${keys2.join("+")}.`),"key")}case"wait":return await sleep2(numberArg(args,"duration")*1e3),text("Wait complete.");case"cursor_position":return objectText(await getComputerUseCursorPosition());case"read_clipboard":{if(!ctx.getGrantFlags().clipboardRead)throw new Error("Clipboard read was not granted.");let result2=await execFileNoThrow("/usr/bin/pbpaste",[],{useCwd:!1});if(result2.code!==0)throw new Error("Failed to read clipboard.");return text(result2.stdout)}case"write_clipboard":{if(!ctx.getGrantFlags().clipboardWrite)throw new Error("Clipboard write was not granted.");if((await execFileNoThrow("/usr/bin/pbcopy",[],{useCwd:!1,input:stringArg(args,"text"),stdin:"pipe"})).code!==0)throw new Error("Failed to write clipboard.");return text("Clipboard updated.")}default:throw new Error(`Unsupported Computer Use tool: ${toolName5}`)}}function getComputerUseMCPToolOverrides(toolName5){let call105=__name(async(rawArgs,context2)=>{if(currentToolUseContext=context2,context2.agentId)return{data:[{type:"text",text:"Computer Use is owned by the interactive main session. Ask the main Clavue turn to perform this UI action."}]};try{return{data:(await dispatch(toolName5,rawArgs??{},buildSessionContext())).content.map(item=>item.type==="image"?{type:"image",source:{type:"base64",media_type:item.mimeType,data:item.data}}:{type:"text",text:item.text})}}catch(error40){return{data:[{type:"text",text:`Computer Use failed: ${error40 instanceof Error?error40.message:String(error40)}`}]}}},"call");return{...getComputerUseMCPRenderingOverrides(toolName5),call:call105}}async function runActionConfirmation(risk){let context2=tuc(),setToolJSX=context2.setToolJSX;if(!setToolJSX)return!1;try{return await new Promise((resolve64,reject2)=>{let signal=context2.abortController.signal;if(signal.aborted){reject2(new Error("Computer Use action confirmation aborted"));return}let onAbort=__name(()=>reject2(new Error("Computer Use action confirmation aborted")),"onAbort");signal.addEventListener("abort",onAbort,{once:!0}),setToolJSX({jsx:React24.createElement(ComputerUseActionApproval,{...risk,onDone:__name(approved=>{signal.removeEventListener("abort",onAbort),resolve64(approved)},"onDone")}),shouldHidePromptInput:!0})})}finally{setToolJSX(null)}}async function runPermissionDialog(request){let context2=tuc(),setToolJSX=context2.setToolJSX;if(!setToolJSX)return{granted:[],denied:[],flags:DEFAULT_GRANT_FLAGS};try{return await new Promise((resolve64,reject2)=>{let signal=context2.abortController.signal;if(signal.aborted){reject2(new Error("Computer Use permission dialog aborted"));return}let onAbort=__name(()=>reject2(new Error("Computer Use permission dialog aborted")),"onAbort");signal.addEventListener("abort",onAbort,{once:!0}),setToolJSX({jsx:React24.createElement(ComputerUseApproval,{request,onDone:__name(response=>{signal.removeEventListener("abort",onAbort),resolve64(response)},"onDone")}),shouldHidePromptInput:!0})})}finally{setToolJSX(null)}}var React24,currentToolUseContext,SAFE_SYSTEM_CHROME,RISK_PATTERNS,init_wrapper2=__esm({"src/utils/computerUse/wrapper.tsx"(){React24=__toESM(require_react());init_state();init_ComputerUseApproval();init_sleep2();init_computerUseLock();init_executor();init_execFileNoThrow();init_escHotkey();init_audit();init_efficiencyLaw();init_toolRendering2();init_uiFind();init_types17();__name(tuc,"tuc");__name(formatLockHeld,"formatLockHeld");__name(updateComputerUseState,"updateComputerUseState");__name(buildSessionContext,"buildSessionContext");__name(text,"text");__name(objectText,"objectText");__name(withVerifyNudge,"withVerifyNudge");__name(assertScreenshotNotSensitiveFrontmost,"assertScreenshotNotSensitiveFrontmost");__name(ensureAppFrontmost,"ensureAppFrontmost");__name(stringArg,"stringArg");__name(numberArg,"numberArg");__name(coordinateArg,"coordinateArg");__name(appByRequest,"appByRequest");__name(allowedSet,"allowedSet");__name(requireAllowedBundle,"requireAllowedBundle");__name(requireInputTarget,"requireInputTarget");__name(requirePointTarget,"requirePointTarget");__name(ensureLock,"ensureLock");__name(ensureOsPermissions,"ensureOsPermissions");__name(prepareGrantedApps,"prepareGrantedApps");SAFE_SYSTEM_CHROME=new Set(["com.apple.dock","com.apple.systemuiserver","com.apple.controlcenter","com.apple.notificationcenterui"]);__name(assertScreenshotIsFiltered,"assertScreenshotIsFiltered");__name(screenshotDims,"screenshotDims");__name(scaleFromScreenshot,"scaleFromScreenshot");RISK_PATTERNS=[{pattern:/\b(delete|remove|erase|trash|close|cancel subscription|unsubscribe)\b|删除|移除|清除|关闭|取消订阅/i,risk:"This may delete data, remove access, or close local content."},{pattern:/\b(send|submit|publish|post|reply|message|share|upload)\b|发送|提交|发布|回复|分享|上传/i,risk:"This may communicate or transmit data to a third party."},{pattern:/\b(pay|purchase|buy|checkout|subscribe|confirm order)\b|付款|支付|购买|结账|订阅|确认订单/i,risk:"This may create or confirm a financial transaction."},{pattern:/\b(install|extension|allow|grant|permission|security|privacy|system settings)\b|安装|扩展|允许|授权|权限|安全|隐私|系统设置/i,risk:"This may install software or change a permission/system setting."},{pattern:/\b(password|passcode|otp|verification code|api key|credit card)\b|密码|验证码|密钥|信用卡/i,risk:"This may enter or expose sensitive authentication or financial data."}];__name(classifyRiskyElement,"classifyRiskyElement");__name(uiElementFingerprint,"uiElementFingerprint");__name(confirmRiskyUiAction,"confirmRiskyUiAction");__name(confirmDeclaredRisk,"confirmDeclaredRisk");__name(requestAccess,"requestAccess");__name(dispatch,"dispatch");__name(getComputerUseMCPToolOverrides,"getComputerUseMCPToolOverrides");__name(runActionConfirmation,"runActionConfirmation");__name(runPermissionDialog,"runPermissionDialog")}});function createFetchToolsForClient({ensureConnectedClient:ensureConnectedClient2,callMCPToolWithUrlElicitationRetry:callMCPToolWithUrlElicitationRetry2}){return memoizeWithLRU(async client2=>{if(client2.type!=="connected")return[];try{if(!client2.capabilities?.tools)return[];let result2=await client2.client.request({method:"tools/list"},ListToolsResultSchema),toolsToProcess=recursivelySanitizeUnicode(result2.tools),skipPrefix=client2.config.type==="sdk"&&isEnvTruthy2(process.env.CLAUDE_AGENT_SDK_MCP_NO_PREFIX);return toolsToProcess.map(tool=>{let fullyQualifiedName=buildMcpToolName(client2.name,tool.name);return{...MCPTool,name:skipPrefix?tool.name:fullyQualifiedName,mcpInfo:{serverName:client2.name,toolName:tool.name},isMcp:!0,searchHint:typeof tool._meta?.["anthropic/searchHint"]=="string"&&tool._meta["anthropic/searchHint"].replace(/\s+/g," ").trim()||void 0,alwaysLoad:tool._meta?.["anthropic/alwaysLoad"]===!0,async description(){return tool.description??""},async prompt(){let desc=tool.description??"";return desc.length>MAX_MCP_DESCRIPTION_LENGTH?desc.slice(0,MAX_MCP_DESCRIPTION_LENGTH)+"\u2026 [truncated]":desc},isConcurrencySafe(){return tool.annotations?.readOnlyHint??!1},isReadOnly(){return tool.annotations?.readOnlyHint??!1},toAutoClassifierInput(input2){return mcpToolInputToAutoClassifierInput(input2,tool.name)},isDestructive(){return tool.annotations?.destructiveHint??!1},isOpenWorld(){return tool.annotations?.openWorldHint??!1},isSearchOrReadCommand(){return classifyMcpToolForCollapse(client2.name,tool.name)},inputJSONSchema:tool.inputSchema,async checkPermissions(){return{behavior:"passthrough",message:"MCPTool requires permission.",suggestions:[{type:"addRules",rules:[{toolName:fullyQualifiedName,ruleContent:void 0}],behavior:"allow",destination:"localSettings"}]}},async call(args,context2,_canUseTool,parentMessage,onProgress){let toolUseId=extractToolUseId(parentMessage),meta=toolUseId?{"claudecode/toolUseId":toolUseId}:{};onProgress&&toolUseId&&onProgress({toolUseID:toolUseId,data:{type:"mcp_progress",status:"started",serverName:client2.name,toolName:tool.name}});let startTime=Date.now(),MAX_SESSION_RETRIES=1,MAX_TRANSIENT_RETRIES=tool.annotations?.readOnlyHint?1:0,sessionRetries=0,transientRetries=0;for(;;)try{let connectedClient=await ensureConnectedClient2(client2),mcpResult=await callMCPToolWithUrlElicitationRetry2({client:connectedClient,clientConnection:client2,tool:tool.name,args,meta,signal:context2.abortController.signal,setAppState:context2.setAppState,onProgress:onProgress&&toolUseId?progressData=>{onProgress({toolUseID:toolUseId,data:progressData})}:void 0,handleElicitation:context2.handleElicitation});return onProgress&&toolUseId&&onProgress({toolUseID:toolUseId,data:{type:"mcp_progress",status:"completed",serverName:client2.name,toolName:tool.name,elapsedTimeMs:Date.now()-startTime}}),{data:mcpResult.content,...(mcpResult._meta||mcpResult.structuredContent)&&{mcpMeta:{...mcpResult._meta&&{_meta:mcpResult._meta},...mcpResult.structuredContent&&{structuredContent:mcpResult.structuredContent}}}}}catch(error40){if(error40 instanceof McpSessionExpiredError&&sessionRetries<MAX_SESSION_RETRIES){sessionRetries++,logMCPDebug(client2.name,`Retrying tool '${tool.name}' after session recovery`);continue}if(transientRetries<MAX_TRANSIENT_RETRIES&&isMcpTransientToolCallError(error40)){transientRetries++,logMCPDebug(client2.name,`Retrying read-only tool '${tool.name}' after transient transport failure`);continue}if(onProgress&&toolUseId&&onProgress({toolUseID:toolUseId,data:{type:"mcp_progress",status:"failed",serverName:client2.name,toolName:tool.name,elapsedTimeMs:Date.now()-startTime}}),error40 instanceof Error&&!(error40 instanceof TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS)){let name=error40.constructor.name;if(name==="Error")throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(error40.message,error40.message.slice(0,200));if(name==="McpError"&&"code"in error40&&typeof error40.code=="number")throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(error40.message,`McpError ${error40.code}`)}throw error40}},userFacingName(){let displayName=tool.annotations?.title||tool.name;return`${client2.name} - ${displayName} (MCP)`},...isClaudeInChromeMCPServer(client2.name)&&(client2.config.type==="stdio"||!client2.config.type)?claudeInChromeToolRendering().getClaudeInChromeMCPToolOverrides(tool.name):{},...(client2.config.type==="stdio"||!client2.config.type)&&isComputerUseMCPServer2(client2.name)?computerUseWrapper().getComputerUseMCPToolOverrides(tool.name):{}}}).filter(isIncludedMcpTool)}catch(error40){return logMCPError(client2.name,`Failed to fetch tools: ${errorMessage(error40)}`),[]}},client2=>client2.name,MCP_FETCH_CACHE_SIZE)}var claudeInChromeToolRendering,computerUseWrapper,isComputerUseMCPServer2,init_toolFetcher=__esm({"src/services/mcp/toolFetcher.ts"(){init_types3();init_classifyForCollapse();init_MCPTool();init_common2();init_envUtils();init_errors2();init_log3();init_memoize2();init_sanitization();init_connectionUtils();init_mcpStringUtils();init_utils10();init_toolCaller();claudeInChromeToolRendering=__name(()=>(init_toolRendering(),__toCommonJS(toolRendering_exports)),"claudeInChromeToolRendering"),computerUseWrapper=()=>(init_wrapper2(),__toCommonJS(wrapper_exports2)),isComputerUseMCPServer2=(init_common3(),__toCommonJS(common_exports)).isComputerUseMCPServer;__name(createFetchToolsForClient,"createFetchToolsForClient")}});function getServerNameForElicitation(clientConnection){return clientConnection.type==="connected"?clientConnection.name:"unknown"}function getValidUrlElicitations(errorData){return(errorData!=null&&typeof errorData=="object"&&"elicitations"in errorData&&Array.isArray(errorData.elicitations)?errorData.elicitations:[]).filter(e2=>{if(e2==null||typeof e2!="object")return!1;let obj=e2;return obj.mode==="url"&&typeof obj.url=="string"&&typeof obj.elicitationId=="string"&&typeof obj.message=="string"})}function formatUrlElicitationBlockedMessage(tool,action,actor){return`URL elicitation was ${action==="decline"?"declined":action+"ed"} by ${actor==="hook"?"a hook":"the user"}. The tool "${tool}" could not complete because it requires the user to open a URL.`}async function queueUrlElicitation({serverName,elicitation,signal,setAppState}){let waitingState={actionLabel:"Retry now",showCancel:!0};return new Promise(resolve64=>{let onAbort=__name(()=>{resolve64({action:"cancel"})},"onAbort");if(signal.aborted){onAbort();return}signal.addEventListener("abort",onAbort,{once:!0}),setAppState(prev=>({...prev,elicitation:{queue:[...prev.elicitation.queue,{serverName,requestId:`error-elicit-${elicitation.elicitationId}`,params:elicitation,signal,waitingState,respond:__name(result2=>{result2.action!=="accept"&&(signal.removeEventListener("abort",onAbort),resolve64(result2))},"respond"),onWaitingDismiss:__name(action=>{signal.removeEventListener("abort",onAbort),resolve64(action==="retry"?{action:"accept"}:{action:"cancel"})},"onWaitingDismiss")}]}}))})}var init_urlElicitation=__esm({"src/services/mcp/urlElicitation.ts"(){__name(getServerNameForElicitation,"getServerNameForElicitation");__name(getValidUrlElicitations,"getValidUrlElicitations");__name(formatUrlElicitationBlockedMessage,"formatUrlElicitationBlockedMessage");__name(queueUrlElicitation,"queueUrlElicitation")}});function isMcpServerFromProjectOrLocalSettings(config3){return config3.scope==="project"||config3.scope==="local"}async function getMcpHeadersFromHelper(serverName,config3){if(!config3.headersHelper)return null;if("scope"in config3&&isMcpServerFromProjectOrLocalSettings(config3)&&!getIsNonInteractiveSession()&&!checkHasTrustDialogAccepted()){let error40=new Error(`Security: headersHelper for MCP server '${serverName}' executed before workspace trust is confirmed. If you see this message, post in https://github.com/anthropics/claude-code/issues.`);return logAntError("MCP headersHelper invoked before trust check",error40),logEvent("tengu_mcp_headersHelper_missing_trust",{}),null}try{logMCPDebug(serverName,"Executing headersHelper to get dynamic headers");let execResult=await execFileNoThrowWithCwd(config3.headersHelper,[],{shell:!0,timeout:1e4,env:{...process.env,CLAUDE_CODE_MCP_SERVER_NAME:serverName,CLAUDE_CODE_MCP_SERVER_URL:config3.url}});if(execResult.code!==0||!execResult.stdout)throw new Error(`headersHelper for MCP server '${serverName}' did not return a valid value`);let result2=execResult.stdout.trim(),headers=jsonParse(result2);if(typeof headers!="object"||headers===null||Array.isArray(headers))throw new Error(`headersHelper for MCP server '${serverName}' must return a JSON object with string key-value pairs`);for(let[key,value]of Object.entries(headers))if(typeof value!="string")throw new Error(`headersHelper for MCP server '${serverName}' returned non-string value for key "${key}": ${typeof value}`);return logMCPDebug(serverName,`Successfully retrieved ${Object.keys(headers).length} headers from headersHelper`),headers}catch(error40){return logMCPError(serverName,`Error getting headers from headersHelper: ${errorMessage(error40)}`),logError2(new Error(`Error getting MCP headers from headersHelper for server '${serverName}': ${errorMessage(error40)}`)),null}}async function getMcpServerHeaders(serverName,config3){let staticHeaders=config3.headers||{},dynamicHeaders=await getMcpHeadersFromHelper(serverName,config3)||{};return{...staticHeaders,...dynamicHeaders}}var init_headersHelper=__esm({"src/services/mcp/headersHelper.ts"(){init_state();init_config11();init_debug();init_errors2();init_execFileNoThrow();init_log3();init_slowOperations();init_analytics();__name(isMcpServerFromProjectOrLocalSettings,"isMcpServerFromProjectOrLocalSettings");__name(getMcpHeadersFromHelper,"getMcpHeadersFromHelper");__name(getMcpServerHeaders,"getMcpServerHeaders")}});var SdkControlClientTransport,init_SdkControlTransport=__esm({"src/services/mcp/SdkControlTransport.ts"(){SdkControlClientTransport=class{constructor(serverName,sendMcpMessage){this.serverName=serverName;this.sendMcpMessage=sendMcpMessage}serverName;sendMcpMessage;static{__name(this,"SdkControlClientTransport")}isClosed=!1;onclose;onerror;onmessage;async start(){}async send(message){if(this.isClosed)throw new Error("Transport is closed");let response=await this.sendMcpMessage(this.serverName,message);this.onmessage&&this.onmessage(response)}async close(){this.isClosed||(this.isClosed=!0,this.onclose?.())}}}});var mcpSkills_exports={};__export(mcpSkills_exports,{fetchMcpSkillsForClient:()=>fetchMcpSkillsForClient,loadMcpSkills:()=>loadMcpSkills});async function loadMcpSkills(..._args){return[]}var fetchMcpSkillsForClient,init_mcpSkills=__esm({"src/skills/mcpSkills.ts"(){init_memoize2();__name(loadMcpSkills,"loadMcpSkills");fetchMcpSkillsForClient=memoizeWithLRU(async(..._args)=>[],(...args)=>String(args[0]??""),16)}});import process16 from"node:process";var StdioServerTransport,init_stdio4=__esm({"../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js"(){init_stdio2();StdioServerTransport=class{static{__name(this,"StdioServerTransport")}constructor(_stdin=process16.stdin,_stdout=process16.stdout){this._stdin=_stdin,this._stdout=_stdout,this._readBuffer=new ReadBuffer,this._started=!1,this._ondata=chunk3=>{this._readBuffer.append(chunk3),this.processReadBuffer()},this._onerror=error40=>{this.onerror?.(error40)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let message=this._readBuffer.readMessage();if(message===null)break;this.onmessage?.(message)}catch(error40){this.onerror?.(error40)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(message){return new Promise(resolve64=>{let json2=serializeMessage(message);this._stdout.write(json2)?resolve64():this._stdout.once("drain",resolve64)})}}}});function isSinkKilled(sink2){return getDynamicConfig_CACHED_MAY_BE_STALE(SINK_KILLSWITCH_CONFIG_NAME,{})?.[sink2]===!0}var SINK_KILLSWITCH_CONFIG_NAME,init_sinkKillswitch=__esm({"src/services/analytics/sinkKillswitch.ts"(){init_growthbook();SINK_KILLSWITCH_CONFIG_NAME="tengu_frond_boric";__name(isSinkKilled,"isSinkKilled")}});function shouldTrackDatadog(){if(isSinkKilled("datadog"))return!1;if(isDatadogGateEnabled!==void 0)return isDatadogGateEnabled;try{return checkStatsigFeatureGate_CACHED_MAY_BE_STALE(DATADOG_GATE_NAME)}catch{return!1}}function logEventImpl(eventName,metadata){let sampleResult=shouldSampleEvent(eventName);if(sampleResult===0)return;let metadataWithSampleRate=sampleResult!==null?{...metadata,sample_rate:sampleResult}:metadata;shouldTrackDatadog()&&trackDatadogEvent(eventName,stripProtoFields(metadataWithSampleRate)),logEventTo1P(eventName,metadataWithSampleRate)}function logEventAsyncImpl(eventName,metadata){return logEventImpl(eventName,metadata),Promise.resolve()}function initializeAnalyticsGates(){isDatadogGateEnabled=checkStatsigFeatureGate_CACHED_MAY_BE_STALE(DATADOG_GATE_NAME)}function initializeAnalyticsSink(){attachAnalyticsSink({logEvent:logEventImpl,logEventAsync:logEventAsyncImpl})}var DATADOG_GATE_NAME,isDatadogGateEnabled,init_sink=__esm({"src/services/analytics/sink.ts"(){init_datadog();init_firstPartyEventLogger();init_growthbook();init_analytics();init_sinkKillswitch();DATADOG_GATE_NAME="tengu_log_datadog_events";__name(shouldTrackDatadog,"shouldTrackDatadog");__name(logEventImpl,"logEventImpl");__name(logEventAsyncImpl,"logEventAsyncImpl");__name(initializeAnalyticsGates,"initializeAnalyticsGates");__name(initializeAnalyticsSink,"initializeAnalyticsSink")}});var runtime_exports2={};__export(runtime_exports2,{CLAUDE_IN_CHROME_TOOL_NAMES:()=>CLAUDE_IN_CHROME_TOOL_NAMES,getClaudeInChromeAllowedTools:()=>getClaudeInChromeAllowedTools,isClaudeInChromeRuntimeAvailable:()=>isClaudeInChromeRuntimeAvailable,loadClaudeInChromeRuntime:()=>loadClaudeInChromeRuntime});import{createRequire as createRequire6}from"module";function getClaudeInChromeAllowedTools(){return CLAUDE_IN_CHROME_TOOL_NAMES.map(toolName5=>`mcp__claude-in-chrome__${toolName5}`)}function isClaudeInChromeRuntimeAvailable(){if(runtimeAvailable!==void 0)return runtimeAvailable;try{require5.resolve(CLAUDE_IN_CHROME_RUNTIME_PACKAGE),runtimeAvailable=!0}catch{runtimeAvailable=!1}return runtimeAvailable}async function loadClaudeInChromeRuntime(){try{return await import(CLAUDE_IN_CHROME_RUNTIME_PACKAGE)}catch(error40){throw isClaudeInChromeRuntimeAvailable()?new Error(`${CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE} ${error40 instanceof Error?error40.message:String(error40)}`):new Error(CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE)}}var require5,CLAUDE_IN_CHROME_TOOL_NAMES,CLAUDE_IN_CHROME_RUNTIME_PACKAGE,CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE,runtimeAvailable,init_runtime5=__esm({"src/utils/claudeInChrome/runtime.ts"(){require5=createRequire6(import.meta.url),CLAUDE_IN_CHROME_TOOL_NAMES=["javascript_tool","read_page","find","form_input","computer","navigate","resize_window","gif_creator","upload_image","get_page_text","tabs_context_mcp","tabs_create_mcp","update_plan","read_console_messages","read_network_requests","shortcuts_list","shortcuts_execute"],CLAUDE_IN_CHROME_RUNTIME_PACKAGE="@ant/claude-for-chrome-mcp",CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE="Clavue browser integration is unavailable in this build because the private Chrome MCP runtime is not installed.";__name(getClaudeInChromeAllowedTools,"getClaudeInChromeAllowedTools");__name(isClaudeInChromeRuntimeAvailable,"isClaudeInChromeRuntimeAvailable");__name(loadClaudeInChromeRuntime,"loadClaudeInChromeRuntime")}});var mcpServer_exports={};__export(mcpServer_exports,{createChromeContext:()=>createChromeContext,runClaudeInChromeMcpServer:()=>runClaudeInChromeMcpServer});import{format as format3}from"util";function isPermissionMode(raw){return PERMISSION_MODES2.some(m3=>m3===raw)}function getChromeBridgeUrl(){if(process.env.USER_TYPE==="ant"||getFeatureValue_CACHED_MAY_BE_STALE("tengu_copper_bridge",!1))return isEnvTruthy2(process.env.USE_LOCAL_OAUTH)||isEnvTruthy2(process.env.LOCAL_BRIDGE)?"ws://localhost:8765":isEnvTruthy2(process.env.USE_STAGING_OAUTH)?"wss://bridge-staging.\u0063laudeusercontent.com":"wss://bridge.\u0063laudeusercontent.com"}function isLocalBridge(){return isEnvTruthy2(process.env.USE_LOCAL_OAUTH)||isEnvTruthy2(process.env.LOCAL_BRIDGE)}function createChromeContext(env5){let logger=new DebugLogger,chromeBridgeUrl=getChromeBridgeUrl();logger.info(`Bridge URL: ${chromeBridgeUrl??"none (using native socket)"}`);let rawPermissionMode=env5?.CLAUDE_CHROME_PERMISSION_MODE??process.env.CLAUDE_CHROME_PERMISSION_MODE,initialPermissionMode;return rawPermissionMode&&(isPermissionMode(rawPermissionMode)?initialPermissionMode=rawPermissionMode:logger.warn(`Invalid CLAUDE_CHROME_PERMISSION_MODE "${rawPermissionMode}". Valid values: ${PERMISSION_MODES2.join(", ")}`)),{serverName:"Clavue Browser",logger,socketPath:getSecureSocketPath(),getSocketPaths:getAllSocketPaths,clientTypeId:"claude-code",onAuthenticationError:__name(()=>{logger.warn("Authentication error occurred. Please ensure you are logged into the browser extension with the same official account as Clavue.")},"onAuthenticationError"),onToolCallDisconnected:__name(()=>`Browser extension is not connected. Please ensure the Clavue browser extension is installed and running (${EXTENSION_DOWNLOAD_URL}), and that you are logged into the same official account as Clavue. If this is your first time connecting to Chrome, you may need to restart Chrome for the installation to take effect. If you continue to experience issues, please report a bug: ${BUG_REPORT_URL}`,"onToolCallDisconnected"),onExtensionPaired:__name((deviceId,name)=>{saveGlobalConfig(config3=>config3.chromeExtension?.pairedDeviceId===deviceId&&config3.chromeExtension?.pairedDeviceName===name?config3:{...config3,chromeExtension:{pairedDeviceId:deviceId,pairedDeviceName:name}}),logger.info(`Paired with "${name}" (${deviceId.slice(0,8)})`)},"onExtensionPaired"),getPersistedDeviceId:__name(()=>getGlobalConfig().chromeExtension?.pairedDeviceId,"getPersistedDeviceId"),...chromeBridgeUrl&&{bridgeConfig:{url:chromeBridgeUrl,getUserId:__name(async()=>getGlobalConfig().oauthAccount?.accountUuid,"getUserId"),getOAuthToken:__name(async()=>getClaudeAIOAuthTokens()?.accessToken??"","getOAuthToken"),...isLocalBridge()&&{devUserId:"dev_user_local"}}},...initialPermissionMode&&{initialPermissionMode},...process.env.USER_TYPE==="ant"&&{callAnthropicMessages:__name(async req=>{let response=await sideQuery({model:req.model,system:req.system,messages:req.messages,max_tokens:req.max_tokens,stop_sequences:req.stop_sequences,signal:req.signal,skipSystemPromptPrefix:!0,tools:[],querySource:"chrome_mcp"}),textBlocks=[];for(let b3 of response.content)b3.type==="text"&&textBlocks.push({type:"text",text:b3.text});return{content:textBlocks,stop_reason:response.stop_reason,usage:{input_tokens:response.usage.input_tokens,output_tokens:response.usage.output_tokens}}},"callAnthropicMessages")},trackEvent:__name((eventName,metadata)=>{let safeMetadata={};if(metadata)for(let[key,value]of Object.entries(metadata)){let safeKey=key==="status"?"bridge_status":key;(typeof value=="boolean"||typeof value=="number"||typeof value=="string"&&SAFE_BRIDGE_STRING_KEYS.has(safeKey))&&(safeMetadata[safeKey]=value)}logEvent(eventName,safeMetadata)},"trackEvent")}}async function runClaudeInChromeMcpServer(){enableConfigs(),initializeAnalyticsSink();let context2=createChromeContext(),{createClaudeForChromeMcpServer}=await loadClaudeInChromeRuntime(),server2=createClaudeForChromeMcpServer(context2),transport=new StdioServerTransport,exiting=!1,shutdownAndExit=__name(async()=>{exiting||(exiting=!0,await shutdown1PEventLogging(),await shutdownDatadog(),process.exit(0))},"shutdownAndExit");process.stdin.on("end",()=>{shutdownAndExit()}),process.stdin.on("error",()=>{shutdownAndExit()}),logForDebugging("[Clavue browser integration] Starting MCP server"),await server2.connect(transport),logForDebugging("[Clavue browser integration] MCP server started")}var EXTENSION_DOWNLOAD_URL,BUG_REPORT_URL,SAFE_BRIDGE_STRING_KEYS,PERMISSION_MODES2,DebugLogger,init_mcpServer=__esm({"src/utils/claudeInChrome/mcpServer.ts"(){init_stdio4();init_datadog();init_firstPartyEventLogger();init_growthbook();init_analytics();init_sink();init_auth6();init_config11();init_debug();init_envUtils();init_sideQuery();init_common2();init_runtime5();EXTENSION_DOWNLOAD_URL="https://claude.ai/chrome",BUG_REPORT_URL="https://github.com/anthropics/claude-code/issues/new?labels=bug,claude-in-chrome",SAFE_BRIDGE_STRING_KEYS=new Set(["bridge_status","error_type","tool_name"]),PERMISSION_MODES2=["ask","skip_all_permission_checks","follow_a_plan"];__name(isPermissionMode,"isPermissionMode");__name(getChromeBridgeUrl,"getChromeBridgeUrl");__name(isLocalBridge,"isLocalBridge");__name(createChromeContext,"createChromeContext");__name(runClaudeInChromeMcpServer,"runClaudeInChromeMcpServer");DebugLogger=class{static{__name(this,"DebugLogger")}silly(message,...args){logForDebugging(format3(message,...args),{level:"debug"})}debug(message,...args){logForDebugging(format3(message,...args),{level:"debug"})}info(message,...args){logForDebugging(format3(message,...args),{level:"info"})}warn(message,...args){logForDebugging(format3(message,...args),{level:"warn"})}error(message,...args){logForDebugging(format3(message,...args),{level:"error"})}}}});var InProcessTransport_exports={};__export(InProcessTransport_exports,{createLinkedTransportPair:()=>createLinkedTransportPair});function createLinkedTransportPair(){let a2=new InProcessTransport,b3=new InProcessTransport;return a2._setPeer(b3),b3._setPeer(a2),[a2,b3]}var InProcessTransport,init_InProcessTransport=__esm({"src/services/mcp/InProcessTransport.ts"(){InProcessTransport=class{static{__name(this,"InProcessTransport")}peer;closed=!1;onclose;onerror;onmessage;_setPeer(peer){this.peer=peer}async start(){}async send(message){if(this.closed)throw new Error("Transport is closed");queueMicrotask(()=>{this.peer?.onmessage?.(message)})}async close(){this.closed||(this.closed=!0,this.onclose?.(),this.peer&&!this.peer.closed&&(this.peer.closed=!0,this.peer.onclose?.()))}};__name(createLinkedTransportPair,"createLinkedTransportPair")}});var officialClavueMcp_exports={};__export(officialClavueMcp_exports,{OFFICIAL_CLAVUE_MCP_MARKER_ARG:()=>OFFICIAL_CLAVUE_MCP_MARKER_ARG,OFFICIAL_CLAVUE_MCP_SERVER_NAME:()=>OFFICIAL_CLAVUE_MCP_SERVER_NAME,OFFICIAL_CLAVUE_WEB_SEARCH_FQN:()=>OFFICIAL_CLAVUE_WEB_SEARCH_FQN,OFFICIAL_CLAVUE_WEB_SEARCH_TOOL:()=>OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,OFFICIAL_MCP_SETTING_MODES:()=>OFFICIAL_MCP_SETTING_MODES,assertOfficialMcpNonPollutingConfig:()=>assertOfficialMcpNonPollutingConfig,buildOfficialClavueMcpConfig:()=>buildOfficialClavueMcpConfig,callOfficialClavueWebSearch:()=>callOfficialClavueWebSearch,cycleOfficialMcpSettingMode:()=>cycleOfficialMcpSettingMode,formatOfficialMcpSettingLabel:()=>formatOfficialMcpSettingLabel,formatOfficialWebSearchForAgent:()=>formatOfficialWebSearchForAgent,getOfficialClavueMcpAllowedTools:()=>getOfficialClavueMcpAllowedTools,getOfficialClavueMcpConfigsIfEligible:()=>getOfficialClavueMcpConfigsIfEligible,isOfficialClavueMcpServer:()=>isOfficialClavueMcpServer,normalizeOfficialMcpSettingMode:()=>normalizeOfficialMcpSettingMode,readOfficialMcpChromeSnapshot:()=>readOfficialMcpChromeSnapshot,readOfficialMcpSettingMode:()=>readOfficialMcpSettingMode,resolveOfficialClavueMcpGate:()=>resolveOfficialClavueMcpGate,shouldSkipAutoMcpForExplicitTools:()=>shouldSkipAutoMcpForExplicitTools});function normalizeOfficialMcpSettingMode(raw){if(raw===!0||raw===1)return"on";if(raw===!1||raw===0)return"off";let s2=String(raw??"").trim().toLowerCase();return!s2||s2==="auto"||s2==="default"?"auto":s2==="on"||s2==="true"||s2==="1"||s2==="yes"||s2==="enable"||s2==="enabled"?"on":s2==="off"||s2==="false"||s2==="0"||s2==="no"||s2==="disable"||s2==="disabled"?"off":"auto"}function readOfficialMcpSettingMode(override){if(override!=null)return normalizeOfficialMcpSettingMode(override);try{let settings=getInitialSettings();if(settings?.officialMcp!==void 0&&settings.officialMcp!==null)return normalizeOfficialMcpSettingMode(settings.officialMcp)}catch{}return"auto"}function resolveOfficialClavueMcpGate(options){let settingMode=options?.force!==void 0?normalizeOfficialMcpSettingMode(options.force.settingMode??"auto"):readOfficialMcpSettingMode();if(options?.force?.bare??isBareMode())return{enabled:!1,reason:"disabled_bare",hasToken:!1,officialCloud:!1,settingMode};if(options?.strictMcpConfig)return{enabled:!1,reason:"disabled_strict_mcp",hasToken:!1,officialCloud:!1,settingMode};let envRaw=options?.force?.env!==void 0?options.force.env:process.env.CLAVUE_OFFICIAL_MCP;if(isEnvDefinedFalsy(envRaw))return{enabled:!1,reason:"disabled_env",hasToken:!1,officialCloud:!1,settingMode};let hasToken=!!(options?.force?.token!==void 0?options.force.token:getMembershipSessionToken())?.trim(),officialCloud=options?.force?.officialCloud??isMembershipCloudProfileActive(),envOptIn=isEnvTruthy2(envRaw);return hasToken?envOptIn?{enabled:!0,reason:"enabled_opt_in",hasToken:!0,officialCloud,settingMode}:settingMode==="off"?{enabled:!1,reason:"disabled_settings_off",hasToken:!0,officialCloud,settingMode}:settingMode==="on"?{enabled:!0,reason:"enabled_settings_on",hasToken:!0,officialCloud,settingMode}:officialCloud?{enabled:!0,reason:"enabled_official_cloud",hasToken:!0,officialCloud:!0,settingMode}:{enabled:!1,reason:"disabled_third_party_default",hasToken:!0,officialCloud:!1,settingMode}:{enabled:!1,reason:"disabled_no_token",hasToken:!1,officialCloud,settingMode}}function shouldSkipAutoMcpForExplicitTools(baseToolsCli,parseToolList){if(!Array.isArray(baseToolsCli)||baseToolsCli.length===0)return!1;let parsed=parseToolList([...baseToolsCli]);return parsed.length===0?!0:parsed.every(name=>{let n4=String(name||"").trim().toLowerCase();return n4?!(n4==="default"||n4==="all"||n4==="*"||n4==="mcp"||n4.startsWith("mcp__")||n4.startsWith("mcp:")):!0})}function cycleOfficialMcpSettingMode(current,delta=1){let modes=OFFICIAL_MCP_SETTING_MODES,idx=modes.indexOf(current),next=((idx<0?0:idx)+delta+modes.length)%modes.length;return modes[next]}function formatOfficialMcpSettingLabel(mode,locale){let zh2=!locale||locale.toLowerCase()==="zh"||locale.toLowerCase().startsWith("zh"),ja=!!locale&&(locale.toLowerCase()==="ja"||locale.toLowerCase().startsWith("ja"));return mode==="on"?zh2?"\u5F00":ja?"\u30AA\u30F3":"On":mode==="off"?zh2?"\u5173":ja?"\u30AA\u30D5":"Off":zh2?"\u81EA\u52A8":ja?"\u81EA\u52D5":"Auto"}function readOfficialMcpChromeSnapshot(options){try{let gate=resolveOfficialClavueMcpGate({strictMcpConfig:options?.strictMcpConfig,force:options?.force}),zh2=!!options?.locale&&(options.locale.toLowerCase()==="zh"||options.locale.toLowerCase().startsWith("zh")),modeLabel3=formatOfficialMcpSettingLabel(gate.settingMode,options?.locale),summary=gate.enabled?zh2?`\u5B98\u65B9 MCP \xB7 ${modeLabel3} \xB7 \u751F\u6548 \xB7 soft-fail \u4E0D\u6321\u5F00\u53D1`:`Official MCP \xB7 ${modeLabel3} \xB7 active \xB7 soft-fail never blocks coding`:zh2?`\u5B98\u65B9 MCP \xB7 ${modeLabel3} \xB7 \u672A\u6CE8\u5165 \xB7 ${gate.reason}`:`Official MCP \xB7 ${modeLabel3} \xB7 inactive \xB7 ${gate.reason}`;return{mode:gate.settingMode,active:gate.enabled,reason:gate.reason,chip:gate.enabled?"mcp":"",summary}}catch{return{mode:"auto",active:!1,reason:"disabled_env",chip:"",summary:"Official MCP \xB7 unavailable"}}}function assertOfficialMcpNonPollutingConfig(cfg){let entry=cfg[OFFICIAL_CLAVUE_MCP_SERVER_NAME];return entry?!(entry.scope!=="dynamic"||entry.type!=="stdio"||!(Array.isArray(entry.args)?entry.args:[]).includes(OFFICIAL_CLAVUE_MCP_MARKER_ARG)):!0}function isOfficialClavueMcpServer(name){return name===OFFICIAL_CLAVUE_MCP_SERVER_NAME}function buildOfficialClavueMcpConfig(){return{[OFFICIAL_CLAVUE_MCP_SERVER_NAME]:{type:"stdio",command:process.execPath,args:[OFFICIAL_CLAVUE_MCP_MARKER_ARG],scope:"dynamic"}}}function getOfficialClavueMcpConfigsIfEligible(options){try{let gate=resolveOfficialClavueMcpGate({strictMcpConfig:options?.strictMcpConfig});return logForDebugging(`[official-mcp] gate enabled=${gate.enabled} reason=${gate.reason} mode=${gate.settingMode} cloud=${gate.officialCloud} token=${gate.hasToken} env=${process.env.CLAVUE_OFFICIAL_MCP??"unset"}`),gate.enabled?buildOfficialClavueMcpConfig():{}}catch(error40){return logForDebugging(`[official-mcp] inject skipped (soft-fail): ${errorMessage(error40)}`,{level:"error"}),{}}}function getOfficialClavueMcpAllowedTools(){return[OFFICIAL_CLAVUE_WEB_SEARCH_FQN]}function resolveApiBase(){return(getMembershipLocalSession()?.apiBaseUrl||MEMBERSHIP_DEFAULT_API_BASE).replace(/\/+$/,"")}function toolsCallUrl(apiBase){return`${apiBase}/v1/mcp/tools/call`}async function callOfficialClavueWebSearch(input2){let query2=String(input2.query??"").trim();if(query2.length<2)return{ok:!1,softFail:!0,query:query2,results:[],count:0,error:"Search query too short"};let token=(input2.sessionToken!==void 0?input2.sessionToken:getMembershipSessionToken())?.trim();if(!token)return{ok:!1,softFail:!0,query:query2,results:[],count:0,error:"Sign in required for official web_search"};let apiBase=(input2.apiBaseUrl||resolveApiBase()).replace(/\/+$/,""),url3=toolsCallUrl(apiBase),timeoutMs=input2.timeoutMs??DEFAULT_TIMEOUT_MS,fetchImpl=input2.fetchImpl??globalThis.fetch.bind(globalThis),controller=new AbortController,onAbort=__name(()=>controller.abort(),"onAbort");input2.signal?.addEventListener("abort",onAbort,{once:!0});let timer2=setTimeout(()=>controller.abort(),timeoutMs);try{let response=await fetchImpl(url3,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${token}`,"User-Agent":`clavue-cli/${typeof MACRO<"u"?"11.3.12":process.env.npm_package_version||"dev"} official-mcp`,"X-Imux-Kind":"cli_official_mcp_web_search"},body:JSON.stringify({name:OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,arguments:{query:query2},protocol:PROTOCOL}),signal:controller.signal}),text3=await response.text().catch(()=>""),json2=null;try{json2=text3?JSON.parse(text3):null}catch{json2=null}if(!response.ok){let msg=typeof json2?.message=="string"&&json2.message||typeof json2?.error=="string"&&json2.error||json2?.error&&typeof json2.error=="object"&&typeof json2.error.message=="string"&&json2.error.message||`Official web_search HTTP ${response.status}`;return logForDebugging(`[official-mcp] tools/call soft-fail status=${response.status}: ${msg}`),{ok:!1,softFail:!0,query:query2,results:[],count:0,requestId:typeof json2?.requestId=="string"?json2.requestId:void 0,error:String(msg),raw:json2}}let resultPayload=json2?.result??json2;return normalizeSearchResult(query2,resultPayload,json2)}catch(error40){let msg=errorMessage(error40);return logForDebugging(`[official-mcp] tools/call soft-fail: ${msg}`),{ok:!1,softFail:!0,query:query2,results:[],count:0,error:msg.includes("abort")?"Official web_search timed out or was aborted":msg}}finally{clearTimeout(timer2),input2.signal?.removeEventListener("abort",onAbort)}}function normalizeSearchResult(query2,resultPayload,envelope){let rec=resultPayload&&typeof resultPayload=="object"?resultPayload:null,results=extractHits(rec),summary=typeof rec?.summary=="string"&&rec.summary||typeof rec?.text=="string"&&rec.text||void 0,count4=typeof rec?.count=="number"?rec.count:results.length,productModel=typeof envelope?.productModel=="string"&&envelope.productModel||typeof rec?.productModel=="string"&&rec.productModel||void 0,requestId=typeof envelope?.requestId=="string"?envelope.requestId:void 0;return!(rec?.ok!==!1)&&results.length===0&&!summary?{ok:!1,softFail:!0,query:query2,results:[],count:0,productModel,requestId,error:typeof rec?.error=="string"&&rec.error||"Official web_search returned no usable results",raw:resultPayload}:{ok:!0,softFail:!1,query:typeof rec?.query=="string"&&rec.query||query2,summary,results,count:count4,productModel,requestId,raw:resultPayload}}function extractHits(rec){if(!rec)return[];let hits=[],pushItem=__name(item=>{if(!item||typeof item!="object")return;let r2=item,title=String(r2.title??r2.name??"").trim(),url3=String(r2.url??r2.link??"").trim();if(!title&&!url3)return;let snippet=String(r2.snippet??r2.description??"").trim();hits.push({title:title||url3,url:url3||"",...snippet?{snippet}:{}})},"pushItem");if(Array.isArray(rec.results))for(let item of rec.results)pushItem(item);if(hits.length===0&&Array.isArray(rec.sources))for(let item of rec.sources)pushItem(item);return hits.slice(0,12)}function formatOfficialWebSearchForAgent(result2){if(result2.softFail||!result2.ok)return["Official Clavue web_search is temporarily unavailable.",result2.error?`Reason: ${result2.error}`:null,"Continue coding with repo tools (Read/Grep/Bash). Do not invent web facts.","The session is healthy \u2014 search failure must not block development."].filter(Boolean).join(`
5564
+ `;await appendFile6(auditPath(),line,{encoding:"utf-8",mode:384})}catch(error40){logForDebugging(`[computer-use] audit write failed: ${errorMessage(error40)}`)}}var init_audit=__esm({"src/utils/computerUse/audit.ts"(){init_envUtils();init_debug();init_errors2();init_slowOperations();__name(auditPath,"auditPath");__name(appendComputerUseAudit,"appendComputerUseAudit")}});function fmtCoord(c4){return c4?`(${c4[0]}, ${c4[1]})`:""}function getComputerUseMCPRenderingOverrides(toolName5){return{userFacingName(){return`Computer Use[${toolName5}]`},renderToolUseMessage(input2){switch(toolName5){case"screenshot":case"cursor_position":case"list_granted_applications":case"read_clipboard":case"computer_status":return"";case"left_click":case"right_click":case"double_click":case"triple_click":case"mouse_move":return fmtCoord(input2.coordinate);case"left_click_drag":return input2.start_coordinate?`${fmtCoord(input2.start_coordinate)} \u2192 ${fmtCoord(input2.coordinate)}`:`to ${fmtCoord(input2.coordinate)}`;case"type":return typeof input2.text=="string"?`"${truncateToWidth(input2.text,40)}"`:"";case"key":return typeof input2.text=="string"?input2.text:"";case"scroll":return[input2.direction,input2.amount&&`\xD7${input2.amount}`,input2.coordinate&&`at ${fmtCoord(input2.coordinate)}`].filter(Boolean).join(" ");case"zoom":{let r2=input2.region;return Array.isArray(r2)&&r2.length===4?`[${r2[0]}, ${r2[1]}, ${r2[2]}, ${r2[3]}]`:""}case"wait":return typeof input2.duration=="number"?`${input2.duration}s`:"";case"write_clipboard":return typeof input2.text=="string"?`"${truncateToWidth(input2.text,40)}"`:"";case"open_application":return typeof input2.bundle_id=="string"?String(input2.bundle_id):"";case"inspect_ui":return typeof input2.bundle_id=="string"?String(input2.bundle_id):"";case"find_label":case"click_text":return[typeof input2.bundle_id=="string"?input2.bundle_id:"",typeof input2.query=="string"?`"${truncateToWidth(input2.query,32)}"`:""].filter(Boolean).join(" ");case"ui_action":return[input2.action,input2.path].filter(v2=>typeof v2=="string").join(" ");case"request_access":{let apps=input2.apps;return Array.isArray(apps)?apps.map(a2=>typeof a2?.displayName=="string"?a2.displayName:"").filter(Boolean).join(", "):""}default:return""}},renderToolResultMessage(output2,_progress,{verbose}){if(verbose||typeof output2!="object"||output2===null)return null;let summary=RESULT_SUMMARY[toolName5];return summary?(0,import_jsx_runtime59.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime59.jsx)(ThemedText,{dimColor:!0,children:summary})}):null}}}var import_jsx_runtime59,RESULT_SUMMARY,init_toolRendering2=__esm({"src/utils/computerUse/toolRendering.tsx"(){init_MessageResponse();init_ink();init_format();import_jsx_runtime59=__toESM(require_jsx_runtime());__name(fmtCoord,"fmtCoord");RESULT_SUMMARY={screenshot:"Captured",zoom:"Captured",request_access:"Access updated",left_click:"Clicked",right_click:"Clicked",double_click:"Clicked",triple_click:"Clicked",type:"Typed",key:"Pressed",scroll:"Scrolled",left_click_drag:"Dragged",open_application:"Opened",inspect_ui:"Inspected",ui_action:"Updated",find_label:"Found",click_text:"Clicked",computer_status:"Checked"};__name(getComputerUseMCPRenderingOverrides,"getComputerUseMCPRenderingOverrides")}});function asRecord5(value){return value&&typeof value=="object"&&!Array.isArray(value)?value:null}function asString(value){return typeof value=="string"?value:""}function extractInspectElements(payload){let root2=asRecord5(payload),raw=Array.isArray(payload)?payload:Array.isArray(root2?.elements)?root2.elements:[],out=[];for(let row3 of raw){let r2=asRecord5(row3);if(!r2)continue;let path36=asString(r2.path),role=asString(r2.role).trim()||"AXUnknown";if(!("path"in r2)&&!role)continue;let frameRaw=asRecord5(r2.frame),frame=frameRaw&&typeof frameRaw.x=="number"&&typeof frameRaw.y=="number"&&typeof frameRaw.width=="number"&&typeof frameRaw.height=="number"?{x:frameRaw.x,y:frameRaw.y,width:frameRaw.width,height:frameRaw.height}:void 0,actions=Array.isArray(r2.actions)?r2.actions.filter(a2=>typeof a2=="string"):void 0;out.push({path:asString(r2.path),role,subrole:asString(r2.subrole)||void 0,title:asString(r2.title)||void 0,description:asString(r2.description)||void 0,identifier:asString(r2.identifier)||void 0,value:asString(r2.value)||void 0,enabled:typeof r2.enabled=="boolean"?r2.enabled:void 0,actions,frame})}return out}function elementSearchBlob(el){return[el.title,el.description,el.identifier,el.value,el.role,el.subrole].filter(Boolean).join(" | ")}function matchesLabel(el,query2,exact){let q2=query2.trim();if(!q2)return!1;let fields=[el.title,el.description,el.identifier,el.value].map(f3=>(f3??"").trim()).filter(Boolean);if(fields.length===0)return!1;if(exact){let ql2=q2.toLowerCase();return fields.some(f3=>f3.toLowerCase()===ql2)}let ql=q2.toLowerCase();return fields.some(f3=>f3.toLowerCase().includes(ql))}function isLikelyInteractive(el){let role=el.role;return!!(/AXButton|AXCheckBox|AXRadioButton|AXPopUpButton|AXMenuItem|AXLink|AXTab|AXComboBox|AXTextField|AXTextArea|AXSearchField|AXSlider|AXIncrementor/i.test(role)||el.actions?.some(a2=>/AXPress|AXConfirm|AXShowMenu|AXOpen/i.test(a2)))}function findElementsByLabel(elements,query2,options){let exact=options?.exact===!0,role=options?.role?.trim(),limit=Math.max(1,Math.min(options?.limit??12,50)),q2=query2.trim();if(!q2)return[];let hits=elements.filter(el=>role&&el.role!==role&&el.subrole!==role||el.enabled===!1?!1:matchesLabel(el,q2,exact));return hits=[...hits].sort((a2,b3)=>{let aTitle=(a2.title??"").toLowerCase(),bTitle=(b3.title??"").toLowerCase(),ql=q2.toLowerCase(),aExact=aTitle===ql?0:1,bExact=bTitle===ql?0:1;if(aExact!==bExact)return aExact-bExact;let aIx=isLikelyInteractive(a2)?0:1,bIx=isLikelyInteractive(b3)?0:1;return aIx!==bIx?aIx-bIx:aTitle.length-bTitle.length}),hits.slice(0,limit)}function pickClickAction(el){let actions=el.actions??[];return actions.some(a2=>a2==="AXPress"||/Press/i.test(a2))?"press":actions.some(a2=>a2==="AXConfirm"||/Confirm/i.test(a2))?"confirm":/AXTextField|AXTextArea|AXSearchField|AXComboBox/i.test(el.role)||actions.some(a2=>/AXFocus|Focus/i.test(a2))?"focus":/AXButton|AXCheckBox|AXRadioButton|AXMenuItem|AXLink|AXTab/i.test(el.role)?"press":null}function frameCenter(frame){return{x:Math.round(frame.x+frame.width/2),y:Math.round(frame.y+frame.height/2)}}function summarizeElement(el){return{path:el.path,role:el.role,title:el.title,description:el.description,value:el.value,enabled:el.enabled,actions:el.actions,frame:el.frame,blob:elementSearchBlob(el).slice(0,120)}}var COMPUTER_USE_VERIFY_NUDGE,init_uiFind=__esm({"src/utils/computerUse/uiFind.ts"(){init_efficiencyLaw();__name(asRecord5,"asRecord");__name(asString,"asString");__name(extractInspectElements,"extractInspectElements");__name(elementSearchBlob,"elementSearchBlob");__name(matchesLabel,"matchesLabel");__name(isLikelyInteractive,"isLikelyInteractive");__name(findElementsByLabel,"findElementsByLabel");__name(pickClickAction,"pickClickAction");__name(frameCenter,"frameCenter");__name(summarizeElement,"summarizeElement");COMPUTER_USE_VERIFY_NUDGE=getComputerUseVerifyNudgeText()}});var wrapper_exports2={};__export(wrapper_exports2,{buildSessionContext:()=>buildSessionContext,getComputerUseMCPToolOverrides:()=>getComputerUseMCPToolOverrides});function tuc(){return currentToolUseContext}function formatLockHeld(holder){return`Computer use is in use by another Clavue session (${holder.slice(0,8)}...). Wait for that session to finish or run /exit there.`}function updateComputerUseState(update3){tuc().setAppState(previous=>({...previous,computerUseMcpState:update3(previous.computerUseMcpState??{})}))}function buildSessionContext(){return{getAllowedApps:__name(()=>tuc().getAppState().computerUseMcpState?.allowedApps??[],"getAllowedApps"),getGrantFlags:__name(()=>tuc().getAppState().computerUseMcpState?.grantFlags??DEFAULT_GRANT_FLAGS,"getGrantFlags"),getSelectedDisplayId:__name(()=>tuc().getAppState().computerUseMcpState?.selectedDisplayId,"getSelectedDisplayId"),getLastScreenshotDims:__name(()=>{let dims=tuc().getAppState().computerUseMcpState?.lastScreenshotDims;return dims?{...dims,displayId:dims.displayId??0,originX:dims.originX??0,originY:dims.originY??0}:void 0},"getLastScreenshotDims"),getAbortSignal:__name(()=>tuc().abortController.signal,"getAbortSignal"),onPermissionRequest:__name(request=>runPermissionDialog(request),"onPermissionRequest"),onAllowedAppsChanged:__name((apps,flags)=>updateComputerUseState(state4=>({...state4,allowedApps:apps,grantFlags:flags})),"onAllowedAppsChanged"),onAppsHidden:__name(bundleIds=>{bundleIds.length!==0&&updateComputerUseState(state4=>({...state4,hiddenDuringTurn:new Set([...state4.hiddenDuringTurn??[],...bundleIds])}))},"onAppsHidden"),onScreenshotCaptured:__name(dims=>updateComputerUseState(state4=>({...state4,lastScreenshotDims:dims})),"onScreenshotCaptured"),checkCuLock:__name(async()=>{let result2=await checkComputerUseLock();return result2.kind==="free"?{holder:void 0,isSelf:!1}:result2.kind==="held_by_self"?{holder:getSessionId(),isSelf:!0}:{holder:result2.by,isSelf:!1}},"checkCuLock"),acquireCuLock:__name(async()=>{let result2=await tryAcquireComputerUseLock();if(result2.kind==="blocked")throw new Error(formatLockHeld(result2.by));if(result2.fresh){let escape2=await registerEscHotkey(()=>tuc().abortController.abort());tuc().sendOSNotification?.({message:escape2?"Clavue is using your computer - press Esc to stop":"Clavue is using your computer - press Ctrl+C to stop",notificationType:"computer_use_enter"})}},"acquireCuLock"),formatLockHeldMessage:formatLockHeld}}function text(content,isError2=!1){return{content:[{type:"text",text:content}],...isError2?{isError:isError2}:{}}}function objectText(value){return text(JSON.stringify(value))}function withVerifyNudge(result2,toolName5){if(result2.isError)return result2;let obligation=buildComputerUseVerifyObligation(toolName5),nudge=getComputerUseVerifyNudgeText(),content=result2.content.map(block=>{if(block.type!=="text"||typeof block.text!="string")return block;let raw=block.text.trim();if(!raw.startsWith("{")&&!raw.startsWith("["))return block;try{let parsed=JSON.parse(raw);if(parsed&&typeof parsed=="object"&&!Array.isArray(parsed))return{...block,text:JSON.stringify({...parsed,verifyObligation:obligation})}}catch{}return block});return{...result2,content:[...content,{type:"text",text:nudge}]}}async function assertScreenshotNotSensitiveFrontmost(){if(isComputerUseSensitiveAllowed())return;let frontmost=await getComputerUseFrontmostApp();if(frontmost&&isSensitiveComputerUseApp(frontmost.displayName,frontmost.bundleId))throw new Error(`Screenshot blocked: sensitive app frontmost (${frontmost.displayName||frontmost.bundleId}). Hide the vault or set CLAVUE_CU_ALLOW_SENSITIVE=1 only if intentional. A screenshot of a visible password is a leak.`)}async function ensureAppFrontmost(bundleId2){if((await getComputerUseFrontmostApp())?.bundleId===bundleId2)return;await openComputerUseApp(bundleId2),await sleep2(150);let activated=await getComputerUseFrontmostApp();if(activated?.bundleId!==bundleId2)throw new Error(`Could not bring ${bundleId2} to the foreground; ${activated?.displayName??"another application"} remains frontmost.`)}function stringArg(args,name){let value=args[name];if(typeof value!="string")throw new Error(`${name} must be a string`);return value}function numberArg(args,name,fallback){let value=args[name];if(value===void 0&&fallback!==void 0)return fallback;if(typeof value!="number"||!Number.isFinite(value))throw new Error(`${name} must be a finite number`);return value}function coordinateArg(args,name="coordinate"){let value=args[name];if(!Array.isArray(value)||value.length!==2||value.some(item=>typeof item!="number"||!Number.isFinite(item)))throw new Error(`${name} must be [x, y]`);return{x:value[0],y:value[1]}}function appByRequest(installed2,request){let normalized=request.trim().toLocaleLowerCase();return installed2.find(app=>app.bundleId.toLocaleLowerCase()===normalized)??installed2.find(app=>app.displayName.toLocaleLowerCase()===normalized)??installed2.find(app=>app.displayName.toLocaleLowerCase().includes(normalized))}function allowedSet(ctx){return new Set(ctx.getAllowedApps().map(app=>app.bundleId))}function requireAllowedBundle(ctx,bundleId2){if(!allowedSet(ctx).has(bundleId2))throw new Error(`Application ${bundleId2} is not granted. Call request_access first.`)}async function requireInputTarget(ctx){let frontmost=await getComputerUseFrontmostApp();if(!frontmost)throw new Error("No frontmost application is available.");let grant=ctx.getAllowedApps().find(app=>app.bundleId===frontmost.bundleId);if(!grant)throw new Error(`Frontmost application ${frontmost.displayName} (${frontmost.bundleId}) is not granted. Refusing keyboard input.`);return grant}async function requirePointTarget(ctx,point){let app=await getComputerUseAppUnderPoint(point.x,point.y);if(!app)throw new Error("No application window exists under that point.");let grant=ctx.getAllowedApps().find(candidate=>candidate.bundleId===app.bundleId);if(!grant)throw new Error(`Application under the point is ${app.displayName} (${app.bundleId}), which is not granted. Refusing pointer action.`);return grant}async function ensureLock(ctx){let state4=await ctx.checkCuLock();if(state4.holder&&!state4.isSelf)throw new Error(ctx.formatLockHeldMessage(state4.holder));state4.holder||await ctx.acquireCuLock()}async function ensureOsPermissions(){let state4=await getComputerUseCapabilities();if(!state4.accessibility||!state4.screenRecording)throw new Error(`macOS permissions missing: Accessibility=${state4.accessibility}, Screen Recording=${state4.screenRecording}. Call request_access to open the permission flow.`)}async function prepareGrantedApps(ctx){let hidden2=await prepareComputerUseApps([...allowedSet(ctx)]);ctx.onAppsHidden(hidden2)}async function assertScreenshotIsFiltered(ctx){let allowed=allowedSet(ctx),blocked=(await listVisibleComputerUseApps()).filter(app=>!allowed.has(app.bundleId)&&!SAFE_SYSTEM_CHROME.has(app.bundleId.toLowerCase()));if(blocked.length>0)throw new Error(`Screenshot blocked because ungranted windows remain visible: ${blocked.map(app=>`${app.displayName} (${app.bundleId})`).join(", ")}. Resolve or grant those windows, then retry.`)}function screenshotDims(capture,display){return{width:capture.width,height:capture.height,displayWidth:display.width,displayHeight:display.height,displayId:display.id,originX:display.x,originY:display.y}}function scaleFromScreenshot(ctx,point){let dims=ctx.getLastScreenshotDims();return dims?{x:Math.round(dims.originX+point.x*dims.displayWidth/dims.width),y:Math.round(dims.originY+point.y*dims.displayHeight/dims.height)}:point}function classifyRiskyElement(element){if(!element||typeof element!="object")return;let record2=element,target=[record2.title,record2.description,record2.identifier,record2.value].filter(value=>typeof value=="string").join(" | ");if(record2.subrole==="AXCloseButton")return{risk:"This will close a local window or tab and may discard unsaved work.",target:target||"macOS close control"};if(!target)return;let match=RISK_PATTERNS.find(candidate=>candidate.pattern.test(target));return match?{risk:match.risk,target}:void 0}function uiElementFingerprint(element){if(!element||typeof element!="object")return"";let record2=element;return JSON.stringify([record2.path,record2.role,record2.subrole,record2.title,record2.description,record2.identifier,record2.value])}async function confirmRiskyUiAction(element){let risk=classifyRiskyElement(element);if(!risk)return!1;if(!await runActionConfirmation(risk))throw new Error("Risky Computer Use action was cancelled by the user.");return!0}async function confirmDeclaredRisk(args,meta){let risk=stringArg(args,"risk"),intent=stringArg(args,"intent");if(risk==="none")return!1;if(!await runActionConfirmation({target:intent,risk:`The model declared this action as ${risk}.`}))throw isComputerUseConsentRisk(risk)&&appendComputerUseAudit({ts:new Date().toISOString(),tool:meta?.tool??"unknown",risk,intent,bundleId:meta?.bundleId,confirmed:!1,sessionId:getSessionId(),note:"user_cancelled"}),new Error("Declared-risk Computer Use action was cancelled by the user.");return isComputerUseConsentRisk(risk)&&appendComputerUseAudit({ts:new Date().toISOString(),tool:meta?.tool??"unknown",risk,intent,bundleId:meta?.bundleId,confirmed:!0,sessionId:getSessionId()}),!0}async function requestAccess(ctx,args){let requested=args.apps;if(!Array.isArray(requested)||requested.some(item=>typeof item!="string"))throw new Error("apps must be an array of application names or bundle identifiers");let tcc=await getComputerUseCapabilities();if(!tcc.accessibility||!tcc.screenRecording)return await ctx.onPermissionRequest({apps:[],requestedFlags:{},tccState:tcc}),objectText({granted:!1,reason:"macOS permissions are incomplete",...tcc});let installed2=await listComputerUseInstalledApps(),existing=ctx.getAllowedApps(),requestedApps=requested.map(value=>{let resolved=appByRequest(installed2,value);return{requestedName:value,resolved,alreadyGranted:resolved?existing.some(grant=>grant.bundleId===resolved.bundleId):!1}}),requestedFlags={clipboardRead:args.clipboard_read===!0,clipboardWrite:args.clipboard_write===!0,systemKeyCombos:args.system_key_combos===!0},response=await ctx.onPermissionRequest({apps:requestedApps,requestedFlags,reason:typeof args.reason=="string"?args.reason:void 0}),merged=new Map(existing.map(app=>[app.bundleId,app]));for(let grant of response.granted)merged.set(grant.bundleId,grant);let flags={clipboardRead:ctx.getGrantFlags().clipboardRead||response.flags.clipboardRead,clipboardWrite:ctx.getGrantFlags().clipboardWrite||response.flags.clipboardWrite,systemKeyCombos:ctx.getGrantFlags().systemKeyCombos||response.flags.systemKeyCombos};return ctx.onAllowedAppsChanged([...merged.values()],flags),objectText({granted:response.granted,denied:response.denied,flags})}async function dispatch(toolName5,args,ctx){if(toolName5==="computer_status"){let[capabilities,displays,running,frontmost,bridgeWarm]=await Promise.all([getComputerUseCapabilities(),listComputerUseDisplays(),listComputerUseRunningApps(),getComputerUseFrontmostApp(),warmComputerUseBridge()]);return objectText({capabilities,displays,frontmost,runningApps:running,bridgeWarm})}if(toolName5==="request_access")return requestAccess(ctx,args);if(toolName5==="list_granted_applications")return objectText({apps:ctx.getAllowedApps(),flags:ctx.getGrantFlags()});await ensureOsPermissions(),await ensureLock(ctx);let signal=ctx.getAbortSignal();if(signal.aborted)throw new Error("Computer Use action was aborted.");switch(toolName5){case"open_application":{let bundleId2=stringArg(args,"bundle_id");return requireAllowedBundle(ctx,bundleId2),await openComputerUseApp(bundleId2),text(`Opened ${bundleId2}.`)}case"screenshot":{if(ctx.getAllowedApps().length===0)throw new Error("No applications are granted.");await prepareGrantedApps(ctx),await assertScreenshotIsFiltered(ctx),await assertScreenshotNotSensitiveFrontmost();let display=await getComputerUseDisplay(typeof args.display_id=="number"?args.display_id:ctx.getSelectedDisplayId()),capture=await captureComputerUseScreenshot({displayId:display.id,signal});return ctx.onScreenshotCaptured(screenshotDims(capture,display)),{content:[{type:"image",data:capture.base64,mimeType:capture.mediaType},{type:"text",text:`Display ${display.name}: screenshot ${capture.width}x${capture.height}; logical display ${display.width}x${display.height}. Coordinates in this image are scaled automatically for pointer tools. Prefer inspect_ui/find_label for targeting \u2014 full screenshot is last-resort eyes.`}]}}case"zoom":{let region=args.region;if(!Array.isArray(region)||region.length!==4||region.some(v2=>typeof v2!="number"))throw new Error("region must be [x, y, width, height]");await prepareGrantedApps(ctx),await assertScreenshotIsFiltered(ctx),await assertScreenshotNotSensitiveFrontmost();let[x3,y2,width,height]=region,capture=await captureComputerUseScreenshot({region:{x:x3,y:y2,width,height},signal});return{content:[{type:"image",data:capture.base64,mimeType:capture.mediaType}]}}case"inspect_ui":{let bundleId2=stringArg(args,"bundle_id");return requireAllowedBundle(ctx,bundleId2),objectText(await inspectComputerUseUi({bundleId:bundleId2,maxDepth:numberArg(args,"max_depth",6),maxElements:numberArg(args,"max_elements",120),includeMenuBar:args.include_menu_bar===!0}))}case"ui_action":{let bundleId2=stringArg(args,"bundle_id");requireAllowedBundle(ctx,bundleId2),await ensureAppFrontmost(bundleId2);let path36=stringArg(args,"path"),targetBefore=await describeComputerUseUiElement({bundleId:bundleId2,path:path36}),confirmed=await confirmDeclaredRisk(args,{tool:"ui_action",bundleId:bundleId2}),labelConfirmed=confirmed?!1:await confirmRiskyUiAction(targetBefore);if(confirmed||labelConfirmed){let targetAfter=await describeComputerUseUiElement({bundleId:bundleId2,path:path36});if(uiElementFingerprint(targetBefore)!==uiElementFingerprint(targetAfter))throw new Error("The confirmed UI target changed before execution. Inspect the UI again.")}return withVerifyNudge(objectText(await actOnComputerUseUi({bundleId:bundleId2,path:path36,action:stringArg(args,"action"),value:typeof args.value=="string"?args.value:void 0})),"ui_action")}case"find_label":{let bundleId2=stringArg(args,"bundle_id");requireAllowedBundle(ctx,bundleId2);let query2=stringArg(args,"query"),inspected=await inspectComputerUseUi({bundleId:bundleId2,maxDepth:numberArg(args,"max_depth",6),maxElements:numberArg(args,"max_elements",120),includeMenuBar:!1}),elements=extractInspectElements(inspected),matches2=findElementsByLabel(elements,query2,{exact:args.exact===!0,role:typeof args.role=="string"?args.role:void 0,limit:numberArg(args,"limit",12)});return objectText({bundleId:bundleId2,query:query2,exact:args.exact===!0,matchCount:matches2.length,matches:matches2.map(summarizeElement),hint:matches2.length===0?"No matches. Try substring query, broader role, or inspect_ui manually.":matches2.length===1?"One match \u2014 use click_text or ui_action with path.":"Multiple matches \u2014 pass exact=true or role=AXButton, or pick path for ui_action."})}case"click_text":{let bundleId2=stringArg(args,"bundle_id");requireAllowedBundle(ctx,bundleId2),await ensureAppFrontmost(bundleId2);let query2=stringArg(args,"query"),inspected=await inspectComputerUseUi({bundleId:bundleId2,maxDepth:numberArg(args,"max_depth",6),maxElements:numberArg(args,"max_elements",120),includeMenuBar:!1}),elements=extractInspectElements(inspected),matches2=findElementsByLabel(elements,query2,{exact:args.exact===!0,role:typeof args.role=="string"?args.role:void 0,limit:8});if(matches2.length===0)throw new Error(`No UI element matching "${query2}" in ${bundleId2}. Try find_label or inspect_ui.`);if(matches2.length>1&&args.exact!==!0)return objectText({ok:!1,reason:"ambiguous",query:query2,matchCount:matches2.length,matches:matches2.map(summarizeElement),hint:"Pass exact=true, role=\u2026, or call ui_action with a chosen path."});let target=matches2[0],targetBefore=await describeComputerUseUiElement({bundleId:bundleId2,path:target.path}),confirmed=await confirmDeclaredRisk(args,{tool:"click_text",bundleId:bundleId2}),labelConfirmed=confirmed?!1:await confirmRiskyUiAction(targetBefore);if(confirmed||labelConfirmed){let targetAfter=await describeComputerUseUiElement({bundleId:bundleId2,path:target.path});if(uiElementFingerprint(targetBefore)!==uiElementFingerprint(targetAfter))throw new Error("The confirmed UI target changed before execution. Inspect the UI again.")}let axAction=pickClickAction(target);if(axAction){let acted=await actOnComputerUseUi({bundleId:bundleId2,path:target.path,action:axAction});return withVerifyNudge(objectText({ok:!0,method:"ax",action:axAction,target:summarizeElement(target),result:acted}),"click_text")}if(!target.frame)throw new Error(`Matched "${query2}" at path ${target.path} but no AXPress action and no frame for click.`);let point=frameCenter(target.frame);return await requirePointTarget(ctx,point),await clickComputerUseMouse({...point,button:"left",count:1}),withVerifyNudge(objectText({ok:!0,method:"frame_click",coordinate:[point.x,point.y],target:summarizeElement(target)}),"click_text")}case"mouse_move":{let point=scaleFromScreenshot(ctx,coordinateArg(args));return await moveComputerUseMouse(point.x,point.y),text(`Moved to (${point.x}, ${point.y}).`)}case"left_click":case"right_click":case"double_click":case"triple_click":{let point=scaleFromScreenshot(ctx,coordinateArg(args));await requirePointTarget(ctx,point);let targetBefore=await getComputerUseUiElementAtPoint(point.x,point.y),confirmed=await confirmDeclaredRisk(args,{tool:toolName5}),labelConfirmed=confirmed?!1:await confirmRiskyUiAction(targetBefore);if(confirmed||labelConfirmed){let targetAfter=await getComputerUseUiElementAtPoint(point.x,point.y);if(uiElementFingerprint(targetBefore)!==uiElementFingerprint(targetAfter))throw new Error("The confirmed pointer target changed before execution. Take a new screenshot and retry.")}return await clickComputerUseMouse({...point,button:toolName5==="right_click"?"right":"left",count:toolName5==="double_click"?2:toolName5==="triple_click"?3:1}),withVerifyNudge(text(`Clicked (${point.x}, ${point.y}).`),toolName5)}case"left_click_drag":{await confirmDeclaredRisk(args,{tool:"left_click_drag"});let from=scaleFromScreenshot(ctx,coordinateArg(args,"start_coordinate")),to=scaleFromScreenshot(ctx,coordinateArg(args));return await requirePointTarget(ctx,from),await dragComputerUseMouse(from,to),withVerifyNudge(text(`Dragged (${from.x}, ${from.y}) to (${to.x}, ${to.y}).`),"left_click_drag")}case"scroll":{if(args.coordinate){let point=scaleFromScreenshot(ctx,coordinateArg(args));await requirePointTarget(ctx,point),await moveComputerUseMouse(point.x,point.y)}else await requireInputTarget(ctx);let amount=numberArg(args,"amount",3)*120,direction=stringArg(args,"direction");return await scrollComputerUseMouse(direction==="left"?-amount:direction==="right"?amount:0,direction==="up"?amount:direction==="down"?-amount:0),text(`Scrolled ${direction}.`)}case"type":return await requireInputTarget(ctx),await confirmDeclaredRisk(args,{tool:"type"}),await typeComputerUseText(stringArg(args,"text")),withVerifyNudge(text("Typed text."),"type");case"key":{await requireInputTarget(ctx),await confirmDeclaredRisk(args,{tool:"key"});let keys2=stringArg(args,"text").split("+").filter(Boolean);if(keys2.length>1&&!ctx.getGrantFlags().systemKeyCombos)throw new Error("System key combinations were not granted. Call request_access with system_key_combos=true.");let repeat3=numberArg(args,"repeat",1);keys2.length===1&&["escape","esc"].includes(keys2[0].toLowerCase())&&void 0;for(let index=0;index<repeat3;index++)await pressComputerUseKeys(keys2);return withVerifyNudge(text(`Pressed ${keys2.join("+")}.`),"key")}case"wait":return await sleep2(numberArg(args,"duration")*1e3),text("Wait complete.");case"cursor_position":return objectText(await getComputerUseCursorPosition());case"read_clipboard":{if(!ctx.getGrantFlags().clipboardRead)throw new Error("Clipboard read was not granted.");let result2=await execFileNoThrow("/usr/bin/pbpaste",[],{useCwd:!1});if(result2.code!==0)throw new Error("Failed to read clipboard.");return text(result2.stdout)}case"write_clipboard":{if(!ctx.getGrantFlags().clipboardWrite)throw new Error("Clipboard write was not granted.");if((await execFileNoThrow("/usr/bin/pbcopy",[],{useCwd:!1,input:stringArg(args,"text"),stdin:"pipe"})).code!==0)throw new Error("Failed to write clipboard.");return text("Clipboard updated.")}default:throw new Error(`Unsupported Computer Use tool: ${toolName5}`)}}function getComputerUseMCPToolOverrides(toolName5){let call105=__name(async(rawArgs,context2)=>{if(currentToolUseContext=context2,context2.agentId)return{data:[{type:"text",text:"Computer Use is owned by the interactive main session. Ask the main Clavue turn to perform this UI action."}]};try{return{data:(await dispatch(toolName5,rawArgs??{},buildSessionContext())).content.map(item=>item.type==="image"?{type:"image",source:{type:"base64",media_type:item.mimeType,data:item.data}}:{type:"text",text:item.text})}}catch(error40){return{data:[{type:"text",text:`Computer Use failed: ${error40 instanceof Error?error40.message:String(error40)}`}]}}},"call");return{...getComputerUseMCPRenderingOverrides(toolName5),call:call105}}async function runActionConfirmation(risk){let context2=tuc(),setToolJSX=context2.setToolJSX;if(!setToolJSX)return!1;try{return await new Promise((resolve64,reject2)=>{let signal=context2.abortController.signal;if(signal.aborted){reject2(new Error("Computer Use action confirmation aborted"));return}let onAbort=__name(()=>reject2(new Error("Computer Use action confirmation aborted")),"onAbort");signal.addEventListener("abort",onAbort,{once:!0}),setToolJSX({jsx:React24.createElement(ComputerUseActionApproval,{...risk,onDone:__name(approved=>{signal.removeEventListener("abort",onAbort),resolve64(approved)},"onDone")}),shouldHidePromptInput:!0})})}finally{setToolJSX(null)}}async function runPermissionDialog(request){let context2=tuc(),setToolJSX=context2.setToolJSX;if(!setToolJSX)return{granted:[],denied:[],flags:DEFAULT_GRANT_FLAGS};try{return await new Promise((resolve64,reject2)=>{let signal=context2.abortController.signal;if(signal.aborted){reject2(new Error("Computer Use permission dialog aborted"));return}let onAbort=__name(()=>reject2(new Error("Computer Use permission dialog aborted")),"onAbort");signal.addEventListener("abort",onAbort,{once:!0}),setToolJSX({jsx:React24.createElement(ComputerUseApproval,{request,onDone:__name(response=>{signal.removeEventListener("abort",onAbort),resolve64(response)},"onDone")}),shouldHidePromptInput:!0})})}finally{setToolJSX(null)}}var React24,currentToolUseContext,SAFE_SYSTEM_CHROME,RISK_PATTERNS,init_wrapper2=__esm({"src/utils/computerUse/wrapper.tsx"(){React24=__toESM(require_react());init_state();init_ComputerUseApproval();init_sleep2();init_computerUseLock();init_executor();init_execFileNoThrow();init_escHotkey();init_audit();init_efficiencyLaw();init_toolRendering2();init_uiFind();init_types17();__name(tuc,"tuc");__name(formatLockHeld,"formatLockHeld");__name(updateComputerUseState,"updateComputerUseState");__name(buildSessionContext,"buildSessionContext");__name(text,"text");__name(objectText,"objectText");__name(withVerifyNudge,"withVerifyNudge");__name(assertScreenshotNotSensitiveFrontmost,"assertScreenshotNotSensitiveFrontmost");__name(ensureAppFrontmost,"ensureAppFrontmost");__name(stringArg,"stringArg");__name(numberArg,"numberArg");__name(coordinateArg,"coordinateArg");__name(appByRequest,"appByRequest");__name(allowedSet,"allowedSet");__name(requireAllowedBundle,"requireAllowedBundle");__name(requireInputTarget,"requireInputTarget");__name(requirePointTarget,"requirePointTarget");__name(ensureLock,"ensureLock");__name(ensureOsPermissions,"ensureOsPermissions");__name(prepareGrantedApps,"prepareGrantedApps");SAFE_SYSTEM_CHROME=new Set(["com.apple.dock","com.apple.systemuiserver","com.apple.controlcenter","com.apple.notificationcenterui"]);__name(assertScreenshotIsFiltered,"assertScreenshotIsFiltered");__name(screenshotDims,"screenshotDims");__name(scaleFromScreenshot,"scaleFromScreenshot");RISK_PATTERNS=[{pattern:/\b(delete|remove|erase|trash|close|cancel subscription|unsubscribe)\b|删除|移除|清除|关闭|取消订阅/i,risk:"This may delete data, remove access, or close local content."},{pattern:/\b(send|submit|publish|post|reply|message|share|upload)\b|发送|提交|发布|回复|分享|上传/i,risk:"This may communicate or transmit data to a third party."},{pattern:/\b(pay|purchase|buy|checkout|subscribe|confirm order)\b|付款|支付|购买|结账|订阅|确认订单/i,risk:"This may create or confirm a financial transaction."},{pattern:/\b(install|extension|allow|grant|permission|security|privacy|system settings)\b|安装|扩展|允许|授权|权限|安全|隐私|系统设置/i,risk:"This may install software or change a permission/system setting."},{pattern:/\b(password|passcode|otp|verification code|api key|credit card)\b|密码|验证码|密钥|信用卡/i,risk:"This may enter or expose sensitive authentication or financial data."}];__name(classifyRiskyElement,"classifyRiskyElement");__name(uiElementFingerprint,"uiElementFingerprint");__name(confirmRiskyUiAction,"confirmRiskyUiAction");__name(confirmDeclaredRisk,"confirmDeclaredRisk");__name(requestAccess,"requestAccess");__name(dispatch,"dispatch");__name(getComputerUseMCPToolOverrides,"getComputerUseMCPToolOverrides");__name(runActionConfirmation,"runActionConfirmation");__name(runPermissionDialog,"runPermissionDialog")}});function createFetchToolsForClient({ensureConnectedClient:ensureConnectedClient2,callMCPToolWithUrlElicitationRetry:callMCPToolWithUrlElicitationRetry2}){return memoizeWithLRU(async client2=>{if(client2.type!=="connected")return[];try{if(!client2.capabilities?.tools)return[];let result2=await client2.client.request({method:"tools/list"},ListToolsResultSchema),toolsToProcess=recursivelySanitizeUnicode(result2.tools),skipPrefix=client2.config.type==="sdk"&&isEnvTruthy2(process.env.CLAUDE_AGENT_SDK_MCP_NO_PREFIX);return toolsToProcess.map(tool=>{let fullyQualifiedName=buildMcpToolName(client2.name,tool.name);return{...MCPTool,name:skipPrefix?tool.name:fullyQualifiedName,mcpInfo:{serverName:client2.name,toolName:tool.name},isMcp:!0,searchHint:typeof tool._meta?.["anthropic/searchHint"]=="string"&&tool._meta["anthropic/searchHint"].replace(/\s+/g," ").trim()||void 0,alwaysLoad:tool._meta?.["anthropic/alwaysLoad"]===!0,async description(){return tool.description??""},async prompt(){let desc=tool.description??"";return desc.length>MAX_MCP_DESCRIPTION_LENGTH?desc.slice(0,MAX_MCP_DESCRIPTION_LENGTH)+"\u2026 [truncated]":desc},isConcurrencySafe(){return tool.annotations?.readOnlyHint??!1},isReadOnly(){return tool.annotations?.readOnlyHint??!1},toAutoClassifierInput(input2){return mcpToolInputToAutoClassifierInput(input2,tool.name)},isDestructive(){return tool.annotations?.destructiveHint??!1},isOpenWorld(){return tool.annotations?.openWorldHint??!1},isSearchOrReadCommand(){return classifyMcpToolForCollapse(client2.name,tool.name)},inputJSONSchema:tool.inputSchema,async checkPermissions(){return{behavior:"passthrough",message:"MCPTool requires permission.",suggestions:[{type:"addRules",rules:[{toolName:fullyQualifiedName,ruleContent:void 0}],behavior:"allow",destination:"localSettings"}]}},async call(args,context2,_canUseTool,parentMessage,onProgress){let toolUseId=extractToolUseId(parentMessage),meta=toolUseId?{"claudecode/toolUseId":toolUseId}:{};onProgress&&toolUseId&&onProgress({toolUseID:toolUseId,data:{type:"mcp_progress",status:"started",serverName:client2.name,toolName:tool.name}});let startTime=Date.now(),MAX_SESSION_RETRIES=1,MAX_TRANSIENT_RETRIES=tool.annotations?.readOnlyHint?1:0,sessionRetries=0,transientRetries=0;for(;;)try{let connectedClient=await ensureConnectedClient2(client2),mcpResult=await callMCPToolWithUrlElicitationRetry2({client:connectedClient,clientConnection:client2,tool:tool.name,args,meta,signal:context2.abortController.signal,setAppState:context2.setAppState,onProgress:onProgress&&toolUseId?progressData=>{onProgress({toolUseID:toolUseId,data:progressData})}:void 0,handleElicitation:context2.handleElicitation});return onProgress&&toolUseId&&onProgress({toolUseID:toolUseId,data:{type:"mcp_progress",status:"completed",serverName:client2.name,toolName:tool.name,elapsedTimeMs:Date.now()-startTime}}),{data:mcpResult.content,...(mcpResult._meta||mcpResult.structuredContent)&&{mcpMeta:{...mcpResult._meta&&{_meta:mcpResult._meta},...mcpResult.structuredContent&&{structuredContent:mcpResult.structuredContent}}}}}catch(error40){if(error40 instanceof McpSessionExpiredError&&sessionRetries<MAX_SESSION_RETRIES){sessionRetries++,logMCPDebug(client2.name,`Retrying tool '${tool.name}' after session recovery`);continue}if(transientRetries<MAX_TRANSIENT_RETRIES&&isMcpTransientToolCallError(error40)){transientRetries++,logMCPDebug(client2.name,`Retrying read-only tool '${tool.name}' after transient transport failure`);continue}if(onProgress&&toolUseId&&onProgress({toolUseID:toolUseId,data:{type:"mcp_progress",status:"failed",serverName:client2.name,toolName:tool.name,elapsedTimeMs:Date.now()-startTime}}),error40 instanceof Error&&!(error40 instanceof TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS)){let name=error40.constructor.name;if(name==="Error")throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(error40.message,error40.message.slice(0,200));if(name==="McpError"&&"code"in error40&&typeof error40.code=="number")throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(error40.message,`McpError ${error40.code}`)}throw error40}},userFacingName(){let displayName=tool.annotations?.title||tool.name;return`${client2.name} - ${displayName} (MCP)`},...isClaudeInChromeMCPServer(client2.name)&&(client2.config.type==="stdio"||!client2.config.type)?claudeInChromeToolRendering().getClaudeInChromeMCPToolOverrides(tool.name):{},...(client2.config.type==="stdio"||!client2.config.type)&&isComputerUseMCPServer2(client2.name)?computerUseWrapper().getComputerUseMCPToolOverrides(tool.name):{}}}).filter(isIncludedMcpTool)}catch(error40){return logMCPError(client2.name,`Failed to fetch tools: ${errorMessage(error40)}`),[]}},client2=>client2.name,MCP_FETCH_CACHE_SIZE)}var claudeInChromeToolRendering,computerUseWrapper,isComputerUseMCPServer2,init_toolFetcher=__esm({"src/services/mcp/toolFetcher.ts"(){init_types3();init_classifyForCollapse();init_MCPTool();init_common2();init_envUtils();init_errors2();init_log3();init_memoize2();init_sanitization();init_connectionUtils();init_mcpStringUtils();init_utils10();init_toolCaller();claudeInChromeToolRendering=__name(()=>(init_toolRendering(),__toCommonJS(toolRendering_exports)),"claudeInChromeToolRendering"),computerUseWrapper=()=>(init_wrapper2(),__toCommonJS(wrapper_exports2)),isComputerUseMCPServer2=(init_common3(),__toCommonJS(common_exports)).isComputerUseMCPServer;__name(createFetchToolsForClient,"createFetchToolsForClient")}});function getServerNameForElicitation(clientConnection){return clientConnection.type==="connected"?clientConnection.name:"unknown"}function getValidUrlElicitations(errorData){return(errorData!=null&&typeof errorData=="object"&&"elicitations"in errorData&&Array.isArray(errorData.elicitations)?errorData.elicitations:[]).filter(e2=>{if(e2==null||typeof e2!="object")return!1;let obj=e2;return obj.mode==="url"&&typeof obj.url=="string"&&typeof obj.elicitationId=="string"&&typeof obj.message=="string"})}function formatUrlElicitationBlockedMessage(tool,action,actor){return`URL elicitation was ${action==="decline"?"declined":action+"ed"} by ${actor==="hook"?"a hook":"the user"}. The tool "${tool}" could not complete because it requires the user to open a URL.`}async function queueUrlElicitation({serverName,elicitation,signal,setAppState}){let waitingState={actionLabel:"Retry now",showCancel:!0};return new Promise(resolve64=>{let onAbort=__name(()=>{resolve64({action:"cancel"})},"onAbort");if(signal.aborted){onAbort();return}signal.addEventListener("abort",onAbort,{once:!0}),setAppState(prev=>({...prev,elicitation:{queue:[...prev.elicitation.queue,{serverName,requestId:`error-elicit-${elicitation.elicitationId}`,params:elicitation,signal,waitingState,respond:__name(result2=>{result2.action!=="accept"&&(signal.removeEventListener("abort",onAbort),resolve64(result2))},"respond"),onWaitingDismiss:__name(action=>{signal.removeEventListener("abort",onAbort),resolve64(action==="retry"?{action:"accept"}:{action:"cancel"})},"onWaitingDismiss")}]}}))})}var init_urlElicitation=__esm({"src/services/mcp/urlElicitation.ts"(){__name(getServerNameForElicitation,"getServerNameForElicitation");__name(getValidUrlElicitations,"getValidUrlElicitations");__name(formatUrlElicitationBlockedMessage,"formatUrlElicitationBlockedMessage");__name(queueUrlElicitation,"queueUrlElicitation")}});function isMcpServerFromProjectOrLocalSettings(config3){return config3.scope==="project"||config3.scope==="local"}async function getMcpHeadersFromHelper(serverName,config3){if(!config3.headersHelper)return null;if("scope"in config3&&isMcpServerFromProjectOrLocalSettings(config3)&&!getIsNonInteractiveSession()&&!checkHasTrustDialogAccepted()){let error40=new Error(`Security: headersHelper for MCP server '${serverName}' executed before workspace trust is confirmed. If you see this message, post in https://github.com/anthropics/claude-code/issues.`);return logAntError("MCP headersHelper invoked before trust check",error40),logEvent("tengu_mcp_headersHelper_missing_trust",{}),null}try{logMCPDebug(serverName,"Executing headersHelper to get dynamic headers");let execResult=await execFileNoThrowWithCwd(config3.headersHelper,[],{shell:!0,timeout:1e4,env:{...process.env,CLAUDE_CODE_MCP_SERVER_NAME:serverName,CLAUDE_CODE_MCP_SERVER_URL:config3.url}});if(execResult.code!==0||!execResult.stdout)throw new Error(`headersHelper for MCP server '${serverName}' did not return a valid value`);let result2=execResult.stdout.trim(),headers=jsonParse(result2);if(typeof headers!="object"||headers===null||Array.isArray(headers))throw new Error(`headersHelper for MCP server '${serverName}' must return a JSON object with string key-value pairs`);for(let[key,value]of Object.entries(headers))if(typeof value!="string")throw new Error(`headersHelper for MCP server '${serverName}' returned non-string value for key "${key}": ${typeof value}`);return logMCPDebug(serverName,`Successfully retrieved ${Object.keys(headers).length} headers from headersHelper`),headers}catch(error40){return logMCPError(serverName,`Error getting headers from headersHelper: ${errorMessage(error40)}`),logError2(new Error(`Error getting MCP headers from headersHelper for server '${serverName}': ${errorMessage(error40)}`)),null}}async function getMcpServerHeaders(serverName,config3){let staticHeaders=config3.headers||{},dynamicHeaders=await getMcpHeadersFromHelper(serverName,config3)||{};return{...staticHeaders,...dynamicHeaders}}var init_headersHelper=__esm({"src/services/mcp/headersHelper.ts"(){init_state();init_config11();init_debug();init_errors2();init_execFileNoThrow();init_log3();init_slowOperations();init_analytics();__name(isMcpServerFromProjectOrLocalSettings,"isMcpServerFromProjectOrLocalSettings");__name(getMcpHeadersFromHelper,"getMcpHeadersFromHelper");__name(getMcpServerHeaders,"getMcpServerHeaders")}});var SdkControlClientTransport,init_SdkControlTransport=__esm({"src/services/mcp/SdkControlTransport.ts"(){SdkControlClientTransport=class{constructor(serverName,sendMcpMessage){this.serverName=serverName;this.sendMcpMessage=sendMcpMessage}serverName;sendMcpMessage;static{__name(this,"SdkControlClientTransport")}isClosed=!1;onclose;onerror;onmessage;async start(){}async send(message){if(this.isClosed)throw new Error("Transport is closed");let response=await this.sendMcpMessage(this.serverName,message);this.onmessage&&this.onmessage(response)}async close(){this.isClosed||(this.isClosed=!0,this.onclose?.())}}}});var mcpSkills_exports={};__export(mcpSkills_exports,{fetchMcpSkillsForClient:()=>fetchMcpSkillsForClient,loadMcpSkills:()=>loadMcpSkills});async function loadMcpSkills(..._args){return[]}var fetchMcpSkillsForClient,init_mcpSkills=__esm({"src/skills/mcpSkills.ts"(){init_memoize2();__name(loadMcpSkills,"loadMcpSkills");fetchMcpSkillsForClient=memoizeWithLRU(async(..._args)=>[],(...args)=>String(args[0]??""),16)}});import process16 from"node:process";var StdioServerTransport,init_stdio4=__esm({"../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js"(){init_stdio2();StdioServerTransport=class{static{__name(this,"StdioServerTransport")}constructor(_stdin=process16.stdin,_stdout=process16.stdout){this._stdin=_stdin,this._stdout=_stdout,this._readBuffer=new ReadBuffer,this._started=!1,this._ondata=chunk3=>{this._readBuffer.append(chunk3),this.processReadBuffer()},this._onerror=error40=>{this.onerror?.(error40)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let message=this._readBuffer.readMessage();if(message===null)break;this.onmessage?.(message)}catch(error40){this.onerror?.(error40)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(message){return new Promise(resolve64=>{let json2=serializeMessage(message);this._stdout.write(json2)?resolve64():this._stdout.once("drain",resolve64)})}}}});function isSinkKilled(sink2){return getDynamicConfig_CACHED_MAY_BE_STALE(SINK_KILLSWITCH_CONFIG_NAME,{})?.[sink2]===!0}var SINK_KILLSWITCH_CONFIG_NAME,init_sinkKillswitch=__esm({"src/services/analytics/sinkKillswitch.ts"(){init_growthbook();SINK_KILLSWITCH_CONFIG_NAME="tengu_frond_boric";__name(isSinkKilled,"isSinkKilled")}});function shouldTrackDatadog(){if(isSinkKilled("datadog"))return!1;if(isDatadogGateEnabled!==void 0)return isDatadogGateEnabled;try{return checkStatsigFeatureGate_CACHED_MAY_BE_STALE(DATADOG_GATE_NAME)}catch{return!1}}function logEventImpl(eventName,metadata){let sampleResult=shouldSampleEvent(eventName);if(sampleResult===0)return;let metadataWithSampleRate=sampleResult!==null?{...metadata,sample_rate:sampleResult}:metadata;shouldTrackDatadog()&&trackDatadogEvent(eventName,stripProtoFields(metadataWithSampleRate)),logEventTo1P(eventName,metadataWithSampleRate)}function logEventAsyncImpl(eventName,metadata){return logEventImpl(eventName,metadata),Promise.resolve()}function initializeAnalyticsGates(){isDatadogGateEnabled=checkStatsigFeatureGate_CACHED_MAY_BE_STALE(DATADOG_GATE_NAME)}function initializeAnalyticsSink(){attachAnalyticsSink({logEvent:logEventImpl,logEventAsync:logEventAsyncImpl})}var DATADOG_GATE_NAME,isDatadogGateEnabled,init_sink=__esm({"src/services/analytics/sink.ts"(){init_datadog();init_firstPartyEventLogger();init_growthbook();init_analytics();init_sinkKillswitch();DATADOG_GATE_NAME="tengu_log_datadog_events";__name(shouldTrackDatadog,"shouldTrackDatadog");__name(logEventImpl,"logEventImpl");__name(logEventAsyncImpl,"logEventAsyncImpl");__name(initializeAnalyticsGates,"initializeAnalyticsGates");__name(initializeAnalyticsSink,"initializeAnalyticsSink")}});var runtime_exports2={};__export(runtime_exports2,{CLAUDE_IN_CHROME_TOOL_NAMES:()=>CLAUDE_IN_CHROME_TOOL_NAMES,getClaudeInChromeAllowedTools:()=>getClaudeInChromeAllowedTools,isClaudeInChromeRuntimeAvailable:()=>isClaudeInChromeRuntimeAvailable,loadClaudeInChromeRuntime:()=>loadClaudeInChromeRuntime});import{createRequire as createRequire6}from"module";function getClaudeInChromeAllowedTools(){return CLAUDE_IN_CHROME_TOOL_NAMES.map(toolName5=>`mcp__claude-in-chrome__${toolName5}`)}function isClaudeInChromeRuntimeAvailable(){if(runtimeAvailable!==void 0)return runtimeAvailable;try{require5.resolve(CLAUDE_IN_CHROME_RUNTIME_PACKAGE),runtimeAvailable=!0}catch{runtimeAvailable=!1}return runtimeAvailable}async function loadClaudeInChromeRuntime(){try{return await import(CLAUDE_IN_CHROME_RUNTIME_PACKAGE)}catch(error40){throw isClaudeInChromeRuntimeAvailable()?new Error(`${CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE} ${error40 instanceof Error?error40.message:String(error40)}`):new Error(CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE)}}var require5,CLAUDE_IN_CHROME_TOOL_NAMES,CLAUDE_IN_CHROME_RUNTIME_PACKAGE,CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE,runtimeAvailable,init_runtime5=__esm({"src/utils/claudeInChrome/runtime.ts"(){require5=createRequire6(import.meta.url),CLAUDE_IN_CHROME_TOOL_NAMES=["javascript_tool","read_page","find","form_input","computer","navigate","resize_window","gif_creator","upload_image","get_page_text","tabs_context_mcp","tabs_create_mcp","update_plan","read_console_messages","read_network_requests","shortcuts_list","shortcuts_execute"],CLAUDE_IN_CHROME_RUNTIME_PACKAGE="@ant/claude-for-chrome-mcp",CLAUDE_IN_CHROME_UNAVAILABLE_MESSAGE="Clavue browser integration is unavailable in this build because the private Chrome MCP runtime is not installed.";__name(getClaudeInChromeAllowedTools,"getClaudeInChromeAllowedTools");__name(isClaudeInChromeRuntimeAvailable,"isClaudeInChromeRuntimeAvailable");__name(loadClaudeInChromeRuntime,"loadClaudeInChromeRuntime")}});var mcpServer_exports={};__export(mcpServer_exports,{createChromeContext:()=>createChromeContext,runClaudeInChromeMcpServer:()=>runClaudeInChromeMcpServer});import{format as format3}from"util";function isPermissionMode(raw){return PERMISSION_MODES2.some(m3=>m3===raw)}function getChromeBridgeUrl(){if(process.env.USER_TYPE==="ant"||getFeatureValue_CACHED_MAY_BE_STALE("tengu_copper_bridge",!1))return isEnvTruthy2(process.env.USE_LOCAL_OAUTH)||isEnvTruthy2(process.env.LOCAL_BRIDGE)?"ws://localhost:8765":isEnvTruthy2(process.env.USE_STAGING_OAUTH)?"wss://bridge-staging.\u0063laudeusercontent.com":"wss://bridge.\u0063laudeusercontent.com"}function isLocalBridge(){return isEnvTruthy2(process.env.USE_LOCAL_OAUTH)||isEnvTruthy2(process.env.LOCAL_BRIDGE)}function createChromeContext(env5){let logger=new DebugLogger,chromeBridgeUrl=getChromeBridgeUrl();logger.info(`Bridge URL: ${chromeBridgeUrl??"none (using native socket)"}`);let rawPermissionMode=env5?.CLAUDE_CHROME_PERMISSION_MODE??process.env.CLAUDE_CHROME_PERMISSION_MODE,initialPermissionMode;return rawPermissionMode&&(isPermissionMode(rawPermissionMode)?initialPermissionMode=rawPermissionMode:logger.warn(`Invalid CLAUDE_CHROME_PERMISSION_MODE "${rawPermissionMode}". Valid values: ${PERMISSION_MODES2.join(", ")}`)),{serverName:"Clavue Browser",logger,socketPath:getSecureSocketPath(),getSocketPaths:getAllSocketPaths,clientTypeId:"claude-code",onAuthenticationError:__name(()=>{logger.warn("Authentication error occurred. Please ensure you are logged into the browser extension with the same official account as Clavue.")},"onAuthenticationError"),onToolCallDisconnected:__name(()=>`Browser extension is not connected. Please ensure the Clavue browser extension is installed and running (${EXTENSION_DOWNLOAD_URL}), and that you are logged into the same official account as Clavue. If this is your first time connecting to Chrome, you may need to restart Chrome for the installation to take effect. If you continue to experience issues, please report a bug: ${BUG_REPORT_URL}`,"onToolCallDisconnected"),onExtensionPaired:__name((deviceId,name)=>{saveGlobalConfig(config3=>config3.chromeExtension?.pairedDeviceId===deviceId&&config3.chromeExtension?.pairedDeviceName===name?config3:{...config3,chromeExtension:{pairedDeviceId:deviceId,pairedDeviceName:name}}),logger.info(`Paired with "${name}" (${deviceId.slice(0,8)})`)},"onExtensionPaired"),getPersistedDeviceId:__name(()=>getGlobalConfig().chromeExtension?.pairedDeviceId,"getPersistedDeviceId"),...chromeBridgeUrl&&{bridgeConfig:{url:chromeBridgeUrl,getUserId:__name(async()=>getGlobalConfig().oauthAccount?.accountUuid,"getUserId"),getOAuthToken:__name(async()=>getClaudeAIOAuthTokens()?.accessToken??"","getOAuthToken"),...isLocalBridge()&&{devUserId:"dev_user_local"}}},...initialPermissionMode&&{initialPermissionMode},...process.env.USER_TYPE==="ant"&&{callAnthropicMessages:__name(async req=>{let response=await sideQuery({model:req.model,system:req.system,messages:req.messages,max_tokens:req.max_tokens,stop_sequences:req.stop_sequences,signal:req.signal,skipSystemPromptPrefix:!0,tools:[],querySource:"chrome_mcp"}),textBlocks=[];for(let b3 of response.content)b3.type==="text"&&textBlocks.push({type:"text",text:b3.text});return{content:textBlocks,stop_reason:response.stop_reason,usage:{input_tokens:response.usage.input_tokens,output_tokens:response.usage.output_tokens}}},"callAnthropicMessages")},trackEvent:__name((eventName,metadata)=>{let safeMetadata={};if(metadata)for(let[key,value]of Object.entries(metadata)){let safeKey=key==="status"?"bridge_status":key;(typeof value=="boolean"||typeof value=="number"||typeof value=="string"&&SAFE_BRIDGE_STRING_KEYS.has(safeKey))&&(safeMetadata[safeKey]=value)}logEvent(eventName,safeMetadata)},"trackEvent")}}async function runClaudeInChromeMcpServer(){enableConfigs(),initializeAnalyticsSink();let context2=createChromeContext(),{createClaudeForChromeMcpServer}=await loadClaudeInChromeRuntime(),server2=createClaudeForChromeMcpServer(context2),transport=new StdioServerTransport,exiting=!1,shutdownAndExit=__name(async()=>{exiting||(exiting=!0,await shutdown1PEventLogging(),await shutdownDatadog(),process.exit(0))},"shutdownAndExit");process.stdin.on("end",()=>{shutdownAndExit()}),process.stdin.on("error",()=>{shutdownAndExit()}),logForDebugging("[Clavue browser integration] Starting MCP server"),await server2.connect(transport),logForDebugging("[Clavue browser integration] MCP server started")}var EXTENSION_DOWNLOAD_URL,BUG_REPORT_URL,SAFE_BRIDGE_STRING_KEYS,PERMISSION_MODES2,DebugLogger,init_mcpServer=__esm({"src/utils/claudeInChrome/mcpServer.ts"(){init_stdio4();init_datadog();init_firstPartyEventLogger();init_growthbook();init_analytics();init_sink();init_auth6();init_config11();init_debug();init_envUtils();init_sideQuery();init_common2();init_runtime5();EXTENSION_DOWNLOAD_URL="https://claude.ai/chrome",BUG_REPORT_URL="https://github.com/anthropics/claude-code/issues/new?labels=bug,claude-in-chrome",SAFE_BRIDGE_STRING_KEYS=new Set(["bridge_status","error_type","tool_name"]),PERMISSION_MODES2=["ask","skip_all_permission_checks","follow_a_plan"];__name(isPermissionMode,"isPermissionMode");__name(getChromeBridgeUrl,"getChromeBridgeUrl");__name(isLocalBridge,"isLocalBridge");__name(createChromeContext,"createChromeContext");__name(runClaudeInChromeMcpServer,"runClaudeInChromeMcpServer");DebugLogger=class{static{__name(this,"DebugLogger")}silly(message,...args){logForDebugging(format3(message,...args),{level:"debug"})}debug(message,...args){logForDebugging(format3(message,...args),{level:"debug"})}info(message,...args){logForDebugging(format3(message,...args),{level:"info"})}warn(message,...args){logForDebugging(format3(message,...args),{level:"warn"})}error(message,...args){logForDebugging(format3(message,...args),{level:"error"})}}}});var InProcessTransport_exports={};__export(InProcessTransport_exports,{createLinkedTransportPair:()=>createLinkedTransportPair});function createLinkedTransportPair(){let a2=new InProcessTransport,b3=new InProcessTransport;return a2._setPeer(b3),b3._setPeer(a2),[a2,b3]}var InProcessTransport,init_InProcessTransport=__esm({"src/services/mcp/InProcessTransport.ts"(){InProcessTransport=class{static{__name(this,"InProcessTransport")}peer;closed=!1;onclose;onerror;onmessage;_setPeer(peer){this.peer=peer}async start(){}async send(message){if(this.closed)throw new Error("Transport is closed");queueMicrotask(()=>{this.peer?.onmessage?.(message)})}async close(){this.closed||(this.closed=!0,this.onclose?.(),this.peer&&!this.peer.closed&&(this.peer.closed=!0,this.peer.onclose?.()))}};__name(createLinkedTransportPair,"createLinkedTransportPair")}});var officialClavueMcp_exports={};__export(officialClavueMcp_exports,{OFFICIAL_CLAVUE_MCP_MARKER_ARG:()=>OFFICIAL_CLAVUE_MCP_MARKER_ARG,OFFICIAL_CLAVUE_MCP_SERVER_NAME:()=>OFFICIAL_CLAVUE_MCP_SERVER_NAME,OFFICIAL_CLAVUE_WEB_SEARCH_FQN:()=>OFFICIAL_CLAVUE_WEB_SEARCH_FQN,OFFICIAL_CLAVUE_WEB_SEARCH_TOOL:()=>OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,OFFICIAL_MCP_SETTING_MODES:()=>OFFICIAL_MCP_SETTING_MODES,assertOfficialMcpNonPollutingConfig:()=>assertOfficialMcpNonPollutingConfig,buildOfficialClavueMcpConfig:()=>buildOfficialClavueMcpConfig,callOfficialClavueWebSearch:()=>callOfficialClavueWebSearch,cycleOfficialMcpSettingMode:()=>cycleOfficialMcpSettingMode,formatOfficialMcpSettingLabel:()=>formatOfficialMcpSettingLabel,formatOfficialWebSearchForAgent:()=>formatOfficialWebSearchForAgent,getOfficialClavueMcpAllowedTools:()=>getOfficialClavueMcpAllowedTools,getOfficialClavueMcpConfigsIfEligible:()=>getOfficialClavueMcpConfigsIfEligible,isOfficialClavueMcpServer:()=>isOfficialClavueMcpServer,normalizeOfficialMcpSettingMode:()=>normalizeOfficialMcpSettingMode,readOfficialMcpChromeSnapshot:()=>readOfficialMcpChromeSnapshot,readOfficialMcpSettingMode:()=>readOfficialMcpSettingMode,resolveOfficialClavueMcpGate:()=>resolveOfficialClavueMcpGate,shouldSkipAutoMcpForExplicitTools:()=>shouldSkipAutoMcpForExplicitTools});function normalizeOfficialMcpSettingMode(raw){if(raw===!0||raw===1)return"on";if(raw===!1||raw===0)return"off";let s2=String(raw??"").trim().toLowerCase();return!s2||s2==="auto"||s2==="default"?"auto":s2==="on"||s2==="true"||s2==="1"||s2==="yes"||s2==="enable"||s2==="enabled"?"on":s2==="off"||s2==="false"||s2==="0"||s2==="no"||s2==="disable"||s2==="disabled"?"off":"auto"}function readOfficialMcpSettingMode(override){if(override!=null)return normalizeOfficialMcpSettingMode(override);try{let settings=getInitialSettings();if(settings?.officialMcp!==void 0&&settings.officialMcp!==null)return normalizeOfficialMcpSettingMode(settings.officialMcp)}catch{}return"auto"}function resolveOfficialClavueMcpGate(options){let settingMode=options?.force!==void 0?normalizeOfficialMcpSettingMode(options.force.settingMode??"auto"):readOfficialMcpSettingMode();if(options?.force?.bare??isBareMode())return{enabled:!1,reason:"disabled_bare",hasToken:!1,officialCloud:!1,settingMode};if(options?.strictMcpConfig)return{enabled:!1,reason:"disabled_strict_mcp",hasToken:!1,officialCloud:!1,settingMode};let envRaw=options?.force?.env!==void 0?options.force.env:process.env.CLAVUE_OFFICIAL_MCP;if(isEnvDefinedFalsy(envRaw))return{enabled:!1,reason:"disabled_env",hasToken:!1,officialCloud:!1,settingMode};let hasToken=!!(options?.force?.token!==void 0?options.force.token:getMembershipSessionToken())?.trim(),officialCloud=options?.force?.officialCloud??isMembershipCloudProfileActive(),envOptIn=isEnvTruthy2(envRaw);return hasToken?envOptIn?{enabled:!0,reason:"enabled_opt_in",hasToken:!0,officialCloud,settingMode}:settingMode==="off"?{enabled:!1,reason:"disabled_settings_off",hasToken:!0,officialCloud,settingMode}:settingMode==="on"?{enabled:!0,reason:"enabled_settings_on",hasToken:!0,officialCloud,settingMode}:officialCloud?{enabled:!0,reason:"enabled_official_cloud",hasToken:!0,officialCloud:!0,settingMode}:{enabled:!1,reason:"disabled_third_party_default",hasToken:!0,officialCloud:!1,settingMode}:{enabled:!1,reason:"disabled_no_token",hasToken:!1,officialCloud,settingMode}}function shouldSkipAutoMcpForExplicitTools(baseToolsCli,parseToolList){if(!Array.isArray(baseToolsCli)||baseToolsCli.length===0)return!1;let parsed=parseToolList([...baseToolsCli]);return parsed.length===0?!0:parsed.every(name=>{let n4=String(name||"").trim().toLowerCase();return n4?!(n4==="default"||n4==="all"||n4==="*"||n4==="mcp"||n4.startsWith("mcp__")||n4.startsWith("mcp:")):!0})}function cycleOfficialMcpSettingMode(current,delta=1){let modes=OFFICIAL_MCP_SETTING_MODES,idx=modes.indexOf(current),next=((idx<0?0:idx)+delta+modes.length)%modes.length;return modes[next]}function formatOfficialMcpSettingLabel(mode,locale){let zh2=!locale||locale.toLowerCase()==="zh"||locale.toLowerCase().startsWith("zh"),ja=!!locale&&(locale.toLowerCase()==="ja"||locale.toLowerCase().startsWith("ja"));return mode==="on"?zh2?"\u5F00":ja?"\u30AA\u30F3":"On":mode==="off"?zh2?"\u5173":ja?"\u30AA\u30D5":"Off":zh2?"\u81EA\u52A8":ja?"\u81EA\u52D5":"Auto"}function readOfficialMcpChromeSnapshot(options){try{let gate=resolveOfficialClavueMcpGate({strictMcpConfig:options?.strictMcpConfig,force:options?.force}),zh2=!!options?.locale&&(options.locale.toLowerCase()==="zh"||options.locale.toLowerCase().startsWith("zh")),modeLabel3=formatOfficialMcpSettingLabel(gate.settingMode,options?.locale),summary=gate.enabled?zh2?`\u5B98\u65B9 MCP \xB7 ${modeLabel3} \xB7 \u751F\u6548 \xB7 soft-fail \u4E0D\u6321\u5F00\u53D1`:`Official MCP \xB7 ${modeLabel3} \xB7 active \xB7 soft-fail never blocks coding`:zh2?`\u5B98\u65B9 MCP \xB7 ${modeLabel3} \xB7 \u672A\u6CE8\u5165 \xB7 ${gate.reason}`:`Official MCP \xB7 ${modeLabel3} \xB7 inactive \xB7 ${gate.reason}`;return{mode:gate.settingMode,active:gate.enabled,reason:gate.reason,chip:gate.enabled?"mcp":"",summary}}catch{return{mode:"auto",active:!1,reason:"disabled_env",chip:"",summary:"Official MCP \xB7 unavailable"}}}function assertOfficialMcpNonPollutingConfig(cfg){let entry=cfg[OFFICIAL_CLAVUE_MCP_SERVER_NAME];return entry?!(entry.scope!=="dynamic"||entry.type!=="stdio"||!(Array.isArray(entry.args)?entry.args:[]).includes(OFFICIAL_CLAVUE_MCP_MARKER_ARG)):!0}function isOfficialClavueMcpServer(name){return name===OFFICIAL_CLAVUE_MCP_SERVER_NAME}function buildOfficialClavueMcpConfig(){return{[OFFICIAL_CLAVUE_MCP_SERVER_NAME]:{type:"stdio",command:process.execPath,args:[OFFICIAL_CLAVUE_MCP_MARKER_ARG],scope:"dynamic"}}}function getOfficialClavueMcpConfigsIfEligible(options){try{let gate=resolveOfficialClavueMcpGate({strictMcpConfig:options?.strictMcpConfig});return logForDebugging(`[official-mcp] gate enabled=${gate.enabled} reason=${gate.reason} mode=${gate.settingMode} cloud=${gate.officialCloud} token=${gate.hasToken} env=${process.env.CLAVUE_OFFICIAL_MCP??"unset"}`),gate.enabled?buildOfficialClavueMcpConfig():{}}catch(error40){return logForDebugging(`[official-mcp] inject skipped (soft-fail): ${errorMessage(error40)}`,{level:"error"}),{}}}function getOfficialClavueMcpAllowedTools(){return[OFFICIAL_CLAVUE_WEB_SEARCH_FQN]}function resolveApiBase(){return(getMembershipLocalSession()?.apiBaseUrl||MEMBERSHIP_DEFAULT_API_BASE).replace(/\/+$/,"")}function toolsCallUrl(apiBase){return`${apiBase}/v1/mcp/tools/call`}async function callOfficialClavueWebSearch(input2){let query2=String(input2.query??"").trim();if(query2.length<2)return{ok:!1,softFail:!0,query:query2,results:[],count:0,error:"Search query too short"};let token=(input2.sessionToken!==void 0?input2.sessionToken:getMembershipSessionToken())?.trim();if(!token)return{ok:!1,softFail:!0,query:query2,results:[],count:0,error:"Sign in required for official web_search"};let apiBase=(input2.apiBaseUrl||resolveApiBase()).replace(/\/+$/,""),url3=toolsCallUrl(apiBase),timeoutMs=input2.timeoutMs??DEFAULT_TIMEOUT_MS,fetchImpl=input2.fetchImpl??globalThis.fetch.bind(globalThis),controller=new AbortController,onAbort=__name(()=>controller.abort(),"onAbort");input2.signal?.addEventListener("abort",onAbort,{once:!0});let timer2=setTimeout(()=>controller.abort(),timeoutMs);try{let response=await fetchImpl(url3,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json",Authorization:`Bearer ${token}`,"User-Agent":`clavue-cli/${typeof MACRO<"u"?"11.3.13":process.env.npm_package_version||"dev"} official-mcp`,"X-Imux-Kind":"cli_official_mcp_web_search"},body:JSON.stringify({name:OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,arguments:{query:query2},protocol:PROTOCOL}),signal:controller.signal}),text3=await response.text().catch(()=>""),json2=null;try{json2=text3?JSON.parse(text3):null}catch{json2=null}if(!response.ok){let msg=typeof json2?.message=="string"&&json2.message||typeof json2?.error=="string"&&json2.error||json2?.error&&typeof json2.error=="object"&&typeof json2.error.message=="string"&&json2.error.message||`Official web_search HTTP ${response.status}`;return logForDebugging(`[official-mcp] tools/call soft-fail status=${response.status}: ${msg}`),{ok:!1,softFail:!0,query:query2,results:[],count:0,requestId:typeof json2?.requestId=="string"?json2.requestId:void 0,error:String(msg),raw:json2}}let resultPayload=json2?.result??json2;return normalizeSearchResult(query2,resultPayload,json2)}catch(error40){let msg=errorMessage(error40);return logForDebugging(`[official-mcp] tools/call soft-fail: ${msg}`),{ok:!1,softFail:!0,query:query2,results:[],count:0,error:msg.includes("abort")?"Official web_search timed out or was aborted":msg}}finally{clearTimeout(timer2),input2.signal?.removeEventListener("abort",onAbort)}}function normalizeSearchResult(query2,resultPayload,envelope){let rec=resultPayload&&typeof resultPayload=="object"?resultPayload:null,results=extractHits(rec),summary=typeof rec?.summary=="string"&&rec.summary||typeof rec?.text=="string"&&rec.text||void 0,count4=typeof rec?.count=="number"?rec.count:results.length,productModel=typeof envelope?.productModel=="string"&&envelope.productModel||typeof rec?.productModel=="string"&&rec.productModel||void 0,requestId=typeof envelope?.requestId=="string"?envelope.requestId:void 0;return!(rec?.ok!==!1)&&results.length===0&&!summary?{ok:!1,softFail:!0,query:query2,results:[],count:0,productModel,requestId,error:typeof rec?.error=="string"&&rec.error||"Official web_search returned no usable results",raw:resultPayload}:{ok:!0,softFail:!1,query:typeof rec?.query=="string"&&rec.query||query2,summary,results,count:count4,productModel,requestId,raw:resultPayload}}function extractHits(rec){if(!rec)return[];let hits=[],pushItem=__name(item=>{if(!item||typeof item!="object")return;let r2=item,title=String(r2.title??r2.name??"").trim(),url3=String(r2.url??r2.link??"").trim();if(!title&&!url3)return;let snippet=String(r2.snippet??r2.description??"").trim();hits.push({title:title||url3,url:url3||"",...snippet?{snippet}:{}})},"pushItem");if(Array.isArray(rec.results))for(let item of rec.results)pushItem(item);if(hits.length===0&&Array.isArray(rec.sources))for(let item of rec.sources)pushItem(item);return hits.slice(0,12)}function formatOfficialWebSearchForAgent(result2){if(result2.softFail||!result2.ok)return["Official Clavue web_search is temporarily unavailable.",result2.error?`Reason: ${result2.error}`:null,"Continue coding with repo tools (Read/Grep/Bash). Do not invent web facts.","The session is healthy \u2014 search failure must not block development."].filter(Boolean).join(`
5565
5565
  `);let lines=[`Query: ${result2.query}`,result2.productModel?`Product: ${result2.productModel}`:null,result2.summary?`Summary:
5566
5566
  ${result2.summary}`:null].filter(Boolean);if(result2.results.length>0?(lines.push("Results:"),result2.results.forEach((hit,i3)=>{lines.push(`${i3+1}. ${hit.title}`),hit.url&&lines.push(` ${hit.url}`),hit.snippet&&lines.push(` ${hit.snippet}`)})):result2.summary||lines.push("(No structured hits; empty result set.)"),result2.raw&&typeof result2.raw=="object")try{let compact3=JSON.stringify(result2.raw);compact3.length<12e3&&lines.push("","--- clavue.search.v1 ---",compact3)}catch{}return lines.join(`
5567
- `)}var OFFICIAL_CLAVUE_MCP_SERVER_NAME,OFFICIAL_CLAVUE_MCP_MARKER_ARG,OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,OFFICIAL_CLAVUE_WEB_SEARCH_FQN,OFFICIAL_MCP_SETTING_MODES,DEFAULT_TIMEOUT_MS,PROTOCOL,init_officialClavueMcp=__esm({"src/services/mcp/officialClavueMcp.ts"(){init_debug();init_envUtils();init_errors2();init_settings2();init_config2();init_sessionStore();OFFICIAL_CLAVUE_MCP_SERVER_NAME="clavue",OFFICIAL_CLAVUE_MCP_MARKER_ARG="--clavue-official-mcp",OFFICIAL_CLAVUE_WEB_SEARCH_TOOL="web_search",OFFICIAL_CLAVUE_WEB_SEARCH_FQN=`mcp__${OFFICIAL_CLAVUE_MCP_SERVER_NAME}__${OFFICIAL_CLAVUE_WEB_SEARCH_TOOL}`,OFFICIAL_MCP_SETTING_MODES=["auto","on","off"],DEFAULT_TIMEOUT_MS=45e3,PROTOCOL="clavue.mcp.v1";__name(normalizeOfficialMcpSettingMode,"normalizeOfficialMcpSettingMode");__name(readOfficialMcpSettingMode,"readOfficialMcpSettingMode");__name(resolveOfficialClavueMcpGate,"resolveOfficialClavueMcpGate");__name(shouldSkipAutoMcpForExplicitTools,"shouldSkipAutoMcpForExplicitTools");__name(cycleOfficialMcpSettingMode,"cycleOfficialMcpSettingMode");__name(formatOfficialMcpSettingLabel,"formatOfficialMcpSettingLabel");__name(readOfficialMcpChromeSnapshot,"readOfficialMcpChromeSnapshot");__name(assertOfficialMcpNonPollutingConfig,"assertOfficialMcpNonPollutingConfig");__name(isOfficialClavueMcpServer,"isOfficialClavueMcpServer");__name(buildOfficialClavueMcpConfig,"buildOfficialClavueMcpConfig");__name(getOfficialClavueMcpConfigsIfEligible,"getOfficialClavueMcpConfigsIfEligible");__name(getOfficialClavueMcpAllowedTools,"getOfficialClavueMcpAllowedTools");__name(resolveApiBase,"resolveApiBase");__name(toolsCallUrl,"toolsCallUrl");__name(callOfficialClavueWebSearch,"callOfficialClavueWebSearch");__name(normalizeSearchResult,"normalizeSearchResult");__name(extractHits,"extractHits");__name(formatOfficialWebSearchForAgent,"formatOfficialWebSearchForAgent")}});var ExperimentalServerTasks,init_server=__esm({"../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js"(){init_types3();ExperimentalServerTasks=class{static{__name(this,"ExperimentalServerTasks")}constructor(_server){this._server=_server}requestStream(request,resultSchema,options){return this._server.requestStream(request,resultSchema,options)}createMessageStream(params,options){let clientCapabilities=this._server.getClientCapabilities();if((params.tools||params.toolChoice)&&!clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(params.messages.length>0){let lastMessage=params.messages[params.messages.length-1],lastContent=Array.isArray(lastMessage.content)?lastMessage.content:[lastMessage.content],hasToolResults=lastContent.some(c4=>c4.type==="tool_result"),previousMessage=params.messages.length>1?params.messages[params.messages.length-2]:void 0,previousContent=previousMessage?Array.isArray(previousMessage.content)?previousMessage.content:[previousMessage.content]:[],hasPreviousToolUse=previousContent.some(c4=>c4.type==="tool_use");if(hasToolResults){if(lastContent.some(c4=>c4.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!hasPreviousToolUse)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(hasPreviousToolUse){let toolUseIds=new Set(previousContent.filter(c4=>c4.type==="tool_use").map(c4=>c4.id)),toolResultIds=new Set(lastContent.filter(c4=>c4.type==="tool_result").map(c4=>c4.toolUseId));if(toolUseIds.size!==toolResultIds.size||![...toolUseIds].every(id=>toolResultIds.has(id)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params},CreateMessageResultSchema,options)}elicitInputStream(params,options){let clientCapabilities=this._server.getClientCapabilities(),mode=params.mode??"form";switch(mode){case"url":{if(!clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let normalizedParams=mode==="form"&&params.mode===void 0?{...params,mode:"form"}:params;return this.requestStream({method:"elicitation/create",params:normalizedParams},ElicitResultSchema,options)}async getTask(taskId,options){return this._server.getTask({taskId},options)}async getTaskResult(taskId,resultSchema,options){return this._server.getTaskResult({taskId},resultSchema,options)}async listTasks(cursor,options){return this._server.listTasks(cursor?{cursor}:void 0,options)}async cancelTask(taskId,options){return this._server.cancelTask({taskId},options)}}}});var Server,init_server2=__esm({"../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js"(){init_protocol();init_types3();init_ajv_provider();init_zod_compat();init_server();init_helpers2();Server=class extends Protocol{static{__name(this,"Server")}constructor(_serverInfo,options){super(options),this._serverInfo=_serverInfo,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(LoggingLevelSchema.options.map((level,index)=>[level,index])),this.isMessageIgnored=(level,sessionId)=>{let currentLevel=this._loggingLevels.get(sessionId);return currentLevel?this.LOG_LEVEL_SEVERITY.get(level)<this.LOG_LEVEL_SEVERITY.get(currentLevel):!1},this._capabilities=options?.capabilities??{},this._instructions=options?.instructions,this._jsonSchemaValidator=options?.jsonSchemaValidator??new AjvJsonSchemaValidator,this.setRequestHandler(InitializeRequestSchema,request=>this._oninitialize(request)),this.setNotificationHandler(InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(SetLevelRequestSchema,async(request,extra)=>{let transportSessionId=extra.sessionId||extra.requestInfo?.headers["mcp-session-id"]||void 0,{level}=request.params,parseResult=LoggingLevelSchema.safeParse(level);return parseResult.success&&this._loggingLevels.set(transportSessionId,parseResult.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new ExperimentalServerTasks(this)}),this._experimental}registerCapabilities(capabilities){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=mergeCapabilities(this._capabilities,capabilities)}setRequestHandler(requestSchema,handler){let methodSchema=getObjectShape(requestSchema)?.method;if(!methodSchema)throw new Error("Schema is missing a method literal");let methodValue;if(isZ4Schema(methodSchema)){let v4Schema=methodSchema;methodValue=v4Schema._zod?.def?.value??v4Schema.value}else{let v3Schema=methodSchema;methodValue=v3Schema._def?.value??v3Schema.value}if(typeof methodValue!="string")throw new Error("Schema method literal must be a string");if(methodValue==="tools/call"){let wrappedHandler=__name(async(request,extra)=>{let validatedRequest=safeParse3(CallToolRequestSchema,request);if(!validatedRequest.success){let errorMessage3=validatedRequest.error instanceof Error?validatedRequest.error.message:String(validatedRequest.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call request: ${errorMessage3}`)}let{params}=validatedRequest.data,result2=await Promise.resolve(handler(request,extra));if(params.task){let taskValidationResult=safeParse3(CreateTaskResultSchema,result2);if(!taskValidationResult.success){let errorMessage3=taskValidationResult.error instanceof Error?taskValidationResult.error.message:String(taskValidationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${errorMessage3}`)}return taskValidationResult.data}let validationResult=safeParse3(CallToolResultSchema,result2);if(!validationResult.success){let errorMessage3=validationResult.error instanceof Error?validationResult.error.message:String(validationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call result: ${errorMessage3}`)}return validationResult.data},"wrappedHandler");return super.setRequestHandler(requestSchema,wrappedHandler)}return super.setRequestHandler(requestSchema,handler)}assertCapabilityForMethod(method2){switch(method2){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${method2})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${method2})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${method2})`);break;case"ping":break}}assertNotificationCapability(method2){switch(method2){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${method2})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${method2})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${method2})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${method2})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${method2})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(method2){if(this._capabilities)switch(method2){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${method2})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${method2})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${method2})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${method2})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${method2})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${method2})`);break;case"ping":case"initialize":break}}assertTaskCapability(method2){assertClientRequestTaskCapability(this._clientCapabilities?.tasks?.requests,method2,"Client")}assertTaskHandlerCapability(method2){this._capabilities&&assertToolsCallTaskCapability(this._capabilities.tasks?.requests,method2,"Server")}async _oninitialize(request){let requestedVersion=request.params.protocolVersion;return this._clientCapabilities=request.params.capabilities,this._clientVersion=request.params.clientInfo,{protocolVersion:SUPPORTED_PROTOCOL_VERSIONS.includes(requestedVersion)?requestedVersion:LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},EmptyResultSchema)}async createMessage(params,options){if((params.tools||params.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(params.messages.length>0){let lastMessage=params.messages[params.messages.length-1],lastContent=Array.isArray(lastMessage.content)?lastMessage.content:[lastMessage.content],hasToolResults=lastContent.some(c4=>c4.type==="tool_result"),previousMessage=params.messages.length>1?params.messages[params.messages.length-2]:void 0,previousContent=previousMessage?Array.isArray(previousMessage.content)?previousMessage.content:[previousMessage.content]:[],hasPreviousToolUse=previousContent.some(c4=>c4.type==="tool_use");if(hasToolResults){if(lastContent.some(c4=>c4.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!hasPreviousToolUse)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(hasPreviousToolUse){let toolUseIds=new Set(previousContent.filter(c4=>c4.type==="tool_use").map(c4=>c4.id)),toolResultIds=new Set(lastContent.filter(c4=>c4.type==="tool_result").map(c4=>c4.toolUseId));if(toolUseIds.size!==toolResultIds.size||![...toolUseIds].every(id=>toolResultIds.has(id)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return params.tools?this.request({method:"sampling/createMessage",params},CreateMessageResultWithToolsSchema,options):this.request({method:"sampling/createMessage",params},CreateMessageResultSchema,options)}async elicitInput(params,options){switch(params.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let urlParams=params;return this.request({method:"elicitation/create",params:urlParams},ElicitResultSchema,options)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let formParams=params.mode==="form"?params:{...params,mode:"form"},result2=await this.request({method:"elicitation/create",params:formParams},ElicitResultSchema,options);if(result2.action==="accept"&&result2.content&&formParams.requestedSchema)try{let validationResult=this._jsonSchemaValidator.getValidator(formParams.requestedSchema)(result2.content);if(!validationResult.valid)throw new McpError(ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${validationResult.errorMessage}`)}catch(error40){throw error40 instanceof McpError?error40:new McpError(ErrorCode.InternalError,`Error validating elicitation response: ${error40 instanceof Error?error40.message:String(error40)}`)}return result2}}}createElicitationCompletionNotifier(elicitationId,options){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId}},options)}async listRoots(params,options){return this.request({method:"roots/list",params},ListRootsResultSchema,options)}async sendLoggingMessage(params,sessionId){if(this._capabilities.logging&&!this.isMessageIgnored(params.level,sessionId))return this.notification({method:"notifications/message",params})}async sendResourceUpdated(params){return this.notification({method:"notifications/resources/updated",params})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}}});var officialClavueMcpServer_exports={};__export(officialClavueMcpServer_exports,{createOfficialClavueMcpServer:()=>createOfficialClavueMcpServer});function createOfficialClavueMcpServer(){let server2=new Server({name:OFFICIAL_CLAVUE_MCP_SERVER_NAME,version:typeof MACRO<"u"?"11.3.12":"1.0.0"},{capabilities:{tools:{}},instructions:"Clavue Official MCP. Prefer web_search for current public facts. If web_search soft-fails, continue coding with repo tools \u2014 do not invent facts."});return server2.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,description:"Search the public web via Clavue Official Search (compliance gateway + agent JSON). Prefer this over inventing facts. Soft-fails on outage \u2014 continue coding without blocking.",inputSchema:{type:"object",properties:{query:{type:"string",description:"Search query (natural language)"}},required:["query"]},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}}]})),server2.setRequestHandler(CallToolRequestSchema,async request=>{let toolName5=String(request.params.name||"").replace(/^mcp__clavue__/,"").replace(/^mcp__/,"");if(toolName5!==OFFICIAL_CLAVUE_WEB_SEARCH_TOOL&&toolName5!=="search")return{isError:!0,content:[{type:"text",text:`Unknown official MCP tool: ${request.params.name}. Supported: web_search.`}]};let args=request.params.arguments??{},query2=String(args.query??args.q??"").trim();try{let result2=await callOfficialClavueWebSearch({query:query2}),text3=formatOfficialWebSearchForAgent(result2);return{isError:result2.softFail||!result2.ok,content:[{type:"text",text:text3}]}}catch(error40){return logForDebugging(`[official-mcp] unexpected CallTool error (soft-fail): ${error40 instanceof Error?error40.message:String(error40)}`,{level:"error"}),{isError:!0,content:[{type:"text",text:formatOfficialWebSearchForAgent({ok:!1,softFail:!0,query:query2,results:[],count:0,error:error40 instanceof Error?error40.message:"Unexpected search error"})}]}}}),server2}var init_officialClavueMcpServer=__esm({"src/services/mcp/officialClavueMcpServer.ts"(){init_server2();init_types3();init_debug();init_officialClavueMcp();__name(createOfficialClavueMcpServer,"createOfficialClavueMcpServer")}});var officialBrowserMcp_exports={};__export(officialBrowserMcp_exports,{OFFICIAL_BROWSER_MCP_SERVER_NAME:()=>OFFICIAL_BROWSER_MCP_SERVER_NAME,OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG:()=>OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG,PLAYWRIGHT_MCP_PACKAGE:()=>PLAYWRIGHT_MCP_PACKAGE,buildBrowserRuntimeMcpConfig:()=>buildBrowserRuntimeMcpConfig,buildOfficialBrowserMcpConfig:()=>buildOfficialBrowserMcpConfig,getOfficialBrowserMcpConfigsIfEligible:()=>getOfficialBrowserMcpConfigsIfEligible,isBrowserRuntimeInProcessConfig:()=>isBrowserRuntimeInProcessConfig,isOfficialBrowserMcpServer:()=>isOfficialBrowserMcpServer,parseBrowserRuntimeKindFromArgs:()=>parseBrowserRuntimeKindFromArgs,resolveOfficialBrowserMcpGate:()=>resolveOfficialBrowserMcpGate});function readAllowBrowser(){try{return getInitialSettings()?.allowBrowser===!0}catch{return!1}}function resolveOfficialBrowserMcpGate(options){if(options?.force?.bare??isBareMode())return{enabled:!1,reason:"disabled_bare",allowBrowser:!1};if(options?.strictMcpConfig)return{enabled:!1,reason:"disabled_strict_mcp",allowBrowser:!1};if(options?.chromeFlagOverride===!1)return{enabled:!1,reason:"disabled_no_chrome",allowBrowser:!1};if(String(process.env.CLAVUE_BROWSER_BACKEND||"").trim().toLowerCase()==="off")return{enabled:!1,reason:"disabled_backend_off",allowBrowser:readAllowBrowser()};let envRaw=options?.force?.env!==void 0?options.force.env:process.env.CLAVUE_BROWSER_MCP;if(isEnvDefinedFalsy(envRaw))return{enabled:!1,reason:"disabled_env",allowBrowser:!1};if(!(options?.force?.allowBrowser!==void 0?options.force.allowBrowser:readAllowBrowser()))return{enabled:!1,reason:"allow_browser_false",allowBrowser:!1};let nonInteractive=options?.isNonInteractive??(process.argv.includes("-p")||process.argv.includes("--print")),headlessForce=isEnvTruthy2(envRaw)||isEnvTruthy2(process.env.CLAVUE_HEADLESS_BROWSER_MCP)||isEnvTruthy2(process.env.CLAVUE_HEADLESS_BROWSER_RUNTIME);return nonInteractive&&!headlessForce?{enabled:!1,reason:"disabled_headless_default",allowBrowser:!0}:{enabled:!0,reason:isEnvTruthy2(envRaw)?"enabled_env":"enabled_allow_browser",allowBrowser:!0}}function isOfficialBrowserMcpServer(name){return name===OFFICIAL_BROWSER_MCP_SERVER_NAME}function isBrowserRuntimeInProcessConfig(cfg){return!cfg||cfg.type!=="stdio"||!("args"in cfg)||!Array.isArray(cfg.args)?!1:cfg.args.map(String).includes(OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG)}function parseBrowserRuntimeKindFromArgs(args){let list2=Array.isArray(args)?args.map(String):[],idx=list2.indexOf(OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG);return(idx>=0?list2[idx+1]:void 0)==="native_runtime"?"native_runtime":"attach_cdp"}function buildBrowserRuntimeMcpConfig(kind){return{[OFFICIAL_BROWSER_MCP_SERVER_NAME]:{type:"stdio",command:process.execPath,args:[OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG,kind],scope:"dynamic"}}}function defaultPlaywrightArgs(){let raw=String(process.env.CLAVUE_BROWSER_MCP_ARGS||"").trim();if(raw){if(raw.startsWith("["))try{let parsed=JSON.parse(raw);if(Array.isArray(parsed))return parsed.map(String)}catch{}return raw.split(/\s+/).filter(Boolean)}return["-y",PLAYWRIGHT_MCP_PACKAGE]}function buildOfficialBrowserMcpConfig(){let command8=String(process.env.CLAVUE_BROWSER_MCP_CMD||"").trim()||"npx",args=defaultPlaywrightArgs();return{[OFFICIAL_BROWSER_MCP_SERVER_NAME]:{type:"stdio",command:command8,args,scope:"dynamic",env:{...process.env.PLAYWRIGHT_MCP_HEADED?{PLAYWRIGHT_MCP_HEADED:process.env.PLAYWRIGHT_MCP_HEADED}:{}}}}}function getOfficialBrowserMcpConfigsIfEligible(options){try{let gate=resolveOfficialBrowserMcpGate({strictMcpConfig:options?.strictMcpConfig,chromeFlagOverride:options?.chromeFlagOverride,isNonInteractive:options?.isNonInteractive});return logForDebugging(`[browser-mcp] Path A gate enabled=${gate.enabled} reason=${gate.reason} allowBrowser=${gate.allowBrowser}`),gate.enabled?buildOfficialBrowserMcpConfig():{}}catch(error40){return logForDebugging(`[browser-mcp] inject skipped (soft-fail): ${errorMessage(error40)}`,{level:"error"}),{}}}var OFFICIAL_BROWSER_MCP_SERVER_NAME,OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG,PLAYWRIGHT_MCP_PACKAGE,init_officialBrowserMcp=__esm({"src/services/mcp/officialBrowserMcp.ts"(){init_debug();init_envUtils();init_errors2();init_settings2();OFFICIAL_BROWSER_MCP_SERVER_NAME="clavue-browser",OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG="--clavue-browser-runtime-mcp",PLAYWRIGHT_MCP_PACKAGE="@playwright/mcp@latest";__name(readAllowBrowser,"readAllowBrowser");__name(resolveOfficialBrowserMcpGate,"resolveOfficialBrowserMcpGate");__name(isOfficialBrowserMcpServer,"isOfficialBrowserMcpServer");__name(isBrowserRuntimeInProcessConfig,"isBrowserRuntimeInProcessConfig");__name(parseBrowserRuntimeKindFromArgs,"parseBrowserRuntimeKindFromArgs");__name(buildBrowserRuntimeMcpConfig,"buildBrowserRuntimeMcpConfig");__name(defaultPlaywrightArgs,"defaultPlaywrightArgs");__name(buildOfficialBrowserMcpConfig,"buildOfficialBrowserMcpConfig");__name(getOfficialBrowserMcpConfigsIfEligible,"getOfficialBrowserMcpConfigsIfEligible")}});function allowBrowserNavigateUrl(raw,env5=process.env){let input2=String(raw||"").trim();if(!input2)return{ok:!1,reason:"empty_url"};let url3;try{url3=new URL(input2)}catch{return{ok:!1,reason:"invalid_url"}}let scheme=url3.protocol.replace(/:$/,"").toLowerCase();return scheme==="about"?url3.pathname==="blank"||input2.toLowerCase()==="about:blank"?{ok:!0,url:"about:blank"}:{ok:!1,reason:"about_not_blank"}:scheme==="http"||scheme==="https"?url3.username||url3.password?{ok:!1,reason:"credentials_in_url"}:{ok:!0,url:url3.toString()}:scheme==="file"?env5.CLAVUE_BROWSER_ALLOW_FILE==="1"||String(env5.CLAVUE_BROWSER_ALLOW_FILE||"").toLowerCase()==="true"?{ok:!0,url:url3.toString()}:{ok:!1,reason:"file_scheme_denied (set CLAVUE_BROWSER_ALLOW_FILE=1)"}:{ok:!1,reason:`scheme_denied:${scheme}`}}var init_navigateAllowlist=__esm({"src/services/browser/navigateAllowlist.ts"(){__name(allowBrowserNavigateUrl,"allowBrowserNavigateUrl")}});function createEmptyRefTable(generation=0){return{generation,byId:new Map}}function normalizeRefId(ref){let s2=String(ref||"").trim();return s2?s2.startsWith("@")?s2:`@${s2}`:""}function resolveRef2(table,ref){if(!table||table.generation<=0||table.byId.size===0)return{ok:!1,error:"ref_no_snapshot: call browser_snapshot first (semantic_v1)"};let id=normalizeRefId(ref);if(!id)return{ok:!1,error:"ref_invalid: empty ref"};let entry=table.byId.get(id);return entry?{ok:!0,entry,generation:table.generation}:{ok:!1,error:`ref_expired_resnapshot: ${id} not in generation=${table.generation}. Call browser_snapshot again.`}}function buildRefTable(generation,refs){let byId=new Map;for(let r2 of refs)byId.set(normalizeRefId(r2.id),r2);return{generation,byId}}var init_refs=__esm({"src/services/browser/snapshot/refs.ts"(){__name(createEmptyRefTable,"createEmptyRefTable");__name(normalizeRefId,"normalizeRefId");__name(resolveRef2,"resolveRef");__name(buildRefTable,"buildRefTable")}});function roleOf(n4){return String(n4.role?.value||"generic").toLowerCase()}function nameOf(n4){return String(n4.name?.value||n4.description?.value||"").trim()}function isInteresting(n4){if(n4.ignored)return!1;let role=roleOf(n4);return INTERACTIVE_ROLES.has(role)?!0:role==="heading"||role==="main"||role==="navigation"||role==="banner"||role==="contentinfo"||role==="form"||role==="dialog"||role==="alertdialog"||role==="document"||role==="region"||role==="list"||role==="listitem"||role==="article"||role==="img"||role==="statictext"?!!nameOf(n4)||role!=="statictext":!1}function shouldAssignRef(n4){return n4.ignored||n4.backendDOMNodeId==null?!1:INTERACTIVE_ROLES.has(roleOf(n4))}async function captureSemanticSnapshot(opts){let generation=(opts.previousGeneration??0)+1;await opts.client.send("Accessibility.enable",{},{sessionId:opts.cdpSessionId}).catch(()=>{}),await opts.client.send("DOM.enable",{},{sessionId:opts.cdpSessionId}).catch(()=>{});let nodes=[];try{nodes=(await opts.client.send("Accessibility.getFullAXTree",{},{sessionId:opts.cdpSessionId,timeoutMs:12e3})).nodes||[]}catch{return fallbackDomSnapshot(opts,generation)}let byId=new Map(nodes.map(n4=>[n4.nodeId,n4])),roots=nodes.filter(n4=>!n4.parentId||!byId.has(n4.parentId)),refs=[],refCounter=0,refByNodeId=new Map;function assignRef(n4){if(!shouldAssignRef(n4)||refCounter>=MAX_REFS)return;refCounter+=1;let id=`@e${refCounter}`,entry={id,role:roleOf(n4),name:nameOf(n4)||void 0,interactive:!0,backendDOMNodeId:n4.backendDOMNodeId,axNodeId:n4.nodeId};return refs.push(entry),refByNodeId.set(n4.nodeId,id),id}__name(assignRef,"assignRef");let lines=[];function walk(n4,depth){if(n4.ignored&&!n4.childIds?.length)return;let interesting=isInteresting(n4),role=roleOf(n4),name=nameOf(n4),refId=interesting?assignRef(n4):void 0;if(interesting||depth===0){let indent=" ".repeat(Math.min(depth,12)),label2=name?` ${truncate4(name,80)}`:"",refSuffix=refId?` ${refId}`:"";lines.push(`${indent}[${role}]${label2}${refSuffix}`)}for(let cid of n4.childIds||[]){let child=byId.get(cid);child&&walk(child,depth+1)}}if(__name(walk,"walk"),roots.length===0&&nodes.length>0)walk(nodes[0],0);else for(let r2 of roots.slice(0,20))walk(r2,0);let meta=await opts.client.evaluate(opts.cdpSessionId,"(() => ({ url: location.href, title: document.title || '' }))()").catch(()=>({url:"",title:""})),tree=lines.join(`
5567
+ `)}var OFFICIAL_CLAVUE_MCP_SERVER_NAME,OFFICIAL_CLAVUE_MCP_MARKER_ARG,OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,OFFICIAL_CLAVUE_WEB_SEARCH_FQN,OFFICIAL_MCP_SETTING_MODES,DEFAULT_TIMEOUT_MS,PROTOCOL,init_officialClavueMcp=__esm({"src/services/mcp/officialClavueMcp.ts"(){init_debug();init_envUtils();init_errors2();init_settings2();init_config2();init_sessionStore();OFFICIAL_CLAVUE_MCP_SERVER_NAME="clavue",OFFICIAL_CLAVUE_MCP_MARKER_ARG="--clavue-official-mcp",OFFICIAL_CLAVUE_WEB_SEARCH_TOOL="web_search",OFFICIAL_CLAVUE_WEB_SEARCH_FQN=`mcp__${OFFICIAL_CLAVUE_MCP_SERVER_NAME}__${OFFICIAL_CLAVUE_WEB_SEARCH_TOOL}`,OFFICIAL_MCP_SETTING_MODES=["auto","on","off"],DEFAULT_TIMEOUT_MS=45e3,PROTOCOL="clavue.mcp.v1";__name(normalizeOfficialMcpSettingMode,"normalizeOfficialMcpSettingMode");__name(readOfficialMcpSettingMode,"readOfficialMcpSettingMode");__name(resolveOfficialClavueMcpGate,"resolveOfficialClavueMcpGate");__name(shouldSkipAutoMcpForExplicitTools,"shouldSkipAutoMcpForExplicitTools");__name(cycleOfficialMcpSettingMode,"cycleOfficialMcpSettingMode");__name(formatOfficialMcpSettingLabel,"formatOfficialMcpSettingLabel");__name(readOfficialMcpChromeSnapshot,"readOfficialMcpChromeSnapshot");__name(assertOfficialMcpNonPollutingConfig,"assertOfficialMcpNonPollutingConfig");__name(isOfficialClavueMcpServer,"isOfficialClavueMcpServer");__name(buildOfficialClavueMcpConfig,"buildOfficialClavueMcpConfig");__name(getOfficialClavueMcpConfigsIfEligible,"getOfficialClavueMcpConfigsIfEligible");__name(getOfficialClavueMcpAllowedTools,"getOfficialClavueMcpAllowedTools");__name(resolveApiBase,"resolveApiBase");__name(toolsCallUrl,"toolsCallUrl");__name(callOfficialClavueWebSearch,"callOfficialClavueWebSearch");__name(normalizeSearchResult,"normalizeSearchResult");__name(extractHits,"extractHits");__name(formatOfficialWebSearchForAgent,"formatOfficialWebSearchForAgent")}});var ExperimentalServerTasks,init_server=__esm({"../../node_modules/@modelcontextprotocol/sdk/dist/esm/experimental/tasks/server.js"(){init_types3();ExperimentalServerTasks=class{static{__name(this,"ExperimentalServerTasks")}constructor(_server){this._server=_server}requestStream(request,resultSchema,options){return this._server.requestStream(request,resultSchema,options)}createMessageStream(params,options){let clientCapabilities=this._server.getClientCapabilities();if((params.tools||params.toolChoice)&&!clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(params.messages.length>0){let lastMessage=params.messages[params.messages.length-1],lastContent=Array.isArray(lastMessage.content)?lastMessage.content:[lastMessage.content],hasToolResults=lastContent.some(c4=>c4.type==="tool_result"),previousMessage=params.messages.length>1?params.messages[params.messages.length-2]:void 0,previousContent=previousMessage?Array.isArray(previousMessage.content)?previousMessage.content:[previousMessage.content]:[],hasPreviousToolUse=previousContent.some(c4=>c4.type==="tool_use");if(hasToolResults){if(lastContent.some(c4=>c4.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!hasPreviousToolUse)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(hasPreviousToolUse){let toolUseIds=new Set(previousContent.filter(c4=>c4.type==="tool_use").map(c4=>c4.id)),toolResultIds=new Set(lastContent.filter(c4=>c4.type==="tool_result").map(c4=>c4.toolUseId));if(toolUseIds.size!==toolResultIds.size||![...toolUseIds].every(id=>toolResultIds.has(id)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return this.requestStream({method:"sampling/createMessage",params},CreateMessageResultSchema,options)}elicitInputStream(params,options){let clientCapabilities=this._server.getClientCapabilities(),mode=params.mode??"form";switch(mode){case"url":{if(!clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");break}case"form":{if(!clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");break}}let normalizedParams=mode==="form"&&params.mode===void 0?{...params,mode:"form"}:params;return this.requestStream({method:"elicitation/create",params:normalizedParams},ElicitResultSchema,options)}async getTask(taskId,options){return this._server.getTask({taskId},options)}async getTaskResult(taskId,resultSchema,options){return this._server.getTaskResult({taskId},resultSchema,options)}async listTasks(cursor,options){return this._server.listTasks(cursor?{cursor}:void 0,options)}async cancelTask(taskId,options){return this._server.cancelTask({taskId},options)}}}});var Server,init_server2=__esm({"../../node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js"(){init_protocol();init_types3();init_ajv_provider();init_zod_compat();init_server();init_helpers2();Server=class extends Protocol{static{__name(this,"Server")}constructor(_serverInfo,options){super(options),this._serverInfo=_serverInfo,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(LoggingLevelSchema.options.map((level,index)=>[level,index])),this.isMessageIgnored=(level,sessionId)=>{let currentLevel=this._loggingLevels.get(sessionId);return currentLevel?this.LOG_LEVEL_SEVERITY.get(level)<this.LOG_LEVEL_SEVERITY.get(currentLevel):!1},this._capabilities=options?.capabilities??{},this._instructions=options?.instructions,this._jsonSchemaValidator=options?.jsonSchemaValidator??new AjvJsonSchemaValidator,this.setRequestHandler(InitializeRequestSchema,request=>this._oninitialize(request)),this.setNotificationHandler(InitializedNotificationSchema,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(SetLevelRequestSchema,async(request,extra)=>{let transportSessionId=extra.sessionId||extra.requestInfo?.headers["mcp-session-id"]||void 0,{level}=request.params,parseResult=LoggingLevelSchema.safeParse(level);return parseResult.success&&this._loggingLevels.set(transportSessionId,parseResult.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new ExperimentalServerTasks(this)}),this._experimental}registerCapabilities(capabilities){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=mergeCapabilities(this._capabilities,capabilities)}setRequestHandler(requestSchema,handler){let methodSchema=getObjectShape(requestSchema)?.method;if(!methodSchema)throw new Error("Schema is missing a method literal");let methodValue;if(isZ4Schema(methodSchema)){let v4Schema=methodSchema;methodValue=v4Schema._zod?.def?.value??v4Schema.value}else{let v3Schema=methodSchema;methodValue=v3Schema._def?.value??v3Schema.value}if(typeof methodValue!="string")throw new Error("Schema method literal must be a string");if(methodValue==="tools/call"){let wrappedHandler=__name(async(request,extra)=>{let validatedRequest=safeParse3(CallToolRequestSchema,request);if(!validatedRequest.success){let errorMessage3=validatedRequest.error instanceof Error?validatedRequest.error.message:String(validatedRequest.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call request: ${errorMessage3}`)}let{params}=validatedRequest.data,result2=await Promise.resolve(handler(request,extra));if(params.task){let taskValidationResult=safeParse3(CreateTaskResultSchema,result2);if(!taskValidationResult.success){let errorMessage3=taskValidationResult.error instanceof Error?taskValidationResult.error.message:String(taskValidationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid task creation result: ${errorMessage3}`)}return taskValidationResult.data}let validationResult=safeParse3(CallToolResultSchema,result2);if(!validationResult.success){let errorMessage3=validationResult.error instanceof Error?validationResult.error.message:String(validationResult.error);throw new McpError(ErrorCode.InvalidParams,`Invalid tools/call result: ${errorMessage3}`)}return validationResult.data},"wrappedHandler");return super.setRequestHandler(requestSchema,wrappedHandler)}return super.setRequestHandler(requestSchema,handler)}assertCapabilityForMethod(method2){switch(method2){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${method2})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${method2})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${method2})`);break;case"ping":break}}assertNotificationCapability(method2){switch(method2){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${method2})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${method2})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${method2})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${method2})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${method2})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(method2){if(this._capabilities)switch(method2){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${method2})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${method2})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${method2})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${method2})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${method2})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${method2})`);break;case"ping":case"initialize":break}}assertTaskCapability(method2){assertClientRequestTaskCapability(this._clientCapabilities?.tasks?.requests,method2,"Client")}assertTaskHandlerCapability(method2){this._capabilities&&assertToolsCallTaskCapability(this._capabilities.tasks?.requests,method2,"Server")}async _oninitialize(request){let requestedVersion=request.params.protocolVersion;return this._clientCapabilities=request.params.capabilities,this._clientVersion=request.params.clientInfo,{protocolVersion:SUPPORTED_PROTOCOL_VERSIONS.includes(requestedVersion)?requestedVersion:LATEST_PROTOCOL_VERSION,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},EmptyResultSchema)}async createMessage(params,options){if((params.tools||params.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(params.messages.length>0){let lastMessage=params.messages[params.messages.length-1],lastContent=Array.isArray(lastMessage.content)?lastMessage.content:[lastMessage.content],hasToolResults=lastContent.some(c4=>c4.type==="tool_result"),previousMessage=params.messages.length>1?params.messages[params.messages.length-2]:void 0,previousContent=previousMessage?Array.isArray(previousMessage.content)?previousMessage.content:[previousMessage.content]:[],hasPreviousToolUse=previousContent.some(c4=>c4.type==="tool_use");if(hasToolResults){if(lastContent.some(c4=>c4.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!hasPreviousToolUse)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(hasPreviousToolUse){let toolUseIds=new Set(previousContent.filter(c4=>c4.type==="tool_use").map(c4=>c4.id)),toolResultIds=new Set(lastContent.filter(c4=>c4.type==="tool_result").map(c4=>c4.toolUseId));if(toolUseIds.size!==toolResultIds.size||![...toolUseIds].every(id=>toolResultIds.has(id)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return params.tools?this.request({method:"sampling/createMessage",params},CreateMessageResultWithToolsSchema,options):this.request({method:"sampling/createMessage",params},CreateMessageResultSchema,options)}async elicitInput(params,options){switch(params.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let urlParams=params;return this.request({method:"elicitation/create",params:urlParams},ElicitResultSchema,options)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let formParams=params.mode==="form"?params:{...params,mode:"form"},result2=await this.request({method:"elicitation/create",params:formParams},ElicitResultSchema,options);if(result2.action==="accept"&&result2.content&&formParams.requestedSchema)try{let validationResult=this._jsonSchemaValidator.getValidator(formParams.requestedSchema)(result2.content);if(!validationResult.valid)throw new McpError(ErrorCode.InvalidParams,`Elicitation response content does not match requested schema: ${validationResult.errorMessage}`)}catch(error40){throw error40 instanceof McpError?error40:new McpError(ErrorCode.InternalError,`Error validating elicitation response: ${error40 instanceof Error?error40.message:String(error40)}`)}return result2}}}createElicitationCompletionNotifier(elicitationId,options){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId}},options)}async listRoots(params,options){return this.request({method:"roots/list",params},ListRootsResultSchema,options)}async sendLoggingMessage(params,sessionId){if(this._capabilities.logging&&!this.isMessageIgnored(params.level,sessionId))return this.notification({method:"notifications/message",params})}async sendResourceUpdated(params){return this.notification({method:"notifications/resources/updated",params})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}}}});var officialClavueMcpServer_exports={};__export(officialClavueMcpServer_exports,{createOfficialClavueMcpServer:()=>createOfficialClavueMcpServer});function createOfficialClavueMcpServer(){let server2=new Server({name:OFFICIAL_CLAVUE_MCP_SERVER_NAME,version:typeof MACRO<"u"?"11.3.13":"1.0.0"},{capabilities:{tools:{}},instructions:"Clavue Official MCP. Prefer web_search for current public facts. If web_search soft-fails, continue coding with repo tools \u2014 do not invent facts."});return server2.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:OFFICIAL_CLAVUE_WEB_SEARCH_TOOL,description:"Search the public web via Clavue Official Search (compliance gateway + agent JSON). Prefer this over inventing facts. Soft-fails on outage \u2014 continue coding without blocking.",inputSchema:{type:"object",properties:{query:{type:"string",description:"Search query (natural language)"}},required:["query"]},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}}]})),server2.setRequestHandler(CallToolRequestSchema,async request=>{let toolName5=String(request.params.name||"").replace(/^mcp__clavue__/,"").replace(/^mcp__/,"");if(toolName5!==OFFICIAL_CLAVUE_WEB_SEARCH_TOOL&&toolName5!=="search")return{isError:!0,content:[{type:"text",text:`Unknown official MCP tool: ${request.params.name}. Supported: web_search.`}]};let args=request.params.arguments??{},query2=String(args.query??args.q??"").trim();try{let result2=await callOfficialClavueWebSearch({query:query2}),text3=formatOfficialWebSearchForAgent(result2);return{isError:result2.softFail||!result2.ok,content:[{type:"text",text:text3}]}}catch(error40){return logForDebugging(`[official-mcp] unexpected CallTool error (soft-fail): ${error40 instanceof Error?error40.message:String(error40)}`,{level:"error"}),{isError:!0,content:[{type:"text",text:formatOfficialWebSearchForAgent({ok:!1,softFail:!0,query:query2,results:[],count:0,error:error40 instanceof Error?error40.message:"Unexpected search error"})}]}}}),server2}var init_officialClavueMcpServer=__esm({"src/services/mcp/officialClavueMcpServer.ts"(){init_server2();init_types3();init_debug();init_officialClavueMcp();__name(createOfficialClavueMcpServer,"createOfficialClavueMcpServer")}});var officialBrowserMcp_exports={};__export(officialBrowserMcp_exports,{OFFICIAL_BROWSER_MCP_SERVER_NAME:()=>OFFICIAL_BROWSER_MCP_SERVER_NAME,OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG:()=>OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG,PLAYWRIGHT_MCP_PACKAGE:()=>PLAYWRIGHT_MCP_PACKAGE,buildBrowserRuntimeMcpConfig:()=>buildBrowserRuntimeMcpConfig,buildOfficialBrowserMcpConfig:()=>buildOfficialBrowserMcpConfig,getOfficialBrowserMcpConfigsIfEligible:()=>getOfficialBrowserMcpConfigsIfEligible,isBrowserRuntimeInProcessConfig:()=>isBrowserRuntimeInProcessConfig,isOfficialBrowserMcpServer:()=>isOfficialBrowserMcpServer,parseBrowserRuntimeKindFromArgs:()=>parseBrowserRuntimeKindFromArgs,resolveOfficialBrowserMcpGate:()=>resolveOfficialBrowserMcpGate});function readAllowBrowser(){try{return getInitialSettings()?.allowBrowser===!0}catch{return!1}}function resolveOfficialBrowserMcpGate(options){if(options?.force?.bare??isBareMode())return{enabled:!1,reason:"disabled_bare",allowBrowser:!1};if(options?.strictMcpConfig)return{enabled:!1,reason:"disabled_strict_mcp",allowBrowser:!1};if(options?.chromeFlagOverride===!1)return{enabled:!1,reason:"disabled_no_chrome",allowBrowser:!1};if(String(process.env.CLAVUE_BROWSER_BACKEND||"").trim().toLowerCase()==="off")return{enabled:!1,reason:"disabled_backend_off",allowBrowser:readAllowBrowser()};let envRaw=options?.force?.env!==void 0?options.force.env:process.env.CLAVUE_BROWSER_MCP;if(isEnvDefinedFalsy(envRaw))return{enabled:!1,reason:"disabled_env",allowBrowser:!1};if(!(options?.force?.allowBrowser!==void 0?options.force.allowBrowser:readAllowBrowser()))return{enabled:!1,reason:"allow_browser_false",allowBrowser:!1};let nonInteractive=options?.isNonInteractive??(process.argv.includes("-p")||process.argv.includes("--print")),headlessForce=isEnvTruthy2(envRaw)||isEnvTruthy2(process.env.CLAVUE_HEADLESS_BROWSER_MCP)||isEnvTruthy2(process.env.CLAVUE_HEADLESS_BROWSER_RUNTIME);return nonInteractive&&!headlessForce?{enabled:!1,reason:"disabled_headless_default",allowBrowser:!0}:{enabled:!0,reason:isEnvTruthy2(envRaw)?"enabled_env":"enabled_allow_browser",allowBrowser:!0}}function isOfficialBrowserMcpServer(name){return name===OFFICIAL_BROWSER_MCP_SERVER_NAME}function isBrowserRuntimeInProcessConfig(cfg){return!cfg||cfg.type!=="stdio"||!("args"in cfg)||!Array.isArray(cfg.args)?!1:cfg.args.map(String).includes(OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG)}function parseBrowserRuntimeKindFromArgs(args){let list2=Array.isArray(args)?args.map(String):[],idx=list2.indexOf(OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG);return(idx>=0?list2[idx+1]:void 0)==="native_runtime"?"native_runtime":"attach_cdp"}function buildBrowserRuntimeMcpConfig(kind){return{[OFFICIAL_BROWSER_MCP_SERVER_NAME]:{type:"stdio",command:process.execPath,args:[OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG,kind],scope:"dynamic"}}}function defaultPlaywrightArgs(){let raw=String(process.env.CLAVUE_BROWSER_MCP_ARGS||"").trim();if(raw){if(raw.startsWith("["))try{let parsed=JSON.parse(raw);if(Array.isArray(parsed))return parsed.map(String)}catch{}return raw.split(/\s+/).filter(Boolean)}return["-y",PLAYWRIGHT_MCP_PACKAGE]}function buildOfficialBrowserMcpConfig(){let command8=String(process.env.CLAVUE_BROWSER_MCP_CMD||"").trim()||"npx",args=defaultPlaywrightArgs();return{[OFFICIAL_BROWSER_MCP_SERVER_NAME]:{type:"stdio",command:command8,args,scope:"dynamic",env:{...process.env.PLAYWRIGHT_MCP_HEADED?{PLAYWRIGHT_MCP_HEADED:process.env.PLAYWRIGHT_MCP_HEADED}:{}}}}}function getOfficialBrowserMcpConfigsIfEligible(options){try{let gate=resolveOfficialBrowserMcpGate({strictMcpConfig:options?.strictMcpConfig,chromeFlagOverride:options?.chromeFlagOverride,isNonInteractive:options?.isNonInteractive});return logForDebugging(`[browser-mcp] Path A gate enabled=${gate.enabled} reason=${gate.reason} allowBrowser=${gate.allowBrowser}`),gate.enabled?buildOfficialBrowserMcpConfig():{}}catch(error40){return logForDebugging(`[browser-mcp] inject skipped (soft-fail): ${errorMessage(error40)}`,{level:"error"}),{}}}var OFFICIAL_BROWSER_MCP_SERVER_NAME,OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG,PLAYWRIGHT_MCP_PACKAGE,init_officialBrowserMcp=__esm({"src/services/mcp/officialBrowserMcp.ts"(){init_debug();init_envUtils();init_errors2();init_settings2();OFFICIAL_BROWSER_MCP_SERVER_NAME="clavue-browser",OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG="--clavue-browser-runtime-mcp",PLAYWRIGHT_MCP_PACKAGE="@playwright/mcp@latest";__name(readAllowBrowser,"readAllowBrowser");__name(resolveOfficialBrowserMcpGate,"resolveOfficialBrowserMcpGate");__name(isOfficialBrowserMcpServer,"isOfficialBrowserMcpServer");__name(isBrowserRuntimeInProcessConfig,"isBrowserRuntimeInProcessConfig");__name(parseBrowserRuntimeKindFromArgs,"parseBrowserRuntimeKindFromArgs");__name(buildBrowserRuntimeMcpConfig,"buildBrowserRuntimeMcpConfig");__name(defaultPlaywrightArgs,"defaultPlaywrightArgs");__name(buildOfficialBrowserMcpConfig,"buildOfficialBrowserMcpConfig");__name(getOfficialBrowserMcpConfigsIfEligible,"getOfficialBrowserMcpConfigsIfEligible")}});function allowBrowserNavigateUrl(raw,env5=process.env){let input2=String(raw||"").trim();if(!input2)return{ok:!1,reason:"empty_url"};let url3;try{url3=new URL(input2)}catch{return{ok:!1,reason:"invalid_url"}}let scheme=url3.protocol.replace(/:$/,"").toLowerCase();return scheme==="about"?url3.pathname==="blank"||input2.toLowerCase()==="about:blank"?{ok:!0,url:"about:blank"}:{ok:!1,reason:"about_not_blank"}:scheme==="http"||scheme==="https"?url3.username||url3.password?{ok:!1,reason:"credentials_in_url"}:{ok:!0,url:url3.toString()}:scheme==="file"?env5.CLAVUE_BROWSER_ALLOW_FILE==="1"||String(env5.CLAVUE_BROWSER_ALLOW_FILE||"").toLowerCase()==="true"?{ok:!0,url:url3.toString()}:{ok:!1,reason:"file_scheme_denied (set CLAVUE_BROWSER_ALLOW_FILE=1)"}:{ok:!1,reason:`scheme_denied:${scheme}`}}var init_navigateAllowlist=__esm({"src/services/browser/navigateAllowlist.ts"(){__name(allowBrowserNavigateUrl,"allowBrowserNavigateUrl")}});function createEmptyRefTable(generation=0){return{generation,byId:new Map}}function normalizeRefId(ref){let s2=String(ref||"").trim();return s2?s2.startsWith("@")?s2:`@${s2}`:""}function resolveRef2(table,ref){if(!table||table.generation<=0||table.byId.size===0)return{ok:!1,error:"ref_no_snapshot: call browser_snapshot first (semantic_v1)"};let id=normalizeRefId(ref);if(!id)return{ok:!1,error:"ref_invalid: empty ref"};let entry=table.byId.get(id);return entry?{ok:!0,entry,generation:table.generation}:{ok:!1,error:`ref_expired_resnapshot: ${id} not in generation=${table.generation}. Call browser_snapshot again.`}}function buildRefTable(generation,refs){let byId=new Map;for(let r2 of refs)byId.set(normalizeRefId(r2.id),r2);return{generation,byId}}var init_refs=__esm({"src/services/browser/snapshot/refs.ts"(){__name(createEmptyRefTable,"createEmptyRefTable");__name(normalizeRefId,"normalizeRefId");__name(resolveRef2,"resolveRef");__name(buildRefTable,"buildRefTable")}});function roleOf(n4){return String(n4.role?.value||"generic").toLowerCase()}function nameOf(n4){return String(n4.name?.value||n4.description?.value||"").trim()}function isInteresting(n4){if(n4.ignored)return!1;let role=roleOf(n4);return INTERACTIVE_ROLES.has(role)?!0:role==="heading"||role==="main"||role==="navigation"||role==="banner"||role==="contentinfo"||role==="form"||role==="dialog"||role==="alertdialog"||role==="document"||role==="region"||role==="list"||role==="listitem"||role==="article"||role==="img"||role==="statictext"?!!nameOf(n4)||role!=="statictext":!1}function shouldAssignRef(n4){return n4.ignored||n4.backendDOMNodeId==null?!1:INTERACTIVE_ROLES.has(roleOf(n4))}async function captureSemanticSnapshot(opts){let generation=(opts.previousGeneration??0)+1;await opts.client.send("Accessibility.enable",{},{sessionId:opts.cdpSessionId}).catch(()=>{}),await opts.client.send("DOM.enable",{},{sessionId:opts.cdpSessionId}).catch(()=>{});let nodes=[];try{nodes=(await opts.client.send("Accessibility.getFullAXTree",{},{sessionId:opts.cdpSessionId,timeoutMs:12e3})).nodes||[]}catch{return fallbackDomSnapshot(opts,generation)}let byId=new Map(nodes.map(n4=>[n4.nodeId,n4])),roots=nodes.filter(n4=>!n4.parentId||!byId.has(n4.parentId)),refs=[],refCounter=0,refByNodeId=new Map;function assignRef(n4){if(!shouldAssignRef(n4)||refCounter>=MAX_REFS)return;refCounter+=1;let id=`@e${refCounter}`,entry={id,role:roleOf(n4),name:nameOf(n4)||void 0,interactive:!0,backendDOMNodeId:n4.backendDOMNodeId,axNodeId:n4.nodeId};return refs.push(entry),refByNodeId.set(n4.nodeId,id),id}__name(assignRef,"assignRef");let lines=[];function walk(n4,depth){if(n4.ignored&&!n4.childIds?.length)return;let interesting=isInteresting(n4),role=roleOf(n4),name=nameOf(n4),refId=interesting?assignRef(n4):void 0;if(interesting||depth===0){let indent=" ".repeat(Math.min(depth,12)),label2=name?` ${truncate4(name,80)}`:"",refSuffix=refId?` ${refId}`:"";lines.push(`${indent}[${role}]${label2}${refSuffix}`)}for(let cid of n4.childIds||[]){let child=byId.get(cid);child&&walk(child,depth+1)}}if(__name(walk,"walk"),roots.length===0&&nodes.length>0)walk(nodes[0],0);else for(let r2 of roots.slice(0,20))walk(r2,0);let meta=await opts.client.evaluate(opts.cdpSessionId,"(() => ({ url: location.href, title: document.title || '' }))()").catch(()=>({url:"",title:""})),tree=lines.join(`
5568
5568
  `),truncated=!1;return tree.length>MAX_TREE_CHARS&&(tree=tree.slice(0,MAX_TREE_CHARS),truncated=!0),refCounter>=MAX_REFS&&(truncated=!0),{snapshot:{spaceId:opts.spaceId,url:String(meta?.url||""),title:String(meta?.title||""),generation,refs:refs.map(r2=>({id:r2.id,role:r2.role,name:r2.name,interactive:r2.interactive})),tree,truncated,protocol:"semantic_v1"},refTable:buildRefTable(generation,refs)}}async function fallbackDomSnapshot(opts,generation){let data=await opts.client.evaluate(opts.cdpSessionId,`(() => {
5569
5569
  const interactive = ['a','button','input','textarea','select','summary','[role=button]','[role=link]','[role=textbox]','[contenteditable=true]'];
5570
5570
  const els = [];
@@ -5591,9 +5591,9 @@ ${result2.summary}`:null].filter(Boolean);if(result2.results.length>0?(lines.pus
5591
5591
  url: location.href,
5592
5592
  title: document.title || '',
5593
5593
  text: (document.body && (document.body.innerText || document.body.textContent)) || ''
5594
- }))()`),text3=String(meta?.text||""),truncated=!1;return text3.length>24e3&&(text3=text3.slice(0,24e3),truncated=!0),{spaceId:opts.spaceId,url:String(meta?.url||""),title:String(meta?.title||""),text:text3,truncated,protocol:"raw_v0"}}var init_raw=__esm({"src/services/browser/snapshot/raw.ts"(){__name(captureRawSnapshot,"captureRawSnapshot")}});var PHASE0_BROWSER_TOOLS,PHASE1_ACT_TOOLS,PHASE1_BATCH_TOOLS,BROWSER_RUNTIME_TOOLS,init_toolDefs=__esm({"src/services/browser/mcp/toolDefs.ts"(){PHASE0_BROWSER_TOOLS=[{name:"browser_navigate",description:"Navigate the agent-owned browser tab to a URL (Clavue Browser Runtime attach/native). Creates an agent tab if none exists. Invalidates @ref table \u2014 call browser_snapshot after navigate.",inputSchema:{type:"object",properties:{url:{type:"string",description:"Absolute URL to open"}},required:["url"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}},{name:"browser_tabs",description:"List agent-owned browser tabs (default). Pre-existing user tabs are omitted unless includeUserTabs is true.",inputSchema:{type:"object",properties:{action:{type:"string",enum:["list"],description:'Only "list" is supported in Phase 0\u20131'},includeUserTabs:{type:"boolean",description:"If true, attempt to include user tabs (may be denied)"}},required:["action"]},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}},{name:"browser_snapshot",description:'Capture semantic_v1 accessibility snapshot with generation-scoped @eN refs. Use @eN with browser_click / browser_type. After navigate or DOM change, snapshot again (stale refs return ref_expired_resnapshot). protocol is "semantic_v1".',inputSchema:{type:"object",properties:{mode:{type:"string",enum:["semantic","raw"],description:"semantic (default) = semantic_v1 + @ref; raw = raw_v0 text only (no refs)"}}},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}},{name:"browser_take_screenshot",description:"Capture a PNG screenshot of the active agent tab. Returns base64 PNG.",inputSchema:{type:"object",properties:{fullPage:{type:"boolean",description:"Reserved; viewport only for now"}}},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}},{name:"browser_status",description:"Return Clavue browser backend status (kind, endpoint host:port only, isolation, ref generation). Never includes cookies.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:!0,openWorldHint:!1,destructiveHint:!1}}],PHASE1_ACT_TOOLS=[{name:"browser_click",description:'Click element by @ref from the latest browser_snapshot (semantic_v1). Example: { "ref": "@e6" }. Stale refs fail with ref_expired_resnapshot.',inputSchema:{type:"object",properties:{ref:{type:"string",description:"Ref id like @e6 from latest snapshot"}},required:["ref"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}},{name:"browser_type",description:"Focus element by @ref and type text. Optional submit=true presses Enter after typing.",inputSchema:{type:"object",properties:{ref:{type:"string",description:"Ref id like @e4"},text:{type:"string",description:"Text to type (max 8KiB)"},submit:{type:"boolean",description:"If true, press Enter after typing"}},required:["ref","text"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}},{name:"browser_press",description:"Press a key in the active page (Enter, Tab, Escape, Arrow*, or single char). Does not require a ref.",inputSchema:{type:"object",properties:{key:{type:"string",description:"Key name: Enter, Tab, Escape, Backspace, ArrowDown, \u2026"}},required:["key"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}}],PHASE1_BATCH_TOOLS=[{name:"browser_act",description:"Run multiple browser steps in one call (structured steps only \u2014 no freeform JS). Ops: navigate, click, type, press, wait, scroll, select, screenshot. After navigate, runtime resnapshots so subsequent @ref steps use a fresh generation. Max 20 steps, ~30s wall. Prefer this over many atomic click/type tool round-trips.",inputSchema:{type:"object",properties:{steps:{type:"array",description:"Ordered ActStep objects",items:{type:"object",properties:{op:{type:"string",enum:["navigate","click","type","press","wait","scroll","select","screenshot"]},url:{type:"string"},ref:{type:"string"},text:{type:"string"},submit:{type:"boolean"},key:{type:"string"},ms:{type:"number"},urlIncludes:{type:"string"},dy:{type:"number"},values:{type:"array",items:{type:"string"}},fullPage:{type:"boolean"}},required:["op"]}},stopOnError:{type:"boolean",description:"Default true \u2014 stop at first failed step"},returnSnapshot:{type:"boolean",description:"Default true \u2014 return final semantic_v1 snapshot"},spaceId:{type:"string"}},required:["steps"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}}],BROWSER_RUNTIME_TOOLS=[...PHASE0_BROWSER_TOOLS,...PHASE1_ACT_TOOLS,...PHASE1_BATCH_TOOLS]}});var server_exports={};__export(server_exports,{createBrowserRuntimeMcpServer:()=>createBrowserRuntimeMcpServer});function textResult(text3,isError2=!1){return{isError:isError2,content:[{type:"text",text:text3}]}}function createBrowserRuntimeMcpServer(kind="attach_cdp"){let server2=new Server({name:OFFICIAL_BROWSER_MCP_SERVER_NAME,version:typeof MACRO<"u"?"11.3.12":"1.0.0"},{capabilities:{tools:{}},instructions:"Clavue Browser Runtime (attach/native). Prefer browser_act for multi-step flows (navigate/click/type/press/wait in one call). Or: browser_snapshot \u2192 @eN refs \u2192 browser_click/type/press. After navigate outside act, resnapshot before refs. Agent-owned tabs only by default. Never invent page content on tool errors."});return server2.setRequestHandler(ListToolsRequestSchema,async()=>({tools:BROWSER_RUNTIME_TOOLS.map(t8=>({name:t8.name,description:t8.description,inputSchema:t8.inputSchema,annotations:t8.annotations}))})),server2.setRequestHandler(CallToolRequestSchema,async request=>{let toolName5=String(request.params.name||"").replace(/^mcp__clavue-browser__/,"").replace(/^mcp__/,""),args=request.params.arguments??{};try{switch(toolName5){case"browser_status":return handleStatus();case"browser_tabs":return await handleTabs(args,kind);case"browser_navigate":return await handleNavigate(args,kind);case"browser_snapshot":return await handleSnapshot(args,kind);case"browser_take_screenshot":return await handleScreenshot(kind);case"browser_click":return await handleClick(args,kind);case"browser_type":return await handleType(args,kind);case"browser_press":return await handlePress(args,kind);case"browser_act":return await handleAct(args,kind);default:return textResult(`Unknown browser tool: ${request.params.name}. Supported: ${BROWSER_RUNTIME_TOOLS.map(t8=>t8.name).join(", ")}.`,!0)}}catch(err2){return logForDebugging(`[browser-runtime] CallTool error: ${errorMessage(err2)}`,{level:"error"}),textResult(`Browser runtime error: ${errorMessage(err2)}`,!0)}}),server2}function handleStatus(){let status2=getBrowserBackendStatus(),sticky=getStickySession();return textResult(JSON.stringify({kind:status2.kind,enabled:status2.enabled,reason:status2.reason,endpoint:status2.endpoint,isolation:status2.isolation,spaces:status2.spaces,activeSpaceId:status2.activeSpaceId,cookieIsolationGuaranteed:status2.cookieIsolationGuaranteed,protocol:"semantic_v1",refGeneration:sticky?.refTable?.generation??0,refCount:sticky?.refTable?.byId.size??0},null,2))}async function ensureClient(kind){let status2=await ensureBrowserBackend({force:kind==="native_runtime"?"native_runtime":kind==="attach_cdp"?"attach_cdp":void 0});if(!status2.enabled||status2.kind==="none")throw new Error(`browser_backend_unavailable:${status2.reason}. Try: clavue browser start \xB7 CLAVUE_CDP_URL=http://127.0.0.1:9222 \xB7 allowBrowser=true \xB7 or Path A playwright.`);let sticky=getStickySession();if(!sticky?.client)throw new Error("browser_cdp_client_missing");return sticky}async function ensureActiveSession(kind){let sticky=await ensureClient(kind),targetId=sticky.activeTargetId;targetId||(targetId=(await sticky.client.listPageTargets()).find(p=>sticky.agentTargetIds.has(p.targetId))?.targetId||await sticky.client.createTarget("about:blank"),sticky.agentTargetIds.add(targetId),sticky.activeTargetId=targetId);let cdpSessionId=await sticky.client.attachToTarget(targetId);return sticky.activeCdpSessionId=cdpSessionId,setStickySession(void 0,sticky),await sticky.client.send("Page.enable",{},{sessionId:cdpSessionId}).catch(()=>{}),await sticky.client.send("Runtime.enable",{},{sessionId:cdpSessionId}).catch(()=>{}),{sticky,cdpSessionId,targetId}}async function handleTabs(args,kind){let action=String(args.action||"list");if(action!=="list")return textResult(`Unsupported tabs action: ${action}`,!0);let includeUser=args.includeUserTabs===!0,sticky=await ensureClient(kind),pages=await sticky.client.listPageTargets(),agentIds=sticky.agentTargetIds,tabs=pages.filter(p=>includeUser||agentIds.has(p.targetId)).map(p=>({targetId:p.targetId,title:p.title,url:p.url,ownedByAgent:agentIds.has(p.targetId)}));return textResult(JSON.stringify({tabs,includeUserTabs:includeUser,note:includeUser?"User tabs included (attach shares profile \u2014 cookie isolation not guaranteed).":"Default list is agent-owned targets only."},null,2))}async function handleNavigate(args,kind){let rawUrl=String(args.url||"").trim();if(!rawUrl)return textResult("url is required",!0);let allowed=allowBrowserNavigateUrl(rawUrl);if(allowed.ok===!1)return textResult(`Navigate denied: ${allowed.reason}. Allowed: http(s)://, about:blank`+(process.env.CLAVUE_BROWSER_ALLOW_FILE==="1"?", file:":""),!0);let url3=allowed.url,sticky=await ensureClient(kind),targetId=sticky.activeTargetId;(!targetId||!sticky.agentTargetIds.has(targetId))&&(targetId=await sticky.client.createTarget(url3),sticky.agentTargetIds.add(targetId),sticky.activeTargetId=targetId);let cdpSessionId=await sticky.client.attachToTarget(targetId);return sticky.activeCdpSessionId=cdpSessionId,await sticky.client.send("Page.enable",{},{sessionId:cdpSessionId}),await sticky.client.navigate(cdpSessionId,url3),invalidateRefTable(),setStickySession(void 0,getStickySession()??sticky),await new Promise(r2=>setTimeout(r2,300)),textResult(JSON.stringify({ok:!0,targetId,url:url3,spaceId:"agent:default",note:"Refs invalidated \u2014 call browser_snapshot before click/type."}))}async function handleSnapshot(args,kind){let mode=String(args.mode||"semantic").toLowerCase(),{sticky,cdpSessionId}=await ensureActiveSession(kind);if(mode==="raw"){let snap=await captureRawSnapshot({client:sticky.client,sessionId:cdpSessionId,spaceId:"agent:default"});return textResult(JSON.stringify(snap,null,2))}let{snapshot:snapshot2,refTable}=await captureSemanticSnapshot({client:sticky.client,cdpSessionId,spaceId:"agent:default",previousGeneration:sticky.refTable?.generation??0});sticky.refTable=refTable,setStickySession(void 0,sticky);let body=[snapshot2.tree,"","---",JSON.stringify({protocol:snapshot2.protocol,spaceId:snapshot2.spaceId,generation:snapshot2.generation,url:snapshot2.url,title:snapshot2.title,refCount:snapshot2.refs.length,refs:snapshot2.refs.map(r2=>r2.id),truncated:snapshot2.truncated})].join(`
5594
+ }))()`),text3=String(meta?.text||""),truncated=!1;return text3.length>24e3&&(text3=text3.slice(0,24e3),truncated=!0),{spaceId:opts.spaceId,url:String(meta?.url||""),title:String(meta?.title||""),text:text3,truncated,protocol:"raw_v0"}}var init_raw=__esm({"src/services/browser/snapshot/raw.ts"(){__name(captureRawSnapshot,"captureRawSnapshot")}});var PHASE0_BROWSER_TOOLS,PHASE1_ACT_TOOLS,PHASE1_BATCH_TOOLS,BROWSER_RUNTIME_TOOLS,init_toolDefs=__esm({"src/services/browser/mcp/toolDefs.ts"(){PHASE0_BROWSER_TOOLS=[{name:"browser_navigate",description:"Navigate the agent-owned browser tab to a URL (Clavue Browser Runtime attach/native). Creates an agent tab if none exists. Invalidates @ref table \u2014 call browser_snapshot after navigate.",inputSchema:{type:"object",properties:{url:{type:"string",description:"Absolute URL to open"}},required:["url"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}},{name:"browser_tabs",description:"List agent-owned browser tabs (default). Pre-existing user tabs are omitted unless includeUserTabs is true.",inputSchema:{type:"object",properties:{action:{type:"string",enum:["list"],description:'Only "list" is supported in Phase 0\u20131'},includeUserTabs:{type:"boolean",description:"If true, attempt to include user tabs (may be denied)"}},required:["action"]},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}},{name:"browser_snapshot",description:'Capture semantic_v1 accessibility snapshot with generation-scoped @eN refs. Use @eN with browser_click / browser_type. After navigate or DOM change, snapshot again (stale refs return ref_expired_resnapshot). protocol is "semantic_v1".',inputSchema:{type:"object",properties:{mode:{type:"string",enum:["semantic","raw"],description:"semantic (default) = semantic_v1 + @ref; raw = raw_v0 text only (no refs)"}}},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}},{name:"browser_take_screenshot",description:"Capture a PNG screenshot of the active agent tab. Returns base64 PNG.",inputSchema:{type:"object",properties:{fullPage:{type:"boolean",description:"Reserved; viewport only for now"}}},annotations:{readOnlyHint:!0,openWorldHint:!0,destructiveHint:!1}},{name:"browser_status",description:"Return Clavue browser backend status (kind, endpoint host:port only, isolation, ref generation). Never includes cookies.",inputSchema:{type:"object",properties:{}},annotations:{readOnlyHint:!0,openWorldHint:!1,destructiveHint:!1}}],PHASE1_ACT_TOOLS=[{name:"browser_click",description:'Click element by @ref from the latest browser_snapshot (semantic_v1). Example: { "ref": "@e6" }. Stale refs fail with ref_expired_resnapshot.',inputSchema:{type:"object",properties:{ref:{type:"string",description:"Ref id like @e6 from latest snapshot"}},required:["ref"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}},{name:"browser_type",description:"Focus element by @ref and type text. Optional submit=true presses Enter after typing.",inputSchema:{type:"object",properties:{ref:{type:"string",description:"Ref id like @e4"},text:{type:"string",description:"Text to type (max 8KiB)"},submit:{type:"boolean",description:"If true, press Enter after typing"}},required:["ref","text"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}},{name:"browser_press",description:"Press a key in the active page (Enter, Tab, Escape, Arrow*, or single char). Does not require a ref.",inputSchema:{type:"object",properties:{key:{type:"string",description:"Key name: Enter, Tab, Escape, Backspace, ArrowDown, \u2026"}},required:["key"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}}],PHASE1_BATCH_TOOLS=[{name:"browser_act",description:"Run multiple browser steps in one call (structured steps only \u2014 no freeform JS). Ops: navigate, click, type, press, wait, scroll, select, screenshot. After navigate, runtime resnapshots so subsequent @ref steps use a fresh generation. Max 20 steps, ~30s wall. Prefer this over many atomic click/type tool round-trips.",inputSchema:{type:"object",properties:{steps:{type:"array",description:"Ordered ActStep objects",items:{type:"object",properties:{op:{type:"string",enum:["navigate","click","type","press","wait","scroll","select","screenshot"]},url:{type:"string"},ref:{type:"string"},text:{type:"string"},submit:{type:"boolean"},key:{type:"string"},ms:{type:"number"},urlIncludes:{type:"string"},dy:{type:"number"},values:{type:"array",items:{type:"string"}},fullPage:{type:"boolean"}},required:["op"]}},stopOnError:{type:"boolean",description:"Default true \u2014 stop at first failed step"},returnSnapshot:{type:"boolean",description:"Default true \u2014 return final semantic_v1 snapshot"},spaceId:{type:"string"}},required:["steps"]},annotations:{readOnlyHint:!1,openWorldHint:!0,destructiveHint:!1}}],BROWSER_RUNTIME_TOOLS=[...PHASE0_BROWSER_TOOLS,...PHASE1_ACT_TOOLS,...PHASE1_BATCH_TOOLS]}});var server_exports={};__export(server_exports,{createBrowserRuntimeMcpServer:()=>createBrowserRuntimeMcpServer});function textResult(text3,isError2=!1){return{isError:isError2,content:[{type:"text",text:text3}]}}function createBrowserRuntimeMcpServer(kind="attach_cdp"){let server2=new Server({name:OFFICIAL_BROWSER_MCP_SERVER_NAME,version:typeof MACRO<"u"?"11.3.13":"1.0.0"},{capabilities:{tools:{}},instructions:"Clavue Browser Runtime (attach/native). Prefer browser_act for multi-step flows (navigate/click/type/press/wait in one call). Or: browser_snapshot \u2192 @eN refs \u2192 browser_click/type/press. After navigate outside act, resnapshot before refs. Agent-owned tabs only by default. Never invent page content on tool errors."});return server2.setRequestHandler(ListToolsRequestSchema,async()=>({tools:BROWSER_RUNTIME_TOOLS.map(t8=>({name:t8.name,description:t8.description,inputSchema:t8.inputSchema,annotations:t8.annotations}))})),server2.setRequestHandler(CallToolRequestSchema,async request=>{let toolName5=String(request.params.name||"").replace(/^mcp__clavue-browser__/,"").replace(/^mcp__/,""),args=request.params.arguments??{};try{switch(toolName5){case"browser_status":return handleStatus();case"browser_tabs":return await handleTabs(args,kind);case"browser_navigate":return await handleNavigate(args,kind);case"browser_snapshot":return await handleSnapshot(args,kind);case"browser_take_screenshot":return await handleScreenshot(kind);case"browser_click":return await handleClick(args,kind);case"browser_type":return await handleType(args,kind);case"browser_press":return await handlePress(args,kind);case"browser_act":return await handleAct(args,kind);default:return textResult(`Unknown browser tool: ${request.params.name}. Supported: ${BROWSER_RUNTIME_TOOLS.map(t8=>t8.name).join(", ")}.`,!0)}}catch(err2){return logForDebugging(`[browser-runtime] CallTool error: ${errorMessage(err2)}`,{level:"error"}),textResult(`Browser runtime error: ${errorMessage(err2)}`,!0)}}),server2}function handleStatus(){let status2=getBrowserBackendStatus(),sticky=getStickySession();return textResult(JSON.stringify({kind:status2.kind,enabled:status2.enabled,reason:status2.reason,endpoint:status2.endpoint,isolation:status2.isolation,spaces:status2.spaces,activeSpaceId:status2.activeSpaceId,cookieIsolationGuaranteed:status2.cookieIsolationGuaranteed,protocol:"semantic_v1",refGeneration:sticky?.refTable?.generation??0,refCount:sticky?.refTable?.byId.size??0},null,2))}async function ensureClient(kind){let status2=await ensureBrowserBackend({force:kind==="native_runtime"?"native_runtime":kind==="attach_cdp"?"attach_cdp":void 0});if(!status2.enabled||status2.kind==="none")throw new Error(`browser_backend_unavailable:${status2.reason}. Try: clavue browser start \xB7 CLAVUE_CDP_URL=http://127.0.0.1:9222 \xB7 allowBrowser=true \xB7 or Path A playwright.`);let sticky=getStickySession();if(!sticky?.client)throw new Error("browser_cdp_client_missing");return sticky}async function ensureActiveSession(kind){let sticky=await ensureClient(kind),targetId=sticky.activeTargetId;targetId||(targetId=(await sticky.client.listPageTargets()).find(p=>sticky.agentTargetIds.has(p.targetId))?.targetId||await sticky.client.createTarget("about:blank"),sticky.agentTargetIds.add(targetId),sticky.activeTargetId=targetId);let cdpSessionId=await sticky.client.attachToTarget(targetId);return sticky.activeCdpSessionId=cdpSessionId,setStickySession(void 0,sticky),await sticky.client.send("Page.enable",{},{sessionId:cdpSessionId}).catch(()=>{}),await sticky.client.send("Runtime.enable",{},{sessionId:cdpSessionId}).catch(()=>{}),{sticky,cdpSessionId,targetId}}async function handleTabs(args,kind){let action=String(args.action||"list");if(action!=="list")return textResult(`Unsupported tabs action: ${action}`,!0);let includeUser=args.includeUserTabs===!0,sticky=await ensureClient(kind),pages=await sticky.client.listPageTargets(),agentIds=sticky.agentTargetIds,tabs=pages.filter(p=>includeUser||agentIds.has(p.targetId)).map(p=>({targetId:p.targetId,title:p.title,url:p.url,ownedByAgent:agentIds.has(p.targetId)}));return textResult(JSON.stringify({tabs,includeUserTabs:includeUser,note:includeUser?"User tabs included (attach shares profile \u2014 cookie isolation not guaranteed).":"Default list is agent-owned targets only."},null,2))}async function handleNavigate(args,kind){let rawUrl=String(args.url||"").trim();if(!rawUrl)return textResult("url is required",!0);let allowed=allowBrowserNavigateUrl(rawUrl);if(allowed.ok===!1)return textResult(`Navigate denied: ${allowed.reason}. Allowed: http(s)://, about:blank`+(process.env.CLAVUE_BROWSER_ALLOW_FILE==="1"?", file:":""),!0);let url3=allowed.url,sticky=await ensureClient(kind),targetId=sticky.activeTargetId;(!targetId||!sticky.agentTargetIds.has(targetId))&&(targetId=await sticky.client.createTarget(url3),sticky.agentTargetIds.add(targetId),sticky.activeTargetId=targetId);let cdpSessionId=await sticky.client.attachToTarget(targetId);return sticky.activeCdpSessionId=cdpSessionId,await sticky.client.send("Page.enable",{},{sessionId:cdpSessionId}),await sticky.client.navigate(cdpSessionId,url3),invalidateRefTable(),setStickySession(void 0,getStickySession()??sticky),await new Promise(r2=>setTimeout(r2,300)),textResult(JSON.stringify({ok:!0,targetId,url:url3,spaceId:"agent:default",note:"Refs invalidated \u2014 call browser_snapshot before click/type."}))}async function handleSnapshot(args,kind){let mode=String(args.mode||"semantic").toLowerCase(),{sticky,cdpSessionId}=await ensureActiveSession(kind);if(mode==="raw"){let snap=await captureRawSnapshot({client:sticky.client,sessionId:cdpSessionId,spaceId:"agent:default"});return textResult(JSON.stringify(snap,null,2))}let{snapshot:snapshot2,refTable}=await captureSemanticSnapshot({client:sticky.client,cdpSessionId,spaceId:"agent:default",previousGeneration:sticky.refTable?.generation??0});sticky.refTable=refTable,setStickySession(void 0,sticky);let body=[snapshot2.tree,"","---",JSON.stringify({protocol:snapshot2.protocol,spaceId:snapshot2.spaceId,generation:snapshot2.generation,url:snapshot2.url,title:snapshot2.title,refCount:snapshot2.refs.length,refs:snapshot2.refs.map(r2=>r2.id),truncated:snapshot2.truncated})].join(`
5595
5595
  `);return textResult(body)}async function handleScreenshot(kind){let{sticky,cdpSessionId,targetId}=await ensureActiveSession(kind),b64=await sticky.client.captureScreenshotPng(cdpSessionId);return!b64||b64.length<32?textResult(JSON.stringify({ok:!1,targetId,error:"screenshot_empty_or_truncated"}),!0):{isError:!1,content:[{type:"text",text:JSON.stringify({ok:!0,targetId,format:"png",encoding:"base64",bytes:Math.floor(b64.length*3/4)})},{type:"image",data:b64,mimeType:"image/png"}]}}async function handleClick(args,kind){let ref=String(args.ref||""),{sticky,cdpSessionId}=await ensureActiveSession(kind),result2=await clickByRef({client:sticky.client,cdpSessionId,refTable:sticky.refTable,ref});return result2.ok===!1?textResult(result2.error,!0):textResult(JSON.stringify({ok:!0,...result2}))}async function handleType(args,kind){let ref=String(args.ref||""),text3=String(args.text??""),submit=args.submit===!0,{sticky,cdpSessionId}=await ensureActiveSession(kind),result2=await typeByRef({client:sticky.client,cdpSessionId,refTable:sticky.refTable,ref,text:text3,submit});return result2.ok===!1?textResult(result2.error,!0):textResult(JSON.stringify({ok:!0,...result2,submit}))}async function handlePress(args,kind){let key=String(args.key||""),{sticky,cdpSessionId}=await ensureActiveSession(kind),result2=await pressKey({client:sticky.client,cdpSessionId,key});return result2.ok===!1?textResult(result2.error,!0):textResult(JSON.stringify({ok:!0,...result2}))}async function handleAct(args,kind){let script=parseActScript(args),{sticky,cdpSessionId,targetId}=await ensureActiveSession(kind),result2=await runActScript(script,{client:sticky.client,cdpSessionId,spaceId:script.spaceId||"agent:default",refTable:sticky.refTable,onRefTable:__name(table=>{let s2=getStickySession();s2&&(s2.refTable=table,setStickySession(void 0,s2))},"onRefTable"),ensureSession:__name(async()=>({cdpSessionId:(await ensureActiveSession(kind)).cdpSessionId}),"ensureSession"),navigate:__name(async url3=>{let s2=getStickySession(),tid=s2.activeTargetId;(!tid||!s2.agentTargetIds.has(tid))&&(tid=await s2.client.createTarget(url3),s2.agentTargetIds.add(tid),s2.activeTargetId=tid);let sid=await s2.client.attachToTarget(tid);return s2.activeCdpSessionId=sid,await s2.client.send("Page.enable",{},{sessionId:sid}),await s2.client.navigate(sid,url3),invalidateRefTable(),setStickySession(void 0,s2),await new Promise(r2=>setTimeout(r2,200)),{targetId:tid}},"navigate"),screenshot:__name(async()=>{let ens=await ensureActiveSession(kind);return ens.sticky.client.captureScreenshotPng(ens.cdpSessionId)},"screenshot")}),summary={ok:result2.ok,reason:result2.reason,generation:result2.generation,targetId,stepCount:result2.results.length,results:result2.results.map(r2=>r2.ok?{i:r2.index,op:r2.op,ok:!0}:{i:r2.index,op:r2.op,ok:!1,error:r2.error})},parts=[JSON.stringify(summary,null,2)];return result2.snapshot&&(parts.push(""),parts.push(result2.snapshot.tree),parts.push("---"),parts.push(JSON.stringify({protocol:result2.snapshot.protocol,generation:result2.snapshot.generation,url:result2.snapshot.url,title:result2.snapshot.title,refs:result2.snapshot.refs.map(r2=>r2.id),truncated:result2.snapshot.truncated}))),textResult(parts.join(`
5596
- `),!result2.ok)}var init_server3=__esm({"src/services/browser/mcp/server.ts"(){init_server2();init_types3();init_debug();init_errors2();init_officialBrowserMcp();init_batch();init_byRef();init_backendSelector();init_raw();init_semantic();init_sessionState();init_navigateAllowlist();init_toolDefs();__name(textResult,"textResult");__name(createBrowserRuntimeMcpServer,"createBrowserRuntimeMcpServer");__name(handleStatus,"handleStatus");__name(ensureClient,"ensureClient");__name(ensureActiveSession,"ensureActiveSession");__name(handleTabs,"handleTabs");__name(handleNavigate,"handleNavigate");__name(handleSnapshot,"handleSnapshot");__name(handleScreenshot,"handleScreenshot");__name(handleClick,"handleClick");__name(handleType,"handleType");__name(handlePress,"handlePress");__name(handleAct,"handleAct")}});function isUserFacingPath(path36,homeDir){if(PATH_ALLOWLIST.some(root2=>path36.startsWith(root2)))return!0;if(homeDir){let userApps=homeDir.endsWith("/")?`${homeDir}Applications/`:`${homeDir}/Applications/`;if(path36.startsWith(userApps))return!0}return!1}function isNoisyName(name){return NAME_PATTERN_BLOCKLIST.some(re2=>re2.test(name))}function sanitizeCore(raw,applyCharFilter){let seen=new Set;return raw.map(name=>name.trim()).filter(trimmed=>!trimmed||trimmed.length>APP_NAME_MAX_LEN||applyCharFilter&&!APP_NAME_ALLOWED.test(trimmed)||seen.has(trimmed)?!1:(seen.add(trimmed),!0)).sort((a2,b3)=>a2.localeCompare(b3))}function sanitizeAppNames(raw){let filtered=sanitizeCore(raw,!0);return filtered.length<=APP_NAME_MAX_COUNT?filtered:[...filtered.slice(0,APP_NAME_MAX_COUNT),`\u2026 and ${filtered.length-APP_NAME_MAX_COUNT} more`]}function sanitizeTrustedNames(raw){return sanitizeCore(raw,!1)}function filterAppsForDescription(installed2,homeDir){let{alwaysKept,rest:rest2}=installed2.reduce((acc,app)=>(ALWAYS_KEEP_BUNDLE_IDS.has(app.bundleId)?acc.alwaysKept.push(app.displayName):isUserFacingPath(app.path,homeDir)&&!isNoisyName(app.displayName)&&acc.rest.push(app.displayName),acc),{alwaysKept:[],rest:[]}),sanitizedAlways=sanitizeTrustedNames(alwaysKept),alwaysSet=new Set(sanitizedAlways);return[...sanitizedAlways,...sanitizeAppNames(rest2).filter(n4=>!alwaysSet.has(n4))]}var PATH_ALLOWLIST,NAME_PATTERN_BLOCKLIST,ALWAYS_KEEP_BUNDLE_IDS,APP_NAME_ALLOWED,APP_NAME_MAX_LEN,APP_NAME_MAX_COUNT,init_appNames=__esm({"src/utils/computerUse/appNames.ts"(){PATH_ALLOWLIST=["/Applications/","/System/Applications/"],NAME_PATTERN_BLOCKLIST=[/Helper(?:$|\s\()/,/Agent(?:$|\s\()/,/Service(?:$|\s\()/,/Uninstaller(?:$|\s\()/,/Updater(?:$|\s\()/,/^\./],ALWAYS_KEEP_BUNDLE_IDS=new Set(["com.apple.Safari","com.google.Chrome","com.microsoft.edgemac","org.mozilla.firefox","company.thebrowser.Browser","com.tinyspeck.slackmacgap","us.zoom.xos","com.microsoft.teams2","com.microsoft.teams","com.apple.MobileSMS","com.apple.mail","com.microsoft.Word","com.microsoft.Excel","com.microsoft.Powerpoint","com.microsoft.Outlook","com.apple.iWork.Pages","com.apple.iWork.Numbers","com.apple.iWork.Keynote","com.google.GoogleDocs","notion.id","com.apple.Notes","md.obsidian","com.linear","com.figma.Desktop","com.microsoft.VSCode","com.apple.Terminal","com.googlecode.iterm2","com.github.GitHubDesktop","com.apple.finder","com.apple.iCal","com.apple.systempreferences"]),APP_NAME_ALLOWED=/^[\p{L}\p{M}\p{N}_ .&'()+-]+$/u,APP_NAME_MAX_LEN=40,APP_NAME_MAX_COUNT=50;__name(isUserFacingPath,"isUserFacingPath");__name(isNoisyName,"isNoisyName");__name(sanitizeCore,"sanitizeCore");__name(sanitizeAppNames,"sanitizeAppNames");__name(sanitizeTrustedNames,"sanitizeTrustedNames");__name(filterAppsForDescription,"filterAppsForDescription")}});function buildComputerUseTools(installedAppNames2){let appsHint=installedAppNames2?.length?` Installed applications include: ${installedAppNames2.join(", ")}.`:"";return[{name:"computer_status",description:"Diagnose local Computer Use readiness: macOS Accessibility, Screen Recording, displays, running apps, and frontmost app. Read-only and does not require app access. Call first when starting desktop control.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"request_access",description:"Request session-scoped permission to inspect and control named Mac applications. Required before screenshots, UI inspection, launch, click, typing, or key actions. Prefer shell/APIs when the task is not GUI."+appsHint,inputSchema:objectSchema({apps:{type:"array",minItems:1,maxItems:20,items:{type:"string"},description:"Application display names or bundle identifiers."},reason:{type:"string",maxLength:300},clipboard_read:{type:"boolean"},clipboard_write:{type:"boolean"},system_key_combos:{type:"boolean"}},["apps"])},{name:"list_granted_applications",description:"List applications and optional capabilities granted for this session.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"open_application",description:"Launch or activate a previously granted Mac application by bundle ID. Then inspect_ui before clicking.",inputSchema:objectSchema({bundle_id:bundleId},["bundle_id"])},{name:"screenshot",description:`Capture the full target display after hiding ungranted applications. Returns a thrift JPEG (long edge ~${1280}px; override CLAVUE_CU_SCREENSHOT_MAX). Last-resort eyes \u2014 prefer zoom (window/region) for visual verify, and inspect_ui/find_label for targeting. Not the default control path. Blocked while a password-manager-like app is frontmost unless CLAVUE_CU_ALLOW_SENSITIVE=1 (pixel leak).`,inputSchema:objectSchema({display_id:{type:"number"}}),annotations:{readOnlyHint:!0}},{name:"zoom",description:`Capture a rectangular screen region as a thrift JPEG (long edge cap ~${1280}px). Prefer zoom of the active window/control over full-display screenshot. Prefer inspect_ui/find_label for labeled controls.`,inputSchema:objectSchema({region:{type:"array",items:{type:"number"},minItems:4,maxItems:4,description:"[x, y, width, height] in logical screen pixels."}},["region"]),annotations:{readOnlyHint:!0}},{name:"inspect_ui",description:COMPUTER_USE_AX_PRIMARY_HINT+" Returns compact elements with paths, roles, labels, values, frames and actions. Re-inspect after UI changes because paths may become stale. Prefer over screenshot for targeting.",inputSchema:objectSchema({bundle_id:bundleId,max_depth:{type:"number",minimum:1,maximum:12,default:6},max_elements:{type:"number",minimum:1,maximum:500,default:120},include_menu_bar:{type:"boolean",default:!1,description:"Include the usually large macOS menu tree only when needed."}},["bundle_id"]),annotations:{readOnlyHint:!0}},{name:"ui_action",description:COMPUTER_USE_AX_PRIMARY_HINT+" Act on an element from the latest inspect_ui (press/focus/set_value). Prefer over pixel clicks. After success, re-inspect_ui (or screenshot) before claiming the UI changed. risk other than none requires user confirmation.",inputSchema:objectSchema({bundle_id:bundleId,path:{type:"string",description:"Element path from the latest inspect_ui result."},action:{type:"string",enum:["press","confirm","focus","set_value","increment","decrement"]},value:{type:"string"},intent:{type:"string",maxLength:200,description:"What this action is expected to do in the application."},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"],description:"User-visible side-effect category. Use none only when side-effect free. delete/communicate/financial/install_or_settings/sensitive_data require confirmation."}},["bundle_id","path","action","intent","risk"])},{name:"find_label",description:COMPUTER_USE_AX_PRIMARY_HINT+" Find UI elements by visible label (title/description/identifier/value) via Accessibility. Read-only. Prefer this or click_text before coordinate clicks.",inputSchema:objectSchema({bundle_id:bundleId,query:{type:"string",minLength:1,maxLength:200,description:"Label text to search (substring match unless exact=true)."},exact:{type:"boolean",default:!1,description:"Require full-string match on a label field."},role:{type:"string",description:"Optional AX role filter (e.g. AXButton)."},max_depth:{type:"number",minimum:1,maximum:12,default:6},max_elements:{type:"number",minimum:1,maximum:500,default:120},limit:{type:"number",minimum:1,maximum:50,default:12}},["bundle_id","query"]),annotations:{readOnlyHint:!0}},{name:"click_text",description:COMPUTER_USE_AX_PRIMARY_HINT+" Find by label then press (AXPress) or click frame center. Prefer over left_click. After success, re-inspect or screenshot before claiming the UI changed. risk other than none requires confirmation.",inputSchema:objectSchema({bundle_id:bundleId,query:{type:"string",minLength:1,maxLength:200,description:"Label text to click (e.g. Save, \u597D, Format)."},exact:{type:"boolean",default:!1,description:"Require full-string match on a label field."},role:{type:"string",description:"Optional AX role filter (e.g. AXButton)."},intent:{type:"string",maxLength:200,description:"What this click is expected to do."},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"],description:"User-visible side-effect category. none only when side-effect free."},max_depth:{type:"number",minimum:1,maximum:12,default:6},max_elements:{type:"number",minimum:1,maximum:500,default:120}},["bundle_id","query","intent","risk"])},{name:"left_click",description:"Left-click a point after verifying the frontmost/under-point app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"right_click",description:"Right-click a point after verifying the target app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"double_click",description:"Double-click a point after verifying the target app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"triple_click",description:"Triple-click a point after verifying the target app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"mouse_move",description:"Move the pointer without clicking. Prefer inspect_ui/ui_action for real control changes.",inputSchema:objectSchema({coordinate},["coordinate"])},{name:"left_click_drag",description:"Drag from start_coordinate to coordinate. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({start_coordinate:coordinate,coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["start_coordinate","coordinate","intent","risk"])},{name:"scroll",description:"Scroll at the current pointer or an optional coordinate. Prefer ui_action on scrollable AX elements when available.",inputSchema:objectSchema({direction:{type:"string",enum:["up","down","left","right"]},amount:{type:"number",minimum:1,maximum:20,default:3},coordinate},["direction"])},{name:"type",description:"Type Unicode text into the granted frontmost application. Prefer focus/set_value via ui_action when a field path exists. Re-inspect after typing if the UI should change. risk other than none requires confirmation.",inputSchema:objectSchema({text:{type:"string",maxLength:1e5},intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["text","intent","risk"])},{name:"key",description:COMPUTER_USE_KEYBOARD_FIRST_HINT+" Press a key or chord such as return, escape, command+s, command+a, control+tab. Prefer shortcuts over pixel clicks when possible. System-wide chords require the system_key_combos grant. Do not spam Space/media keys as a retry loop. risk other than none requires confirmation.",inputSchema:objectSchema({text:{type:"string"},repeat:{type:"number",minimum:1,maximum:100,default:1},intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["text","intent","risk"])},{name:"wait",description:"Wait briefly for an app/UI transition, then continue diagnosis.",inputSchema:objectSchema({duration:{type:"number",minimum:0,maximum:30}},["duration"]),annotations:{readOnlyHint:!0}},{name:"cursor_position",description:"Read the current pointer position.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"read_clipboard",description:"Read plain text from the clipboard when clipboard_read was granted.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"write_clipboard",description:"Write plain text to the clipboard when clipboard_write was granted.",inputSchema:objectSchema({text:{type:"string",maxLength:1e5}},["text"])}]}var objectSchema,coordinate,bundleId,init_tools3=__esm({"src/utils/computerUse/tools.ts"(){init_efficiencyLaw();objectSchema=__name((properties,required2=[])=>({type:"object",properties,...required2.length>0?{required:required2}:{},additionalProperties:!1}),"objectSchema"),coordinate={type:"array",items:{type:"number"},minItems:2,maxItems:2,description:"[x, y] in logical screen pixels from the global top-left."},bundleId={type:"string",description:"Exact macOS application bundle identifier."};__name(buildComputerUseTools,"buildComputerUseTools")}});var mcpServer_exports2={};__export(mcpServer_exports2,{createComputerUseMcpServerForCli:()=>createComputerUseMcpServerForCli,runComputerUseMcpServer:()=>runComputerUseMcpServer});import{homedir as homedir24}from"os";async function installedAppNames(){let timer2,timeout=new Promise(resolve64=>{timer2=globalThis.setTimeout(resolve64,APP_ENUM_TIMEOUT_MS)}),apps=await Promise.race([listComputerUseInstalledApps().catch(()=>{}),timeout]).finally(()=>globalThis.clearTimeout(timer2));return apps?filterAppsForDescription(apps,homedir24()):void 0}async function createComputerUseMcpServerForCli(){let server2=new Server({name:"clavue-computer-use",version:"1.0.0"},{capabilities:{tools:{}},instructions:getComputerUseEfficiencyPolicyText()}),tools=buildComputerUseTools(await installedAppNames());return server2.setRequestHandler(ListToolsRequestSchema,async()=>({tools})),server2.setRequestHandler(CallToolRequestSchema,async()=>({isError:!0,content:[{type:"text",text:"Computer Use actions require an interactive Clavue session."}]})),server2}async function runComputerUseMcpServer(){enableConfigs(),initializeAnalyticsSink();let server2=await createComputerUseMcpServerForCli(),transport=new StdioServerTransport,exiting=!1,shutdownAndExit=__name(async()=>{exiting||(exiting=!0,await Promise.all([shutdown1PEventLogging(),shutdownDatadog()]),process.exit(0))},"shutdownAndExit");process.stdin.on("end",()=>{shutdownAndExit()}),process.stdin.on("error",()=>{shutdownAndExit()}),await server2.connect(transport)}var APP_ENUM_TIMEOUT_MS,init_mcpServer2=__esm({"src/utils/computerUse/mcpServer.ts"(){init_server2();init_stdio4();init_types3();init_datadog();init_firstPartyEventLogger();init_sink();init_config11();init_appNames();init_efficiencyLaw();init_executor();init_tools3();APP_ENUM_TIMEOUT_MS=1e3;__name(installedAppNames,"installedAppNames");__name(createComputerUseMcpServerForCli,"createComputerUseMcpServerForCli");__name(runComputerUseMcpServer,"runComputerUseMcpServer")}});var client_exports3={};__export(client_exports3,{MAX_MCP_DESCRIPTION_LENGTH:()=>MAX_MCP_DESCRIPTION_LENGTH,MCP_FETCH_CACHE_SIZE:()=>MCP_FETCH_CACHE_SIZE,MCP_REQUEST_TIMEOUT_MS:()=>MCP_REQUEST_TIMEOUT_MS,McpAuthError:()=>McpAuthError,McpSessionExpiredError:()=>McpSessionExpiredError,McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS:()=>McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,areMcpConfigsEqual:()=>areMcpConfigsEqual,callIdeRpc:()=>callIdeRpc,callMCPToolWithUrlElicitationRetry:()=>callMCPToolWithUrlElicitationRetry,clearMcpAuthCache:()=>clearMcpAuthCache,clearServerCache:()=>clearServerCache,connectToServer:()=>connectToServer,createClaudeAiProxyFetch:()=>createClaudeAiProxyFetch,createFetchCommandsForClient:()=>createFetchCommandsForClient,createNodeWsClient:()=>createNodeWsClient,ensureConnectedClient:()=>ensureConnectedClient,fetchCommandsForClient:()=>fetchCommandsForClient,fetchResourceTemplatesForClient:()=>fetchResourceTemplatesForClient,fetchResourcesAndTemplatesForClient:()=>fetchResourcesAndTemplatesForClient,fetchResourcesForClient:()=>fetchResourcesForClient,fetchToolsForClient:()=>fetchToolsForClient,getConnectionTimeoutMs:()=>getConnectionTimeoutMs,getMcpServerConnectionBatchSize:()=>getMcpServerConnectionBatchSize,getMcpToolTimeoutMs:()=>getMcpToolTimeoutMs,getMcpToolsCommandsAndResources:()=>getMcpToolsCommandsAndResources,getServerCacheKey:()=>getServerCacheKey,inferCompactSchema:()=>inferCompactSchema,isMcpSessionExpiredError:()=>isMcpSessionExpiredError,mcpToolInputToAutoClassifierInput:()=>mcpToolInputToAutoClassifierInput,prefetchAllMcpResources:()=>prefetchAllMcpResources,processBatched:()=>processBatched,processMCPResult:()=>processMCPResult,reconnectMcpServerImpl:()=>reconnectMcpServerImpl,setupSdkMcpClients:()=>setupSdkMcpClients,transformMCPResult:()=>transformMCPResult,transformResultContent:()=>transformResultContent,wrapFetchWithTimeout:()=>wrapFetchWithTimeout});async function clearServerCache(name,serverRef){let key=getServerCacheKey(name,serverRef);try{let wrappedClient=await connectToServer(name,serverRef);wrappedClient.type==="connected"&&await wrappedClient.cleanup()}catch{}connectToServer.cache.delete(key),clearMcpFetchCaches(name,{tools:fetchToolsForClient,resources:fetchResourcesForClient,resourceTemplates:fetchResourceTemplatesForClient,commands:fetchCommandsForClient,skills:null})}async function ensureConnectedClient(client2){if(client2.config.type==="sdk")return client2;let connectedClient=await connectToServer(client2.name,client2.config);if(connectedClient.type!=="connected")throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(`MCP server "${client2.name}" is not connected`,"MCP server not connected");return connectedClient}async function callIdeRpc(toolName5,args,client2){return(await callMCPTool2({client:client2,tool:toolName5,args,signal:createAbortController().signal})).content}async function reconnectMcpServerImpl(name,config3){try{clearKeychainCache(),await clearServerCache(name,config3);let client2=await connectToServer(name,config3);if(client2.type!=="connected")return{client:client2,tools:[],commands:[]};config3.type==="claudeai-proxy"&&markClaudeAiMcpConnected(name);let{supportsResources,tools,commands,resources}=await fetchConnectedClientState(client2,{fetchToolsForClient,fetchCommandsForClient,fetchResourcesForClient,fetchMcpSkillsForClient:fetchMcpSkillsForClient2}),resourceTools=[];return supportsResources&&([ListMcpResourcesTool,ReadMcpResourceTool].some(tool=>tools.some(t8=>toolMatchesName(t8,tool.name)))||resourceTools.push(ListMcpResourcesTool,ReadMcpResourceTool)),{client:client2,tools:[...tools,...resourceTools],commands,resources:resources.length>0?resources:void 0}}catch(error40){return logMCPError(name,`Error during reconnection: ${errorMessage(error40)}`),{client:{name,type:"failed",config:config3},tools:[],commands:[]}}}async function getMcpToolsCommandsAndResources(onConnectionAttempt,mcpConfigs){let resourceToolsAdded=!1,allConfigEntries=Object.entries(mcpConfigs??(await getAllMcpConfigs()).servers),configEntries=[];for(let entry of allConfigEntries)isMcpServerDisabled(entry[0])?onConnectionAttempt({client:{name:entry[0],type:"disabled",config:entry[1]},tools:[],commands:[]}):configEntries.push(entry);let totalServers=configEntries.length,stdioCount=count2(configEntries,([_2,c4])=>c4.type==="stdio"),sseCount=count2(configEntries,([_2,c4])=>c4.type==="sse"),httpCount=count2(configEntries,([_2,c4])=>c4.type==="http"),sseIdeCount=count2(configEntries,([_2,c4])=>c4.type==="sse-ide"),wsIdeCount=count2(configEntries,([_2,c4])=>c4.type==="ws-ide"),localServers=configEntries.filter(([_2,config3])=>isLocalMcpServer(config3)),remoteServers=configEntries.filter(([_2,config3])=>!isLocalMcpServer(config3)),serverStats={totalServers,stdioCount,sseCount,httpCount,sseIdeCount,wsIdeCount},processServer=__name(async([name,config3])=>{try{if(isMcpServerDisabled(name)){onConnectionAttempt({client:{name,type:"disabled",config:config3},tools:[],commands:[]});return}let knownConfigIssue="command"in config3?getKnownMcpConfigIssue(config3):null;if(knownConfigIssue){let issueMessage=`${knownConfigIssue.message} ${knownConfigIssue.suggestion}`;logMCPError(name,issueMessage),onConnectionAttempt({client:{name,type:"failed",config:config3,error:issueMessage},tools:[],commands:[]});return}if((config3.type==="claudeai-proxy"||config3.type==="http"||config3.type==="sse")&&(await isMcpAuthCached(name)||(config3.type==="http"||config3.type==="sse")&&hasMcpDiscoveryButNoToken(name,config3))){logMCPDebug(name,"Skipping connection (cached needs-auth)"),onConnectionAttempt({client:{name,type:"needs-auth",config:config3},tools:[createMcpAuthTool(name,config3)],commands:[]});return}let client2=await connectToServer(name,config3,serverStats);if(client2.type!=="connected"){onConnectionAttempt({client:client2,tools:client2.type==="needs-auth"?[createMcpAuthTool(name,config3)]:[],commands:[]});return}config3.type==="claudeai-proxy"&&markClaudeAiMcpConnected(name);let{supportsResources,tools,commands,resources}=await fetchConnectedClientState(client2,{fetchToolsForClient,fetchCommandsForClient,fetchResourcesForClient,fetchMcpSkillsForClient:fetchMcpSkillsForClient2}),resourceTools=[];supportsResources&&!resourceToolsAdded&&(resourceToolsAdded=!0,resourceTools.push(ListMcpResourcesTool,ReadMcpResourceTool)),onConnectionAttempt({client:client2,tools:[...tools,...resourceTools],commands,resources:resources.length>0?resources:void 0})}catch(error40){logMCPError(name,`Error fetching tools/commands/resources: ${errorMessage(error40)}`),onConnectionAttempt({client:{name,type:"failed",config:config3},tools:[],commands:[]})}},"processServer");await Promise.all([processBatched(localServers,getMcpServerConnectionBatchSize(),processServer),processBatched(remoteServers,getRemoteMcpServerConnectionBatchSize(),processServer)])}async function callMCPToolWithUrlElicitationRetry({client:connectedClient,clientConnection,tool,args,meta,signal,setAppState,onProgress,callToolFn=callMCPTool2,handleElicitation}){for(let attempt2=0;;attempt2++)try{return await callToolFn({client:connectedClient,tool,args,meta,signal,onProgress})}catch(error40){if(!(error40 instanceof McpError)||error40.code!==ErrorCode.UrlElicitationRequired||attempt2>=3)throw error40;let elicitations=getValidUrlElicitations(error40.data),serverName=getServerNameForElicitation(clientConnection);if(elicitations.length===0)throw logMCPDebug(serverName,`Tool '${tool}' returned -32042 but no valid elicitations in error data`),error40;logMCPDebug(serverName,`Tool '${tool}' requires URL elicitation (error -32042, attempt ${attempt2+1}), processing ${elicitations.length} elicitation(s)`);for(let elicitation of elicitations){let{elicitationId}=elicitation,hookResponse=await runElicitationHooks(serverName,elicitation,signal);if(hookResponse){if(logMCPDebug(serverName,`URL elicitation ${elicitationId} resolved by hook: ${jsonStringify(hookResponse)}`),hookResponse.action!=="accept")return{content:formatUrlElicitationBlockedMessage(tool,hookResponse.action,"hook")};continue}let userResult;handleElicitation?userResult=await handleElicitation(serverName,elicitation,signal):userResult=await queueUrlElicitation({serverName,elicitation,signal,setAppState});let finalResult=await runElicitationResultHooks(serverName,userResult,signal,"url",elicitationId);if(finalResult.action!=="accept")return logMCPDebug(serverName,`User ${finalResult.action==="decline"?"declined":finalResult.action+"ed"} URL elicitation ${elicitationId}`),{content:formatUrlElicitationBlockedMessage(tool,finalResult.action,"user")};logMCPDebug(serverName,`Elicitation ${elicitationId} completed, retrying tool call`)}}}function callMCPTool2(args){return callMCPTool(args,{clearServerCache})}async function setupSdkMcpClients(sdkMcpConfigs,sendMcpMessage){let clients=[],tools=[],results=await Promise.allSettled(Object.entries(sdkMcpConfigs).map(async([name,config3])=>{let transport=new SdkControlClientTransport(name,sendMcpMessage),client2=new Client({name:"clavue",title:"Clavue",version:typeof MACRO<"u"?"11.3.12":"unknown",description:"Clavue coding assistant",websiteUrl:PRODUCT_URL},{capabilities:{}});try{await client2.connect(transport);let capabilities=client2.getServerCapabilities(),connectedClient={type:"connected",name,capabilities:capabilities||{},client:client2,config:{...config3,scope:"dynamic"},cleanup:__name(async()=>{await client2.close()},"cleanup")},serverTools=[];if(capabilities?.tools){let sdkTools=await fetchToolsForClient(connectedClient);serverTools.push(...sdkTools)}return{client:connectedClient,tools:serverTools}}catch(error40){return logMCPError(name,`Failed to connect SDK MCP server: ${error40}`),{client:{type:"failed",name,config:{...config3,scope:"user"}},tools:[]}}}));for(let result2 of results)result2.status==="fulfilled"&&(clients.push(result2.value.client),tools.push(...result2.value.tools));return{clients,tools}}var fetchMcpSkillsForClient2,isComputerUseMCPServer3,connectToServer,fetchToolsForClient,fetchCommandsForClient,prefetchAllMcpResources,init_client7=__esm({"src/services/mcp/client.ts"(){init_featureFlags();init_auth6();init_auth3();init_client4();init_sse();init_stdio3();init_streamableHttp();init_transport();init_types3();init_mapValues();init_memoize();init_zipObject();init_state();init_oauth();init_product();init_Tool();init_ListMcpResourcesTool();init_McpAuthTool();init_ReadMcpResourceTool();init_abortController();init_array3();init_cleanupRegistry();init_debug();init_errors2();init_http2();init_ide();init_log3();init_mcpWebSocketTransport();init_mtls();init_proxy();init_sessionIngressAuth();init_subprocessEnv();init_analytics();init_elicitationHandler();init_utils10();init_macOsKeychainHelpers();init_sleep2();init_authCache();init_connectionUtils();init_remoteAuth();init_commandFetcher();init_connectedClientState();init_prefetchResources();init_resourceFetcher();init_toolFetcher();init_resultTransform();init_toolCaller();init_urlElicitation();init_authCache();init_connectionUtils();init_remoteAuth();init_commandFetcher();init_resourceFetcher();init_utils10();init_resultTransform();init_auth5();init_claudeai();init_config8();init_headersHelper();init_runtimeHealth();init_SdkControlTransport();init_common2();init_slowOperations();fetchMcpSkillsForClient2=feature("MCP_SKILLS")?(init_mcpSkills(),__toCommonJS(mcpSkills_exports)).fetchMcpSkillsForClient??null:null,isComputerUseMCPServer3=(init_common3(),__toCommonJS(common_exports)).isComputerUseMCPServer,connectToServer=memoize_default(async(name,serverRef,serverStats)=>{let connectStartTime=Date.now(),connectionTimeoutMs=getConnectionTimeoutMs(serverRef),inProcessServer;try{let transport,sessionIngressToken=getSessionIngressAuthToken();if(serverRef.type==="sse"){let authProvider=new ClaudeAuthProvider(name,serverRef),combinedHeaders=await getMcpServerHeaders(name,serverRef),transportOptions={authProvider,fetch:wrapFetchWithTimeout(wrapFetchWithStepUpDetection(createFetchWithInit(),authProvider)),requestInit:{headers:{"User-Agent":getMCPUserAgent(),...combinedHeaders}}};transportOptions.eventSourceInit={fetch:__name(async(url3,init2)=>{let authHeaders2={},tokens=await authProvider.tokens();tokens&&(authHeaders2.Authorization=`Bearer ${tokens.access_token}`);let proxyOptions=getProxyFetchOptions();return fetch(url3,{...init2,...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),...authHeaders2,...init2?.headers,...combinedHeaders,Accept:"text/event-stream"}})},"fetch")},transport=new SSEClientTransport(new URL(serverRef.url),transportOptions),logMCPDebug(name,"SSE transport initialized, awaiting connection")}else if(serverRef.type==="sse-ide"){logMCPDebug(name,`Setting up SSE-IDE transport to ${serverRef.url}`);let proxyOptions=getProxyFetchOptions(),transportOptions=proxyOptions.dispatcher?{eventSourceInit:{fetch:__name(async(url3,init2)=>fetch(url3,{...init2,...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),...init2?.headers}}),"fetch")}}:{};transport=new SSEClientTransport(new URL(serverRef.url),Object.keys(transportOptions).length>0?transportOptions:void 0)}else if(serverRef.type==="ws-ide"){let tlsOptions=getWebSocketTLSOptions(),wsHeaders={"User-Agent":getMCPUserAgent(),...serverRef.authToken&&{"X-Claude-Code-Ide-Authorization":serverRef.authToken}},wsClient;typeof Bun<"u"?wsClient=new globalThis.WebSocket(serverRef.url,{protocols:["mcp"],headers:wsHeaders,proxy:getWebSocketProxyUrl(serverRef.url),tls:tlsOptions||void 0}):wsClient=await createNodeWsClient(serverRef.url,{headers:wsHeaders,agent:getWebSocketProxyAgent(serverRef.url),...tlsOptions||{}}),transport=new WebSocketTransport(wsClient)}else if(serverRef.type==="ws"){logMCPDebug(name,`Initializing WebSocket transport to ${serverRef.url}`);let combinedHeaders=await getMcpServerHeaders(name,serverRef),tlsOptions=getWebSocketTLSOptions(),wsHeaders={"User-Agent":getMCPUserAgent(),...sessionIngressToken&&{Authorization:`Bearer ${sessionIngressToken}`},...combinedHeaders},wsHeadersForLogging=mapValues_default(wsHeaders,(value,key)=>key.toLowerCase()==="authorization"?"[REDACTED]":value);logMCPDebug(name,`WebSocket transport options: ${jsonStringify({url:serverRef.url,headers:wsHeadersForLogging,hasSessionAuth:!!sessionIngressToken})}`);let wsClient;typeof Bun<"u"?wsClient=new globalThis.WebSocket(serverRef.url,{protocols:["mcp"],headers:wsHeaders,proxy:getWebSocketProxyUrl(serverRef.url),tls:tlsOptions||void 0}):wsClient=await createNodeWsClient(serverRef.url,{headers:wsHeaders,agent:getWebSocketProxyAgent(serverRef.url),...tlsOptions||{}}),transport=new WebSocketTransport(wsClient)}else if(serverRef.type==="http"){logMCPDebug(name,`Initializing HTTP transport to ${serverRef.url}`),logMCPDebug(name,`Node version: ${process.version}, Platform: ${process.platform}`),logMCPDebug(name,`Environment: ${jsonStringify({NODE_OPTIONS:process.env.NODE_OPTIONS||"not set",UV_THREADPOOL_SIZE:process.env.UV_THREADPOOL_SIZE||"default",HTTP_PROXY:process.env.HTTP_PROXY||"not set",HTTPS_PROXY:process.env.HTTPS_PROXY||"not set",NO_PROXY:process.env.NO_PROXY||"not set"})}`);let authProvider=new ClaudeAuthProvider(name,serverRef),combinedHeaders=await getMcpServerHeaders(name,serverRef),hasOAuthTokens=!!await authProvider.tokens(),proxyOptions=getProxyFetchOptions();logMCPDebug(name,`Proxy options: ${proxyOptions.dispatcher?"custom dispatcher":"default"}`);let transportOptions={authProvider,fetch:wrapFetchWithTimeout(wrapFetchWithStepUpDetection(createFetchWithInit(),authProvider)),requestInit:{...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),...sessionIngressToken&&!hasOAuthTokens&&{Authorization:`Bearer ${sessionIngressToken}`},...combinedHeaders}}},headersForLogging=transportOptions.requestInit?.headers?mapValues_default(transportOptions.requestInit.headers,(value,key)=>key.toLowerCase()==="authorization"?"[REDACTED]":value):void 0;logMCPDebug(name,`HTTP transport options: ${jsonStringify({url:serverRef.url,headers:headersForLogging,hasAuthProvider:!!authProvider,timeoutMs:MCP_REQUEST_TIMEOUT_MS})}`),transport=new StreamableHTTPClientTransport(new URL(serverRef.url),transportOptions),logMCPDebug(name,"HTTP transport created successfully")}else{if(serverRef.type==="sdk")throw new Error("SDK servers should be handled in print.js");if(serverRef.type==="claudeai-proxy"){if(logMCPDebug(name,`Initializing claude.ai proxy transport for server ${serverRef.id}`),!getClaudeAIOAuthTokens())throw new Error("No claude.ai OAuth token found");let oauthConfig=getOauthConfig(),proxyUrl=`${oauthConfig.MCP_PROXY_URL}${oauthConfig.MCP_PROXY_PATH.replace("{server_id}",serverRef.id)}`;logMCPDebug(name,`Using claude.ai proxy at ${proxyUrl}`);let fetchWithAuth=createClaudeAiProxyFetch(globalThis.fetch),proxyOptions=getProxyFetchOptions(),transportOptions={fetch:wrapFetchWithTimeout(fetchWithAuth),requestInit:{...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),"X-Mcp-Client-Session-Id":getSessionId()}}};transport=new StreamableHTTPClientTransport(new URL(proxyUrl),transportOptions),logMCPDebug(name,"claude.ai proxy transport created successfully")}else if("command"in serverRef&&isClaudeInChromeMCPServer(name)){let{createChromeContext:createChromeContext2}=await Promise.resolve().then(()=>(init_mcpServer(),mcpServer_exports)),{loadClaudeInChromeRuntime:loadClaudeInChromeRuntime2}=await Promise.resolve().then(()=>(init_runtime5(),runtime_exports2)),{createClaudeForChromeMcpServer}=await loadClaudeInChromeRuntime2(),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports)),context2=createChromeContext2(serverRef.env);inProcessServer=createClaudeForChromeMcpServer(context2);let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,"In-process Chrome MCP server started")}else if("command"in serverRef&&(await Promise.resolve().then(()=>(init_officialClavueMcp(),officialClavueMcp_exports))).isOfficialClavueMcpServer(name)){let{createOfficialClavueMcpServer:createOfficialClavueMcpServer2}=await Promise.resolve().then(()=>(init_officialClavueMcpServer(),officialClavueMcpServer_exports)),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports));inProcessServer=createOfficialClavueMcpServer2();let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,"In-process official Clavue MCP server started")}else if("command"in serverRef&&(await Promise.resolve().then(()=>(init_officialBrowserMcp(),officialBrowserMcp_exports))).isOfficialBrowserMcpServer(name)&&Array.isArray(serverRef.args)&&serverRef.args.map(String).includes((await Promise.resolve().then(()=>(init_officialBrowserMcp(),officialBrowserMcp_exports))).OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG)){let{createBrowserRuntimeMcpServer:createBrowserRuntimeMcpServer2}=await Promise.resolve().then(()=>(init_server3(),server_exports)),{parseBrowserRuntimeKindFromArgs:parseBrowserRuntimeKindFromArgs2}=await Promise.resolve().then(()=>(init_officialBrowserMcp(),officialBrowserMcp_exports)),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports)),runtimeKind=parseBrowserRuntimeKindFromArgs2(serverRef.args);inProcessServer=createBrowserRuntimeMcpServer2(runtimeKind);let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,`In-process Browser Runtime MCP server started (${runtimeKind})`)}else if("command"in serverRef&&isComputerUseMCPServer3(name)){let{createComputerUseMcpServerForCli:createComputerUseMcpServerForCli2}=await Promise.resolve().then(()=>(init_mcpServer2(),mcpServer_exports2)),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports));inProcessServer=await createComputerUseMcpServerForCli2();let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,"In-process Computer Use MCP server started")}else if("command"in serverRef){let finalCommand=process.env.CLAUDE_CODE_SHELL_PREFIX||serverRef.command,finalArgs=process.env.CLAUDE_CODE_SHELL_PREFIX?[[serverRef.command,...serverRef.args].join(" ")]:serverRef.args;transport=new StdioClientTransport({command:finalCommand,args:finalArgs,env:buildStdioMcpEnv({base:subprocessEnv(),projectDir:getProjectRoot(),serverEnv:serverRef.env}),stderr:"pipe"})}else throw new Error("Unsupported MCP server configuration")}let stderrHandler,stderrOutput="";if("command"in serverRef){let stdioTransport=transport;stdioTransport.stderr&&(stderrHandler=__name(data=>{if(stderrOutput.length<64*1024*1024)try{stderrOutput+=data.toString()}catch{}},"stderrHandler"),stdioTransport.stderr.on("data",stderrHandler));let NON_PROTOCOL_BYTE_CAP=(()=>{let raw=parseInt(process.env.CLAVUE_MCP_STDIO_NON_PROTOCOL_CAP_MB||"",10);return(Number.isFinite(raw)&&raw>0?raw:16)*1024*1024})();if(NON_PROTOCOL_BYTE_CAP>0){let nonProtocolBytes=0,childStdout=stdioTransport._process?.stdout;if(childStdout){let onStdout=__name(chunk3=>{if(nonProtocolBytes+=typeof chunk3=="string"?Buffer.byteLength(chunk3):chunk3.length,nonProtocolBytes>NON_PROTOCOL_BYTE_CAP){logMCPDebug(name,`stdio stdout exceeded ${NON_PROTOCOL_BYTE_CAP} bytes \u2014 terminating to prevent unbounded memory growth`);try{childStdout.removeListener("data",onStdout)}catch{}transport.close?.()}},"onStdout");childStdout.on("data",onStdout)}}}let client2=new Client({name:"clavue",title:"Clavue",version:typeof MACRO<"u"?"11.3.12":"unknown",description:"Clavue coding assistant",websiteUrl:PRODUCT_URL},{capabilities:{roots:{},elicitation:{}}});if(serverRef.type==="http"&&logMCPDebug(name,"Client created, setting up request handler"),client2.setRequestHandler(ListRootsRequestSchema,async()=>(logMCPDebug(name,"Received ListRoots request from server"),{roots:[{uri:`file://${getOriginalCwd()}`}]})),connectionTimeoutMs!==getConnectionTimeoutMs()&&logMCPDebug(name,`Applying extended stdio startup timeout of ${connectionTimeoutMs}ms for package-manager-backed command`),logMCPDebug(name,`Starting connection with timeout of ${connectionTimeoutMs}ms`),serverRef.type==="http"){logMCPDebug(name,`Testing basic HTTP connectivity to ${serverRef.url}`);try{let testUrl=new URL(serverRef.url);logMCPDebug(name,`Parsed URL: host=${testUrl.hostname}, port=${testUrl.port||"default"}, protocol=${testUrl.protocol}`),(testUrl.hostname==="127.0.0.1"||testUrl.hostname==="localhost")&&logMCPDebug(name,`Using loopback address: ${testUrl.hostname}`)}catch(urlError){logMCPDebug(name,`Failed to parse URL: ${urlError}`)}}let connectPromise=client2.connect(transport),timeoutPromise=new Promise((_2,reject2)=>{let timeoutId=setTimeout(()=>{let elapsed=Date.now()-connectStartTime;logMCPDebug(name,`Connection timeout triggered after ${elapsed}ms (limit: ${connectionTimeoutMs}ms)`),inProcessServer&&inProcessServer.close?.().catch(()=>{}),transport.close().catch(()=>{}),reject2(new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(`MCP server "${name}" connection timed out after ${connectionTimeoutMs}ms`,"MCP connection timeout"))},connectionTimeoutMs);connectPromise.then(()=>{clearTimeout(timeoutId)},_error=>{clearTimeout(timeoutId)})});try{await Promise.race([connectPromise,timeoutPromise]),stderrOutput&&(logMCPError(name,`Server stderr: ${stderrOutput}`),stderrOutput="");let elapsed=Date.now()-connectStartTime;logMCPDebug(name,`Successfully connected (transport: ${serverRef.type||"stdio"}) in ${elapsed}ms`)}catch(error40){let elapsed=Date.now()-connectStartTime;if(serverRef.type==="sse"&&error40 instanceof Error){if(logMCPDebug(name,`SSE Connection failed after ${elapsed}ms: ${jsonStringify({url:serverRef.url,error:error40.message,errorType:error40.constructor.name,stack:error40.stack})}`),logMCPError(name,error40),error40 instanceof UnauthorizedError)return handleRemoteAuthFailure(name,serverRef,"sse")}else if(serverRef.type==="http"&&error40 instanceof Error){let errorObj=error40;if(logMCPDebug(name,`HTTP Connection failed after ${elapsed}ms: ${error40.message} (code: ${errorObj.code||"none"}, errno: ${errorObj.errno||"none"})`),logMCPError(name,error40),error40 instanceof UnauthorizedError)return handleRemoteAuthFailure(name,serverRef,"http")}else if(serverRef.type==="claudeai-proxy"&&error40 instanceof Error){if(logMCPDebug(name,`claude.ai proxy connection failed after ${elapsed}ms: ${error40.message}`),logMCPError(name,error40),error40.code===401)return handleRemoteAuthFailure(name,serverRef,"claudeai-proxy")}else(serverRef.type==="sse-ide"||serverRef.type==="ws-ide")&&logEvent("tengu_mcp_ide_server_connection_failed",{connectionDurationMs:elapsed});throw inProcessServer&&inProcessServer.close?.().catch(()=>{}),transport.close().catch(()=>{}),stderrOutput&&logMCPError(name,`Server stderr: ${stderrOutput}`),error40}let capabilities=client2.getServerCapabilities(),serverVersion=client2.getServerVersion(),rawInstructions=client2.getInstructions(),instructions=rawInstructions;if(rawInstructions&&rawInstructions.length>MAX_MCP_DESCRIPTION_LENGTH&&(instructions=rawInstructions.slice(0,MAX_MCP_DESCRIPTION_LENGTH)+"\u2026 [truncated]",logMCPDebug(name,`Server instructions truncated from ${rawInstructions.length} to ${MAX_MCP_DESCRIPTION_LENGTH} chars`)),logMCPDebug(name,`Connection established with capabilities: ${jsonStringify({hasTools:!!capabilities?.tools,hasPrompts:!!capabilities?.prompts,hasResources:!!capabilities?.resources,hasResourceSubscribe:!!capabilities?.resources?.subscribe,serverVersion:serverVersion||"unknown"})}`),logForDebugging(`[MCP] Server "${name}" connected with subscribe=${!!capabilities?.resources?.subscribe}`),client2.setRequestHandler(ElicitRequestSchema,async request=>(logMCPDebug(name,`Elicitation request received during initialization: ${jsonStringify(request)}`),{action:"cancel"})),serverRef.type==="sse-ide"||serverRef.type==="ws-ide"){let ideConnectionDurationMs=Date.now()-connectStartTime;logEvent("tengu_mcp_ide_server_connection_succeeded",{connectionDurationMs:ideConnectionDurationMs,serverVersion});try{maybeNotifyIDEConnected(client2)}catch(error40){logMCPError(name,`Failed to send ide_connected notification: ${error40}`)}}let connectionStartTime=Date.now(),hasErrorOccurred=!1,originalOnerror=client2.onerror,originalOnclose=client2.onclose,consecutiveConnectionErrors=0,MAX_ERRORS_BEFORE_RECONNECT=3,hasTriggeredClose=!1,closeTransportAndRejectPending=__name(reason=>{hasTriggeredClose||(hasTriggeredClose=!0,logMCPDebug(name,`Closing transport (${reason})`),client2.close().catch(e2=>{logMCPDebug(name,`Error during close: ${errorMessage(e2)}`)}))},"closeTransportAndRejectPending"),isTerminalConnectionError=__name(msg=>msg.includes("ECONNRESET")||msg.includes("ETIMEDOUT")||msg.includes("EPIPE")||msg.includes("EHOSTUNREACH")||msg.includes("ECONNREFUSED")||msg.includes("Body Timeout Error")||msg.includes("terminated")||msg.includes("SSE stream disconnected")||msg.includes("Failed to reconnect SSE stream"),"isTerminalConnectionError");client2.onerror=error40=>{let uptime=Date.now()-connectionStartTime;hasErrorOccurred=!0;let transportType=serverRef.type||"stdio";if(logMCPDebug(name,`${transportType.toUpperCase()} connection dropped after ${Math.floor(uptime/1e3)}s uptime`),error40.message&&(error40.message.includes("ECONNRESET")?logMCPDebug(name,"Connection reset - server may have crashed or restarted"):error40.message.includes("ETIMEDOUT")?logMCPDebug(name,"Connection timeout - network issue or server unresponsive"):error40.message.includes("ECONNREFUSED")?logMCPDebug(name,"Connection refused - server may be down"):error40.message.includes("EPIPE")?logMCPDebug(name,"Broken pipe - server closed connection unexpectedly"):error40.message.includes("EHOSTUNREACH")?logMCPDebug(name,"Host unreachable - network connectivity issue"):error40.message.includes("ESRCH")?logMCPDebug(name,"Process not found - stdio server process terminated"):error40.message.includes("spawn")?logMCPDebug(name,"Failed to spawn process - check command and permissions"):logMCPDebug(name,`Connection error: ${error40.message}`)),(transportType==="http"||transportType==="claudeai-proxy")&&isMcpSessionExpiredError(error40)){logMCPDebug(name,"MCP session expired (server returned 404 with session-not-found), triggering reconnection"),closeTransportAndRejectPending("session expired"),originalOnerror&&originalOnerror(error40);return}if(transportType==="sse"||transportType==="http"||transportType==="claudeai-proxy"){if(error40.message.includes("Maximum reconnection attempts")){closeTransportAndRejectPending("SSE reconnection exhausted"),originalOnerror&&originalOnerror(error40);return}isTerminalConnectionError(error40.message)?(consecutiveConnectionErrors++,logMCPDebug(name,`Terminal connection error ${consecutiveConnectionErrors}/${MAX_ERRORS_BEFORE_RECONNECT}`),consecutiveConnectionErrors>=MAX_ERRORS_BEFORE_RECONNECT&&(consecutiveConnectionErrors=0,closeTransportAndRejectPending("max consecutive terminal errors"))):consecutiveConnectionErrors=0}originalOnerror&&originalOnerror(error40)},client2.onclose=()=>{let uptime=Date.now()-connectionStartTime,transportType=serverRef.type??"unknown";logMCPDebug(name,`${transportType.toUpperCase()} connection closed after ${Math.floor(uptime/1e3)}s (${hasErrorOccurred?"with errors":"cleanly"})`);let key=getServerCacheKey(name,serverRef);clearMcpFetchCaches(name,{tools:fetchToolsForClient,resources:fetchResourcesForClient,resourceTemplates:fetchResourceTemplatesForClient,commands:fetchCommandsForClient,skills:null}),connectToServer.cache.delete(key),logMCPDebug(name,"Cleared connection cache for reconnection"),originalOnclose&&originalOnclose()};let cleanup=__name(async()=>{if(inProcessServer){try{await inProcessServer.close?.()}catch(error40){logMCPDebug(name,`Error closing in-process server: ${error40}`)}try{await client2.close()}catch(error40){logMCPDebug(name,`Error closing client: ${error40}`)}return}if(stderrHandler&&(serverRef.type==="stdio"||!serverRef.type)&&transport.stderr?.off("data",stderrHandler),serverRef.type==="stdio")try{let childPid=transport.pid;if(childPid){logMCPDebug(name,"Sending SIGINT to MCP server process");try{process.kill(childPid,"SIGINT")}catch(error40){logMCPDebug(name,`Error sending SIGINT: ${error40}`);return}await new Promise(async resolve64=>{let resolved=!1,checkInterval=setInterval(()=>{try{process.kill(childPid,0)}catch{resolved||(resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),logMCPDebug(name,"MCP server process exited cleanly"),resolve64())}},50),failsafeTimeout=setTimeout(()=>{resolved||(resolved=!0,clearInterval(checkInterval),logMCPDebug(name,"Cleanup timeout reached, stopping process monitoring"),resolve64())},600);try{if(await sleep2(100),!resolved){try{process.kill(childPid,0),logMCPDebug(name,"SIGINT failed, sending SIGTERM to MCP server process");try{process.kill(childPid,"SIGTERM")}catch(termError){logMCPDebug(name,`Error sending SIGTERM: ${termError}`),resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64();return}}catch{resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64();return}if(await sleep2(400),!resolved)try{process.kill(childPid,0),logMCPDebug(name,"SIGTERM failed, sending SIGKILL to MCP server process");try{process.kill(childPid,"SIGKILL")}catch(killError){logMCPDebug(name,`Error sending SIGKILL: ${killError}`)}}catch{resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64()}}resolved||(resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64())}catch{resolved||(resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64())}})}}catch(processError){logMCPDebug(name,`Error terminating process: ${processError}`)}try{await client2.close()}catch(error40){logMCPDebug(name,`Error closing client: ${error40}`)}},"cleanup"),cleanupUnregister=registerCleanup(cleanup),wrappedCleanup=__name(async()=>{cleanupUnregister?.(),await cleanup()},"wrappedCleanup"),connectionDurationMs=Date.now()-connectStartTime;return logEvent("tengu_mcp_server_connection_succeeded",{connectionDurationMs,transportType:serverRef.type??"stdio",totalServers:serverStats?.totalServers,stdioCount:serverStats?.stdioCount,sseCount:serverStats?.sseCount,httpCount:serverStats?.httpCount,sseIdeCount:serverStats?.sseIdeCount,wsIdeCount:serverStats?.wsIdeCount,...mcpBaseUrlAnalytics(serverRef)}),{name,client:client2,type:"connected",capabilities:capabilities??{},serverInfo:serverVersion,instructions,config:serverRef,cleanup:wrappedCleanup}}catch(error40){let connectionDurationMs=Date.now()-connectStartTime;return logEvent("tengu_mcp_server_connection_failed",{connectionDurationMs,totalServers:serverStats?.totalServers||1,stdioCount:serverStats?.stdioCount||(serverRef.type==="stdio"?1:0),sseCount:serverStats?.sseCount||(serverRef.type==="sse"?1:0),httpCount:serverStats?.httpCount||(serverRef.type==="http"?1:0),sseIdeCount:serverStats?.sseIdeCount||(serverRef.type==="sse-ide"?1:0),wsIdeCount:serverStats?.wsIdeCount||(serverRef.type==="ws-ide"?1:0),transportType:serverRef.type??"stdio",...mcpBaseUrlAnalytics(serverRef)}),logMCPDebug(name,`Connection failed after ${connectionDurationMs}ms: ${errorMessage(error40)}`),logMCPError(name,`Connection failed: ${errorMessage(error40)}`),inProcessServer&&inProcessServer.close?.().catch(()=>{}),{name,type:"failed",config:serverRef,error:errorMessage(error40)}}},getServerCacheKey);__name(clearServerCache,"clearServerCache");__name(ensureConnectedClient,"ensureConnectedClient");fetchToolsForClient=createFetchToolsForClient({ensureConnectedClient,callMCPToolWithUrlElicitationRetry}),fetchCommandsForClient=createFetchCommandsForClient({ensureConnectedClient,transformResultContent,zipObject:zipObject_default});__name(callIdeRpc,"callIdeRpc");__name(reconnectMcpServerImpl,"reconnectMcpServerImpl");__name(getMcpToolsCommandsAndResources,"getMcpToolsCommandsAndResources");prefetchAllMcpResources=createPrefetchAllMcpResources(getMcpToolsCommandsAndResources);__name(callMCPToolWithUrlElicitationRetry,"callMCPToolWithUrlElicitationRetry");__name(callMCPTool2,"callMCPTool");__name(setupSdkMcpClients,"setupSdkMcpClients")}});import{createHash as createHash25}from"crypto";function filterSwarmFieldsFromSchema(toolName5,schema){let fieldsToRemove=SWARM_FIELDS_BY_TOOL[toolName5];if(!fieldsToRemove||fieldsToRemove.length===0)return schema;let filtered={...schema},props=filtered.properties;if(props&&typeof props=="object"){let filteredProps={...props};for(let field of fieldsToRemove)delete filteredProps[field];filtered.properties=filteredProps}return filtered}async function toolToAPISchema(tool,options){let cacheKey="inputJSONSchema"in tool&&tool.inputJSONSchema?`${tool.name}:${jsonStringify(tool.inputJSONSchema)}`:tool.name,cache5=getToolSchemaCache(),strictToolsEnabled=checkStatsigFeatureGate_CACHED_MAY_BE_STALE("tengu_tool_pear"),base=cache5.get(cacheKey);if(!base){let input_schema=normalizeToolInputJsonSchema("inputJSONSchema"in tool&&tool.inputJSONSchema?tool.inputJSONSchema:zodToJsonSchema2(tool.inputSchema));isAgentSwarmsEnabled()||(input_schema=filterSwarmFieldsFromSchema(tool.name,input_schema)),base={name:tool.name,description:await tool.prompt({getToolPermissionContext:options.getToolPermissionContext,tools:options.tools,agents:options.agents,allowedAgentTypes:options.allowedAgentTypes}),input_schema},cache5.set(cacheKey,base)}let useStrict=strictToolsEnabled&&tool.strict===!0&&options.model!==void 0&&modelSupportsStructuredOutputs(options.model),useEagerInputStreaming=getAPIProvider()==="firstParty"&&isFirstPartyAnthropicBaseUrl()&&(getFeatureValue_CACHED_MAY_BE_STALE("tengu_fgts",!1)||isEnvTruthy2(process.env.CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING)),schema={name:base.name,description:base.description,input_schema:base.input_schema,...useStrict&&{strict:!0},...useEagerInputStreaming&&{eager_input_streaming:!0}};if(options.deferLoading&&(schema.defer_loading=!0),options.cacheControl&&(schema.cache_control=options.cacheControl),isEnvTruthy2(process.env.CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS)){let allowed=new Set(["name","description","input_schema","cache_control"]),stripped=Object.keys(schema).filter(k2=>!allowed.has(k2));if(stripped.length>0)return logStripOnce(stripped),{name:schema.name,description:schema.description,input_schema:schema.input_schema,...schema.cache_control&&{cache_control:schema.cache_control}}}return schema}function logStripOnce(stripped){loggedStrip||(loggedStrip=!0,logForDebugging(`[betas] Stripped from tool schemas: [${stripped.join(", ")}] (CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1)`))}function logAPIPrefix(systemPrompt){let[firstSyspromptBlock]=splitSysPromptPrefix(systemPrompt),firstSystemPrompt=firstSyspromptBlock?.text;logEvent("tengu_sysprompt_block",{snippet:firstSystemPrompt?.slice(0,20),length:firstSystemPrompt?.length??0,hash:firstSystemPrompt?createHash25("sha256").update(firstSystemPrompt).digest("hex"):""})}function splitSysPromptPrefix(systemPrompt,options){let useGlobalCacheFeature=shouldUseGlobalCacheScope();if(useGlobalCacheFeature&&options?.skipGlobalCacheForSystemPrompt){logEvent("tengu_sysprompt_using_tool_based_cache",{promptBlockCount:systemPrompt.length});let systemPromptPrefix2,rest3=[];for(let prompt of systemPrompt)prompt&&prompt!==SYSTEM_PROMPT_DYNAMIC_BOUNDARY&&(CLI_SYSPROMPT_PREFIXES.has(prompt)?systemPromptPrefix2=prompt:rest3.push(prompt));let result3=[];systemPromptPrefix2&&result3.push({text:systemPromptPrefix2,cacheScope:"org"});let restJoined2=rest3.join(`
5596
+ `),!result2.ok)}var init_server3=__esm({"src/services/browser/mcp/server.ts"(){init_server2();init_types3();init_debug();init_errors2();init_officialBrowserMcp();init_batch();init_byRef();init_backendSelector();init_raw();init_semantic();init_sessionState();init_navigateAllowlist();init_toolDefs();__name(textResult,"textResult");__name(createBrowserRuntimeMcpServer,"createBrowserRuntimeMcpServer");__name(handleStatus,"handleStatus");__name(ensureClient,"ensureClient");__name(ensureActiveSession,"ensureActiveSession");__name(handleTabs,"handleTabs");__name(handleNavigate,"handleNavigate");__name(handleSnapshot,"handleSnapshot");__name(handleScreenshot,"handleScreenshot");__name(handleClick,"handleClick");__name(handleType,"handleType");__name(handlePress,"handlePress");__name(handleAct,"handleAct")}});function isUserFacingPath(path36,homeDir){if(PATH_ALLOWLIST.some(root2=>path36.startsWith(root2)))return!0;if(homeDir){let userApps=homeDir.endsWith("/")?`${homeDir}Applications/`:`${homeDir}/Applications/`;if(path36.startsWith(userApps))return!0}return!1}function isNoisyName(name){return NAME_PATTERN_BLOCKLIST.some(re2=>re2.test(name))}function sanitizeCore(raw,applyCharFilter){let seen=new Set;return raw.map(name=>name.trim()).filter(trimmed=>!trimmed||trimmed.length>APP_NAME_MAX_LEN||applyCharFilter&&!APP_NAME_ALLOWED.test(trimmed)||seen.has(trimmed)?!1:(seen.add(trimmed),!0)).sort((a2,b3)=>a2.localeCompare(b3))}function sanitizeAppNames(raw){let filtered=sanitizeCore(raw,!0);return filtered.length<=APP_NAME_MAX_COUNT?filtered:[...filtered.slice(0,APP_NAME_MAX_COUNT),`\u2026 and ${filtered.length-APP_NAME_MAX_COUNT} more`]}function sanitizeTrustedNames(raw){return sanitizeCore(raw,!1)}function filterAppsForDescription(installed2,homeDir){let{alwaysKept,rest:rest2}=installed2.reduce((acc,app)=>(ALWAYS_KEEP_BUNDLE_IDS.has(app.bundleId)?acc.alwaysKept.push(app.displayName):isUserFacingPath(app.path,homeDir)&&!isNoisyName(app.displayName)&&acc.rest.push(app.displayName),acc),{alwaysKept:[],rest:[]}),sanitizedAlways=sanitizeTrustedNames(alwaysKept),alwaysSet=new Set(sanitizedAlways);return[...sanitizedAlways,...sanitizeAppNames(rest2).filter(n4=>!alwaysSet.has(n4))]}var PATH_ALLOWLIST,NAME_PATTERN_BLOCKLIST,ALWAYS_KEEP_BUNDLE_IDS,APP_NAME_ALLOWED,APP_NAME_MAX_LEN,APP_NAME_MAX_COUNT,init_appNames=__esm({"src/utils/computerUse/appNames.ts"(){PATH_ALLOWLIST=["/Applications/","/System/Applications/"],NAME_PATTERN_BLOCKLIST=[/Helper(?:$|\s\()/,/Agent(?:$|\s\()/,/Service(?:$|\s\()/,/Uninstaller(?:$|\s\()/,/Updater(?:$|\s\()/,/^\./],ALWAYS_KEEP_BUNDLE_IDS=new Set(["com.apple.Safari","com.google.Chrome","com.microsoft.edgemac","org.mozilla.firefox","company.thebrowser.Browser","com.tinyspeck.slackmacgap","us.zoom.xos","com.microsoft.teams2","com.microsoft.teams","com.apple.MobileSMS","com.apple.mail","com.microsoft.Word","com.microsoft.Excel","com.microsoft.Powerpoint","com.microsoft.Outlook","com.apple.iWork.Pages","com.apple.iWork.Numbers","com.apple.iWork.Keynote","com.google.GoogleDocs","notion.id","com.apple.Notes","md.obsidian","com.linear","com.figma.Desktop","com.microsoft.VSCode","com.apple.Terminal","com.googlecode.iterm2","com.github.GitHubDesktop","com.apple.finder","com.apple.iCal","com.apple.systempreferences"]),APP_NAME_ALLOWED=/^[\p{L}\p{M}\p{N}_ .&'()+-]+$/u,APP_NAME_MAX_LEN=40,APP_NAME_MAX_COUNT=50;__name(isUserFacingPath,"isUserFacingPath");__name(isNoisyName,"isNoisyName");__name(sanitizeCore,"sanitizeCore");__name(sanitizeAppNames,"sanitizeAppNames");__name(sanitizeTrustedNames,"sanitizeTrustedNames");__name(filterAppsForDescription,"filterAppsForDescription")}});function buildComputerUseTools(installedAppNames2){let appsHint=installedAppNames2?.length?` Installed applications include: ${installedAppNames2.join(", ")}.`:"";return[{name:"computer_status",description:"Diagnose local Computer Use readiness: macOS Accessibility, Screen Recording, displays, running apps, and frontmost app. Read-only and does not require app access. Call first when starting desktop control.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"request_access",description:"Request session-scoped permission to inspect and control named Mac applications. Required before screenshots, UI inspection, launch, click, typing, or key actions. Prefer shell/APIs when the task is not GUI."+appsHint,inputSchema:objectSchema({apps:{type:"array",minItems:1,maxItems:20,items:{type:"string"},description:"Application display names or bundle identifiers."},reason:{type:"string",maxLength:300},clipboard_read:{type:"boolean"},clipboard_write:{type:"boolean"},system_key_combos:{type:"boolean"}},["apps"])},{name:"list_granted_applications",description:"List applications and optional capabilities granted for this session.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"open_application",description:"Launch or activate a previously granted Mac application by bundle ID. Then inspect_ui before clicking.",inputSchema:objectSchema({bundle_id:bundleId},["bundle_id"])},{name:"screenshot",description:`Capture the full target display after hiding ungranted applications. Returns a thrift JPEG (long edge ~${1280}px; override CLAVUE_CU_SCREENSHOT_MAX). Last-resort eyes \u2014 prefer zoom (window/region) for visual verify, and inspect_ui/find_label for targeting. Not the default control path. Blocked while a password-manager-like app is frontmost unless CLAVUE_CU_ALLOW_SENSITIVE=1 (pixel leak).`,inputSchema:objectSchema({display_id:{type:"number"}}),annotations:{readOnlyHint:!0}},{name:"zoom",description:`Capture a rectangular screen region as a thrift JPEG (long edge cap ~${1280}px). Prefer zoom of the active window/control over full-display screenshot. Prefer inspect_ui/find_label for labeled controls.`,inputSchema:objectSchema({region:{type:"array",items:{type:"number"},minItems:4,maxItems:4,description:"[x, y, width, height] in logical screen pixels."}},["region"]),annotations:{readOnlyHint:!0}},{name:"inspect_ui",description:COMPUTER_USE_AX_PRIMARY_HINT+" Returns compact elements with paths, roles, labels, values, frames and actions. Re-inspect after UI changes because paths may become stale. Prefer over screenshot for targeting.",inputSchema:objectSchema({bundle_id:bundleId,max_depth:{type:"number",minimum:1,maximum:12,default:6},max_elements:{type:"number",minimum:1,maximum:500,default:120},include_menu_bar:{type:"boolean",default:!1,description:"Include the usually large macOS menu tree only when needed."}},["bundle_id"]),annotations:{readOnlyHint:!0}},{name:"ui_action",description:COMPUTER_USE_AX_PRIMARY_HINT+" Act on an element from the latest inspect_ui (press/focus/set_value). Prefer over pixel clicks. After success, re-inspect_ui (or screenshot) before claiming the UI changed. risk other than none requires user confirmation.",inputSchema:objectSchema({bundle_id:bundleId,path:{type:"string",description:"Element path from the latest inspect_ui result."},action:{type:"string",enum:["press","confirm","focus","set_value","increment","decrement"]},value:{type:"string"},intent:{type:"string",maxLength:200,description:"What this action is expected to do in the application."},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"],description:"User-visible side-effect category. Use none only when side-effect free. delete/communicate/financial/install_or_settings/sensitive_data require confirmation."}},["bundle_id","path","action","intent","risk"])},{name:"find_label",description:COMPUTER_USE_AX_PRIMARY_HINT+" Find UI elements by visible label (title/description/identifier/value) via Accessibility. Read-only. Prefer this or click_text before coordinate clicks.",inputSchema:objectSchema({bundle_id:bundleId,query:{type:"string",minLength:1,maxLength:200,description:"Label text to search (substring match unless exact=true)."},exact:{type:"boolean",default:!1,description:"Require full-string match on a label field."},role:{type:"string",description:"Optional AX role filter (e.g. AXButton)."},max_depth:{type:"number",minimum:1,maximum:12,default:6},max_elements:{type:"number",minimum:1,maximum:500,default:120},limit:{type:"number",minimum:1,maximum:50,default:12}},["bundle_id","query"]),annotations:{readOnlyHint:!0}},{name:"click_text",description:COMPUTER_USE_AX_PRIMARY_HINT+" Find by label then press (AXPress) or click frame center. Prefer over left_click. After success, re-inspect or screenshot before claiming the UI changed. risk other than none requires confirmation.",inputSchema:objectSchema({bundle_id:bundleId,query:{type:"string",minLength:1,maxLength:200,description:"Label text to click (e.g. Save, \u597D, Format)."},exact:{type:"boolean",default:!1,description:"Require full-string match on a label field."},role:{type:"string",description:"Optional AX role filter (e.g. AXButton)."},intent:{type:"string",maxLength:200,description:"What this click is expected to do."},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"],description:"User-visible side-effect category. none only when side-effect free."},max_depth:{type:"number",minimum:1,maximum:12,default:6},max_elements:{type:"number",minimum:1,maximum:500,default:120}},["bundle_id","query","intent","risk"])},{name:"left_click",description:"Left-click a point after verifying the frontmost/under-point app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"right_click",description:"Right-click a point after verifying the target app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"double_click",description:"Double-click a point after verifying the target app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"triple_click",description:"Triple-click a point after verifying the target app is granted. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["coordinate","intent","risk"])},{name:"mouse_move",description:"Move the pointer without clicking. Prefer inspect_ui/ui_action for real control changes.",inputSchema:objectSchema({coordinate},["coordinate"])},{name:"left_click_drag",description:"Drag from start_coordinate to coordinate. "+COMPUTER_USE_PIXEL_FALLBACK_HINT,inputSchema:objectSchema({start_coordinate:coordinate,coordinate,intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["start_coordinate","coordinate","intent","risk"])},{name:"scroll",description:"Scroll at the current pointer or an optional coordinate. Prefer ui_action on scrollable AX elements when available.",inputSchema:objectSchema({direction:{type:"string",enum:["up","down","left","right"]},amount:{type:"number",minimum:1,maximum:20,default:3},coordinate},["direction"])},{name:"type",description:"Type Unicode text into the granted frontmost application. Prefer focus/set_value via ui_action when a field path exists. Re-inspect after typing if the UI should change. risk other than none requires confirmation.",inputSchema:objectSchema({text:{type:"string",maxLength:1e5},intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["text","intent","risk"])},{name:"key",description:COMPUTER_USE_KEYBOARD_FIRST_HINT+" Press a key or chord such as return, escape, command+s, command+a, control+tab. Prefer shortcuts over pixel clicks when possible. System-wide chords require the system_key_combos grant. Do not spam Space/media keys as a retry loop. risk other than none requires confirmation.",inputSchema:objectSchema({text:{type:"string"},repeat:{type:"number",minimum:1,maximum:100,default:1},intent:{type:"string",maxLength:200},risk:{type:"string",enum:["none","delete","communicate","financial","install_or_settings","sensitive_data","other"]}},["text","intent","risk"])},{name:"wait",description:"Wait briefly for an app/UI transition, then continue diagnosis.",inputSchema:objectSchema({duration:{type:"number",minimum:0,maximum:30}},["duration"]),annotations:{readOnlyHint:!0}},{name:"cursor_position",description:"Read the current pointer position.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"read_clipboard",description:"Read plain text from the clipboard when clipboard_read was granted.",inputSchema:objectSchema({}),annotations:{readOnlyHint:!0}},{name:"write_clipboard",description:"Write plain text to the clipboard when clipboard_write was granted.",inputSchema:objectSchema({text:{type:"string",maxLength:1e5}},["text"])}]}var objectSchema,coordinate,bundleId,init_tools3=__esm({"src/utils/computerUse/tools.ts"(){init_efficiencyLaw();objectSchema=__name((properties,required2=[])=>({type:"object",properties,...required2.length>0?{required:required2}:{},additionalProperties:!1}),"objectSchema"),coordinate={type:"array",items:{type:"number"},minItems:2,maxItems:2,description:"[x, y] in logical screen pixels from the global top-left."},bundleId={type:"string",description:"Exact macOS application bundle identifier."};__name(buildComputerUseTools,"buildComputerUseTools")}});var mcpServer_exports2={};__export(mcpServer_exports2,{createComputerUseMcpServerForCli:()=>createComputerUseMcpServerForCli,runComputerUseMcpServer:()=>runComputerUseMcpServer});import{homedir as homedir24}from"os";async function installedAppNames(){let timer2,timeout=new Promise(resolve64=>{timer2=globalThis.setTimeout(resolve64,APP_ENUM_TIMEOUT_MS)}),apps=await Promise.race([listComputerUseInstalledApps().catch(()=>{}),timeout]).finally(()=>globalThis.clearTimeout(timer2));return apps?filterAppsForDescription(apps,homedir24()):void 0}async function createComputerUseMcpServerForCli(){let server2=new Server({name:"clavue-computer-use",version:"1.0.0"},{capabilities:{tools:{}},instructions:getComputerUseEfficiencyPolicyText()}),tools=buildComputerUseTools(await installedAppNames());return server2.setRequestHandler(ListToolsRequestSchema,async()=>({tools})),server2.setRequestHandler(CallToolRequestSchema,async()=>({isError:!0,content:[{type:"text",text:"Computer Use actions require an interactive Clavue session."}]})),server2}async function runComputerUseMcpServer(){enableConfigs(),initializeAnalyticsSink();let server2=await createComputerUseMcpServerForCli(),transport=new StdioServerTransport,exiting=!1,shutdownAndExit=__name(async()=>{exiting||(exiting=!0,await Promise.all([shutdown1PEventLogging(),shutdownDatadog()]),process.exit(0))},"shutdownAndExit");process.stdin.on("end",()=>{shutdownAndExit()}),process.stdin.on("error",()=>{shutdownAndExit()}),await server2.connect(transport)}var APP_ENUM_TIMEOUT_MS,init_mcpServer2=__esm({"src/utils/computerUse/mcpServer.ts"(){init_server2();init_stdio4();init_types3();init_datadog();init_firstPartyEventLogger();init_sink();init_config11();init_appNames();init_efficiencyLaw();init_executor();init_tools3();APP_ENUM_TIMEOUT_MS=1e3;__name(installedAppNames,"installedAppNames");__name(createComputerUseMcpServerForCli,"createComputerUseMcpServerForCli");__name(runComputerUseMcpServer,"runComputerUseMcpServer")}});var client_exports3={};__export(client_exports3,{MAX_MCP_DESCRIPTION_LENGTH:()=>MAX_MCP_DESCRIPTION_LENGTH,MCP_FETCH_CACHE_SIZE:()=>MCP_FETCH_CACHE_SIZE,MCP_REQUEST_TIMEOUT_MS:()=>MCP_REQUEST_TIMEOUT_MS,McpAuthError:()=>McpAuthError,McpSessionExpiredError:()=>McpSessionExpiredError,McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS:()=>McpToolCallError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS,areMcpConfigsEqual:()=>areMcpConfigsEqual,callIdeRpc:()=>callIdeRpc,callMCPToolWithUrlElicitationRetry:()=>callMCPToolWithUrlElicitationRetry,clearMcpAuthCache:()=>clearMcpAuthCache,clearServerCache:()=>clearServerCache,connectToServer:()=>connectToServer,createClaudeAiProxyFetch:()=>createClaudeAiProxyFetch,createFetchCommandsForClient:()=>createFetchCommandsForClient,createNodeWsClient:()=>createNodeWsClient,ensureConnectedClient:()=>ensureConnectedClient,fetchCommandsForClient:()=>fetchCommandsForClient,fetchResourceTemplatesForClient:()=>fetchResourceTemplatesForClient,fetchResourcesAndTemplatesForClient:()=>fetchResourcesAndTemplatesForClient,fetchResourcesForClient:()=>fetchResourcesForClient,fetchToolsForClient:()=>fetchToolsForClient,getConnectionTimeoutMs:()=>getConnectionTimeoutMs,getMcpServerConnectionBatchSize:()=>getMcpServerConnectionBatchSize,getMcpToolTimeoutMs:()=>getMcpToolTimeoutMs,getMcpToolsCommandsAndResources:()=>getMcpToolsCommandsAndResources,getServerCacheKey:()=>getServerCacheKey,inferCompactSchema:()=>inferCompactSchema,isMcpSessionExpiredError:()=>isMcpSessionExpiredError,mcpToolInputToAutoClassifierInput:()=>mcpToolInputToAutoClassifierInput,prefetchAllMcpResources:()=>prefetchAllMcpResources,processBatched:()=>processBatched,processMCPResult:()=>processMCPResult,reconnectMcpServerImpl:()=>reconnectMcpServerImpl,setupSdkMcpClients:()=>setupSdkMcpClients,transformMCPResult:()=>transformMCPResult,transformResultContent:()=>transformResultContent,wrapFetchWithTimeout:()=>wrapFetchWithTimeout});async function clearServerCache(name,serverRef){let key=getServerCacheKey(name,serverRef);try{let wrappedClient=await connectToServer(name,serverRef);wrappedClient.type==="connected"&&await wrappedClient.cleanup()}catch{}connectToServer.cache.delete(key),clearMcpFetchCaches(name,{tools:fetchToolsForClient,resources:fetchResourcesForClient,resourceTemplates:fetchResourceTemplatesForClient,commands:fetchCommandsForClient,skills:null})}async function ensureConnectedClient(client2){if(client2.config.type==="sdk")return client2;let connectedClient=await connectToServer(client2.name,client2.config);if(connectedClient.type!=="connected")throw new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(`MCP server "${client2.name}" is not connected`,"MCP server not connected");return connectedClient}async function callIdeRpc(toolName5,args,client2){return(await callMCPTool2({client:client2,tool:toolName5,args,signal:createAbortController().signal})).content}async function reconnectMcpServerImpl(name,config3){try{clearKeychainCache(),await clearServerCache(name,config3);let client2=await connectToServer(name,config3);if(client2.type!=="connected")return{client:client2,tools:[],commands:[]};config3.type==="claudeai-proxy"&&markClaudeAiMcpConnected(name);let{supportsResources,tools,commands,resources}=await fetchConnectedClientState(client2,{fetchToolsForClient,fetchCommandsForClient,fetchResourcesForClient,fetchMcpSkillsForClient:fetchMcpSkillsForClient2}),resourceTools=[];return supportsResources&&([ListMcpResourcesTool,ReadMcpResourceTool].some(tool=>tools.some(t8=>toolMatchesName(t8,tool.name)))||resourceTools.push(ListMcpResourcesTool,ReadMcpResourceTool)),{client:client2,tools:[...tools,...resourceTools],commands,resources:resources.length>0?resources:void 0}}catch(error40){return logMCPError(name,`Error during reconnection: ${errorMessage(error40)}`),{client:{name,type:"failed",config:config3},tools:[],commands:[]}}}async function getMcpToolsCommandsAndResources(onConnectionAttempt,mcpConfigs){let resourceToolsAdded=!1,allConfigEntries=Object.entries(mcpConfigs??(await getAllMcpConfigs()).servers),configEntries=[];for(let entry of allConfigEntries)isMcpServerDisabled(entry[0])?onConnectionAttempt({client:{name:entry[0],type:"disabled",config:entry[1]},tools:[],commands:[]}):configEntries.push(entry);let totalServers=configEntries.length,stdioCount=count2(configEntries,([_2,c4])=>c4.type==="stdio"),sseCount=count2(configEntries,([_2,c4])=>c4.type==="sse"),httpCount=count2(configEntries,([_2,c4])=>c4.type==="http"),sseIdeCount=count2(configEntries,([_2,c4])=>c4.type==="sse-ide"),wsIdeCount=count2(configEntries,([_2,c4])=>c4.type==="ws-ide"),localServers=configEntries.filter(([_2,config3])=>isLocalMcpServer(config3)),remoteServers=configEntries.filter(([_2,config3])=>!isLocalMcpServer(config3)),serverStats={totalServers,stdioCount,sseCount,httpCount,sseIdeCount,wsIdeCount},processServer=__name(async([name,config3])=>{try{if(isMcpServerDisabled(name)){onConnectionAttempt({client:{name,type:"disabled",config:config3},tools:[],commands:[]});return}let knownConfigIssue="command"in config3?getKnownMcpConfigIssue(config3):null;if(knownConfigIssue){let issueMessage=`${knownConfigIssue.message} ${knownConfigIssue.suggestion}`;logMCPError(name,issueMessage),onConnectionAttempt({client:{name,type:"failed",config:config3,error:issueMessage},tools:[],commands:[]});return}if((config3.type==="claudeai-proxy"||config3.type==="http"||config3.type==="sse")&&(await isMcpAuthCached(name)||(config3.type==="http"||config3.type==="sse")&&hasMcpDiscoveryButNoToken(name,config3))){logMCPDebug(name,"Skipping connection (cached needs-auth)"),onConnectionAttempt({client:{name,type:"needs-auth",config:config3},tools:[createMcpAuthTool(name,config3)],commands:[]});return}let client2=await connectToServer(name,config3,serverStats);if(client2.type!=="connected"){onConnectionAttempt({client:client2,tools:client2.type==="needs-auth"?[createMcpAuthTool(name,config3)]:[],commands:[]});return}config3.type==="claudeai-proxy"&&markClaudeAiMcpConnected(name);let{supportsResources,tools,commands,resources}=await fetchConnectedClientState(client2,{fetchToolsForClient,fetchCommandsForClient,fetchResourcesForClient,fetchMcpSkillsForClient:fetchMcpSkillsForClient2}),resourceTools=[];supportsResources&&!resourceToolsAdded&&(resourceToolsAdded=!0,resourceTools.push(ListMcpResourcesTool,ReadMcpResourceTool)),onConnectionAttempt({client:client2,tools:[...tools,...resourceTools],commands,resources:resources.length>0?resources:void 0})}catch(error40){logMCPError(name,`Error fetching tools/commands/resources: ${errorMessage(error40)}`),onConnectionAttempt({client:{name,type:"failed",config:config3},tools:[],commands:[]})}},"processServer");await Promise.all([processBatched(localServers,getMcpServerConnectionBatchSize(),processServer),processBatched(remoteServers,getRemoteMcpServerConnectionBatchSize(),processServer)])}async function callMCPToolWithUrlElicitationRetry({client:connectedClient,clientConnection,tool,args,meta,signal,setAppState,onProgress,callToolFn=callMCPTool2,handleElicitation}){for(let attempt2=0;;attempt2++)try{return await callToolFn({client:connectedClient,tool,args,meta,signal,onProgress})}catch(error40){if(!(error40 instanceof McpError)||error40.code!==ErrorCode.UrlElicitationRequired||attempt2>=3)throw error40;let elicitations=getValidUrlElicitations(error40.data),serverName=getServerNameForElicitation(clientConnection);if(elicitations.length===0)throw logMCPDebug(serverName,`Tool '${tool}' returned -32042 but no valid elicitations in error data`),error40;logMCPDebug(serverName,`Tool '${tool}' requires URL elicitation (error -32042, attempt ${attempt2+1}), processing ${elicitations.length} elicitation(s)`);for(let elicitation of elicitations){let{elicitationId}=elicitation,hookResponse=await runElicitationHooks(serverName,elicitation,signal);if(hookResponse){if(logMCPDebug(serverName,`URL elicitation ${elicitationId} resolved by hook: ${jsonStringify(hookResponse)}`),hookResponse.action!=="accept")return{content:formatUrlElicitationBlockedMessage(tool,hookResponse.action,"hook")};continue}let userResult;handleElicitation?userResult=await handleElicitation(serverName,elicitation,signal):userResult=await queueUrlElicitation({serverName,elicitation,signal,setAppState});let finalResult=await runElicitationResultHooks(serverName,userResult,signal,"url",elicitationId);if(finalResult.action!=="accept")return logMCPDebug(serverName,`User ${finalResult.action==="decline"?"declined":finalResult.action+"ed"} URL elicitation ${elicitationId}`),{content:formatUrlElicitationBlockedMessage(tool,finalResult.action,"user")};logMCPDebug(serverName,`Elicitation ${elicitationId} completed, retrying tool call`)}}}function callMCPTool2(args){return callMCPTool(args,{clearServerCache})}async function setupSdkMcpClients(sdkMcpConfigs,sendMcpMessage){let clients=[],tools=[],results=await Promise.allSettled(Object.entries(sdkMcpConfigs).map(async([name,config3])=>{let transport=new SdkControlClientTransport(name,sendMcpMessage),client2=new Client({name:"clavue",title:"Clavue",version:typeof MACRO<"u"?"11.3.13":"unknown",description:"Clavue coding assistant",websiteUrl:PRODUCT_URL},{capabilities:{}});try{await client2.connect(transport);let capabilities=client2.getServerCapabilities(),connectedClient={type:"connected",name,capabilities:capabilities||{},client:client2,config:{...config3,scope:"dynamic"},cleanup:__name(async()=>{await client2.close()},"cleanup")},serverTools=[];if(capabilities?.tools){let sdkTools=await fetchToolsForClient(connectedClient);serverTools.push(...sdkTools)}return{client:connectedClient,tools:serverTools}}catch(error40){return logMCPError(name,`Failed to connect SDK MCP server: ${error40}`),{client:{type:"failed",name,config:{...config3,scope:"user"}},tools:[]}}}));for(let result2 of results)result2.status==="fulfilled"&&(clients.push(result2.value.client),tools.push(...result2.value.tools));return{clients,tools}}var fetchMcpSkillsForClient2,isComputerUseMCPServer3,connectToServer,fetchToolsForClient,fetchCommandsForClient,prefetchAllMcpResources,init_client7=__esm({"src/services/mcp/client.ts"(){init_featureFlags();init_auth6();init_auth3();init_client4();init_sse();init_stdio3();init_streamableHttp();init_transport();init_types3();init_mapValues();init_memoize();init_zipObject();init_state();init_oauth();init_product();init_Tool();init_ListMcpResourcesTool();init_McpAuthTool();init_ReadMcpResourceTool();init_abortController();init_array3();init_cleanupRegistry();init_debug();init_errors2();init_http2();init_ide();init_log3();init_mcpWebSocketTransport();init_mtls();init_proxy();init_sessionIngressAuth();init_subprocessEnv();init_analytics();init_elicitationHandler();init_utils10();init_macOsKeychainHelpers();init_sleep2();init_authCache();init_connectionUtils();init_remoteAuth();init_commandFetcher();init_connectedClientState();init_prefetchResources();init_resourceFetcher();init_toolFetcher();init_resultTransform();init_toolCaller();init_urlElicitation();init_authCache();init_connectionUtils();init_remoteAuth();init_commandFetcher();init_resourceFetcher();init_utils10();init_resultTransform();init_auth5();init_claudeai();init_config8();init_headersHelper();init_runtimeHealth();init_SdkControlTransport();init_common2();init_slowOperations();fetchMcpSkillsForClient2=feature("MCP_SKILLS")?(init_mcpSkills(),__toCommonJS(mcpSkills_exports)).fetchMcpSkillsForClient??null:null,isComputerUseMCPServer3=(init_common3(),__toCommonJS(common_exports)).isComputerUseMCPServer,connectToServer=memoize_default(async(name,serverRef,serverStats)=>{let connectStartTime=Date.now(),connectionTimeoutMs=getConnectionTimeoutMs(serverRef),inProcessServer;try{let transport,sessionIngressToken=getSessionIngressAuthToken();if(serverRef.type==="sse"){let authProvider=new ClaudeAuthProvider(name,serverRef),combinedHeaders=await getMcpServerHeaders(name,serverRef),transportOptions={authProvider,fetch:wrapFetchWithTimeout(wrapFetchWithStepUpDetection(createFetchWithInit(),authProvider)),requestInit:{headers:{"User-Agent":getMCPUserAgent(),...combinedHeaders}}};transportOptions.eventSourceInit={fetch:__name(async(url3,init2)=>{let authHeaders2={},tokens=await authProvider.tokens();tokens&&(authHeaders2.Authorization=`Bearer ${tokens.access_token}`);let proxyOptions=getProxyFetchOptions();return fetch(url3,{...init2,...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),...authHeaders2,...init2?.headers,...combinedHeaders,Accept:"text/event-stream"}})},"fetch")},transport=new SSEClientTransport(new URL(serverRef.url),transportOptions),logMCPDebug(name,"SSE transport initialized, awaiting connection")}else if(serverRef.type==="sse-ide"){logMCPDebug(name,`Setting up SSE-IDE transport to ${serverRef.url}`);let proxyOptions=getProxyFetchOptions(),transportOptions=proxyOptions.dispatcher?{eventSourceInit:{fetch:__name(async(url3,init2)=>fetch(url3,{...init2,...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),...init2?.headers}}),"fetch")}}:{};transport=new SSEClientTransport(new URL(serverRef.url),Object.keys(transportOptions).length>0?transportOptions:void 0)}else if(serverRef.type==="ws-ide"){let tlsOptions=getWebSocketTLSOptions(),wsHeaders={"User-Agent":getMCPUserAgent(),...serverRef.authToken&&{"X-Claude-Code-Ide-Authorization":serverRef.authToken}},wsClient;typeof Bun<"u"?wsClient=new globalThis.WebSocket(serverRef.url,{protocols:["mcp"],headers:wsHeaders,proxy:getWebSocketProxyUrl(serverRef.url),tls:tlsOptions||void 0}):wsClient=await createNodeWsClient(serverRef.url,{headers:wsHeaders,agent:getWebSocketProxyAgent(serverRef.url),...tlsOptions||{}}),transport=new WebSocketTransport(wsClient)}else if(serverRef.type==="ws"){logMCPDebug(name,`Initializing WebSocket transport to ${serverRef.url}`);let combinedHeaders=await getMcpServerHeaders(name,serverRef),tlsOptions=getWebSocketTLSOptions(),wsHeaders={"User-Agent":getMCPUserAgent(),...sessionIngressToken&&{Authorization:`Bearer ${sessionIngressToken}`},...combinedHeaders},wsHeadersForLogging=mapValues_default(wsHeaders,(value,key)=>key.toLowerCase()==="authorization"?"[REDACTED]":value);logMCPDebug(name,`WebSocket transport options: ${jsonStringify({url:serverRef.url,headers:wsHeadersForLogging,hasSessionAuth:!!sessionIngressToken})}`);let wsClient;typeof Bun<"u"?wsClient=new globalThis.WebSocket(serverRef.url,{protocols:["mcp"],headers:wsHeaders,proxy:getWebSocketProxyUrl(serverRef.url),tls:tlsOptions||void 0}):wsClient=await createNodeWsClient(serverRef.url,{headers:wsHeaders,agent:getWebSocketProxyAgent(serverRef.url),...tlsOptions||{}}),transport=new WebSocketTransport(wsClient)}else if(serverRef.type==="http"){logMCPDebug(name,`Initializing HTTP transport to ${serverRef.url}`),logMCPDebug(name,`Node version: ${process.version}, Platform: ${process.platform}`),logMCPDebug(name,`Environment: ${jsonStringify({NODE_OPTIONS:process.env.NODE_OPTIONS||"not set",UV_THREADPOOL_SIZE:process.env.UV_THREADPOOL_SIZE||"default",HTTP_PROXY:process.env.HTTP_PROXY||"not set",HTTPS_PROXY:process.env.HTTPS_PROXY||"not set",NO_PROXY:process.env.NO_PROXY||"not set"})}`);let authProvider=new ClaudeAuthProvider(name,serverRef),combinedHeaders=await getMcpServerHeaders(name,serverRef),hasOAuthTokens=!!await authProvider.tokens(),proxyOptions=getProxyFetchOptions();logMCPDebug(name,`Proxy options: ${proxyOptions.dispatcher?"custom dispatcher":"default"}`);let transportOptions={authProvider,fetch:wrapFetchWithTimeout(wrapFetchWithStepUpDetection(createFetchWithInit(),authProvider)),requestInit:{...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),...sessionIngressToken&&!hasOAuthTokens&&{Authorization:`Bearer ${sessionIngressToken}`},...combinedHeaders}}},headersForLogging=transportOptions.requestInit?.headers?mapValues_default(transportOptions.requestInit.headers,(value,key)=>key.toLowerCase()==="authorization"?"[REDACTED]":value):void 0;logMCPDebug(name,`HTTP transport options: ${jsonStringify({url:serverRef.url,headers:headersForLogging,hasAuthProvider:!!authProvider,timeoutMs:MCP_REQUEST_TIMEOUT_MS})}`),transport=new StreamableHTTPClientTransport(new URL(serverRef.url),transportOptions),logMCPDebug(name,"HTTP transport created successfully")}else{if(serverRef.type==="sdk")throw new Error("SDK servers should be handled in print.js");if(serverRef.type==="claudeai-proxy"){if(logMCPDebug(name,`Initializing claude.ai proxy transport for server ${serverRef.id}`),!getClaudeAIOAuthTokens())throw new Error("No claude.ai OAuth token found");let oauthConfig=getOauthConfig(),proxyUrl=`${oauthConfig.MCP_PROXY_URL}${oauthConfig.MCP_PROXY_PATH.replace("{server_id}",serverRef.id)}`;logMCPDebug(name,`Using claude.ai proxy at ${proxyUrl}`);let fetchWithAuth=createClaudeAiProxyFetch(globalThis.fetch),proxyOptions=getProxyFetchOptions(),transportOptions={fetch:wrapFetchWithTimeout(fetchWithAuth),requestInit:{...proxyOptions,headers:{"User-Agent":getMCPUserAgent(),"X-Mcp-Client-Session-Id":getSessionId()}}};transport=new StreamableHTTPClientTransport(new URL(proxyUrl),transportOptions),logMCPDebug(name,"claude.ai proxy transport created successfully")}else if("command"in serverRef&&isClaudeInChromeMCPServer(name)){let{createChromeContext:createChromeContext2}=await Promise.resolve().then(()=>(init_mcpServer(),mcpServer_exports)),{loadClaudeInChromeRuntime:loadClaudeInChromeRuntime2}=await Promise.resolve().then(()=>(init_runtime5(),runtime_exports2)),{createClaudeForChromeMcpServer}=await loadClaudeInChromeRuntime2(),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports)),context2=createChromeContext2(serverRef.env);inProcessServer=createClaudeForChromeMcpServer(context2);let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,"In-process Chrome MCP server started")}else if("command"in serverRef&&(await Promise.resolve().then(()=>(init_officialClavueMcp(),officialClavueMcp_exports))).isOfficialClavueMcpServer(name)){let{createOfficialClavueMcpServer:createOfficialClavueMcpServer2}=await Promise.resolve().then(()=>(init_officialClavueMcpServer(),officialClavueMcpServer_exports)),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports));inProcessServer=createOfficialClavueMcpServer2();let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,"In-process official Clavue MCP server started")}else if("command"in serverRef&&(await Promise.resolve().then(()=>(init_officialBrowserMcp(),officialBrowserMcp_exports))).isOfficialBrowserMcpServer(name)&&Array.isArray(serverRef.args)&&serverRef.args.map(String).includes((await Promise.resolve().then(()=>(init_officialBrowserMcp(),officialBrowserMcp_exports))).OFFICIAL_BROWSER_RUNTIME_MCP_MARKER_ARG)){let{createBrowserRuntimeMcpServer:createBrowserRuntimeMcpServer2}=await Promise.resolve().then(()=>(init_server3(),server_exports)),{parseBrowserRuntimeKindFromArgs:parseBrowserRuntimeKindFromArgs2}=await Promise.resolve().then(()=>(init_officialBrowserMcp(),officialBrowserMcp_exports)),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports)),runtimeKind=parseBrowserRuntimeKindFromArgs2(serverRef.args);inProcessServer=createBrowserRuntimeMcpServer2(runtimeKind);let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,`In-process Browser Runtime MCP server started (${runtimeKind})`)}else if("command"in serverRef&&isComputerUseMCPServer3(name)){let{createComputerUseMcpServerForCli:createComputerUseMcpServerForCli2}=await Promise.resolve().then(()=>(init_mcpServer2(),mcpServer_exports2)),{createLinkedTransportPair:createLinkedTransportPair2}=await Promise.resolve().then(()=>(init_InProcessTransport(),InProcessTransport_exports));inProcessServer=await createComputerUseMcpServerForCli2();let[clientTransport,serverTransport]=createLinkedTransportPair2();await inProcessServer.connect(serverTransport),transport=clientTransport,logMCPDebug(name,"In-process Computer Use MCP server started")}else if("command"in serverRef){let finalCommand=process.env.CLAUDE_CODE_SHELL_PREFIX||serverRef.command,finalArgs=process.env.CLAUDE_CODE_SHELL_PREFIX?[[serverRef.command,...serverRef.args].join(" ")]:serverRef.args;transport=new StdioClientTransport({command:finalCommand,args:finalArgs,env:buildStdioMcpEnv({base:subprocessEnv(),projectDir:getProjectRoot(),serverEnv:serverRef.env}),stderr:"pipe"})}else throw new Error("Unsupported MCP server configuration")}let stderrHandler,stderrOutput="";if("command"in serverRef){let stdioTransport=transport;stdioTransport.stderr&&(stderrHandler=__name(data=>{if(stderrOutput.length<64*1024*1024)try{stderrOutput+=data.toString()}catch{}},"stderrHandler"),stdioTransport.stderr.on("data",stderrHandler));let NON_PROTOCOL_BYTE_CAP=(()=>{let raw=parseInt(process.env.CLAVUE_MCP_STDIO_NON_PROTOCOL_CAP_MB||"",10);return(Number.isFinite(raw)&&raw>0?raw:16)*1024*1024})();if(NON_PROTOCOL_BYTE_CAP>0){let nonProtocolBytes=0,childStdout=stdioTransport._process?.stdout;if(childStdout){let onStdout=__name(chunk3=>{if(nonProtocolBytes+=typeof chunk3=="string"?Buffer.byteLength(chunk3):chunk3.length,nonProtocolBytes>NON_PROTOCOL_BYTE_CAP){logMCPDebug(name,`stdio stdout exceeded ${NON_PROTOCOL_BYTE_CAP} bytes \u2014 terminating to prevent unbounded memory growth`);try{childStdout.removeListener("data",onStdout)}catch{}transport.close?.()}},"onStdout");childStdout.on("data",onStdout)}}}let client2=new Client({name:"clavue",title:"Clavue",version:typeof MACRO<"u"?"11.3.13":"unknown",description:"Clavue coding assistant",websiteUrl:PRODUCT_URL},{capabilities:{roots:{},elicitation:{}}});if(serverRef.type==="http"&&logMCPDebug(name,"Client created, setting up request handler"),client2.setRequestHandler(ListRootsRequestSchema,async()=>(logMCPDebug(name,"Received ListRoots request from server"),{roots:[{uri:`file://${getOriginalCwd()}`}]})),connectionTimeoutMs!==getConnectionTimeoutMs()&&logMCPDebug(name,`Applying extended stdio startup timeout of ${connectionTimeoutMs}ms for package-manager-backed command`),logMCPDebug(name,`Starting connection with timeout of ${connectionTimeoutMs}ms`),serverRef.type==="http"){logMCPDebug(name,`Testing basic HTTP connectivity to ${serverRef.url}`);try{let testUrl=new URL(serverRef.url);logMCPDebug(name,`Parsed URL: host=${testUrl.hostname}, port=${testUrl.port||"default"}, protocol=${testUrl.protocol}`),(testUrl.hostname==="127.0.0.1"||testUrl.hostname==="localhost")&&logMCPDebug(name,`Using loopback address: ${testUrl.hostname}`)}catch(urlError){logMCPDebug(name,`Failed to parse URL: ${urlError}`)}}let connectPromise=client2.connect(transport),timeoutPromise=new Promise((_2,reject2)=>{let timeoutId=setTimeout(()=>{let elapsed=Date.now()-connectStartTime;logMCPDebug(name,`Connection timeout triggered after ${elapsed}ms (limit: ${connectionTimeoutMs}ms)`),inProcessServer&&inProcessServer.close?.().catch(()=>{}),transport.close().catch(()=>{}),reject2(new TelemetrySafeError_I_VERIFIED_THIS_IS_NOT_CODE_OR_FILEPATHS(`MCP server "${name}" connection timed out after ${connectionTimeoutMs}ms`,"MCP connection timeout"))},connectionTimeoutMs);connectPromise.then(()=>{clearTimeout(timeoutId)},_error=>{clearTimeout(timeoutId)})});try{await Promise.race([connectPromise,timeoutPromise]),stderrOutput&&(logMCPError(name,`Server stderr: ${stderrOutput}`),stderrOutput="");let elapsed=Date.now()-connectStartTime;logMCPDebug(name,`Successfully connected (transport: ${serverRef.type||"stdio"}) in ${elapsed}ms`)}catch(error40){let elapsed=Date.now()-connectStartTime;if(serverRef.type==="sse"&&error40 instanceof Error){if(logMCPDebug(name,`SSE Connection failed after ${elapsed}ms: ${jsonStringify({url:serverRef.url,error:error40.message,errorType:error40.constructor.name,stack:error40.stack})}`),logMCPError(name,error40),error40 instanceof UnauthorizedError)return handleRemoteAuthFailure(name,serverRef,"sse")}else if(serverRef.type==="http"&&error40 instanceof Error){let errorObj=error40;if(logMCPDebug(name,`HTTP Connection failed after ${elapsed}ms: ${error40.message} (code: ${errorObj.code||"none"}, errno: ${errorObj.errno||"none"})`),logMCPError(name,error40),error40 instanceof UnauthorizedError)return handleRemoteAuthFailure(name,serverRef,"http")}else if(serverRef.type==="claudeai-proxy"&&error40 instanceof Error){if(logMCPDebug(name,`claude.ai proxy connection failed after ${elapsed}ms: ${error40.message}`),logMCPError(name,error40),error40.code===401)return handleRemoteAuthFailure(name,serverRef,"claudeai-proxy")}else(serverRef.type==="sse-ide"||serverRef.type==="ws-ide")&&logEvent("tengu_mcp_ide_server_connection_failed",{connectionDurationMs:elapsed});throw inProcessServer&&inProcessServer.close?.().catch(()=>{}),transport.close().catch(()=>{}),stderrOutput&&logMCPError(name,`Server stderr: ${stderrOutput}`),error40}let capabilities=client2.getServerCapabilities(),serverVersion=client2.getServerVersion(),rawInstructions=client2.getInstructions(),instructions=rawInstructions;if(rawInstructions&&rawInstructions.length>MAX_MCP_DESCRIPTION_LENGTH&&(instructions=rawInstructions.slice(0,MAX_MCP_DESCRIPTION_LENGTH)+"\u2026 [truncated]",logMCPDebug(name,`Server instructions truncated from ${rawInstructions.length} to ${MAX_MCP_DESCRIPTION_LENGTH} chars`)),logMCPDebug(name,`Connection established with capabilities: ${jsonStringify({hasTools:!!capabilities?.tools,hasPrompts:!!capabilities?.prompts,hasResources:!!capabilities?.resources,hasResourceSubscribe:!!capabilities?.resources?.subscribe,serverVersion:serverVersion||"unknown"})}`),logForDebugging(`[MCP] Server "${name}" connected with subscribe=${!!capabilities?.resources?.subscribe}`),client2.setRequestHandler(ElicitRequestSchema,async request=>(logMCPDebug(name,`Elicitation request received during initialization: ${jsonStringify(request)}`),{action:"cancel"})),serverRef.type==="sse-ide"||serverRef.type==="ws-ide"){let ideConnectionDurationMs=Date.now()-connectStartTime;logEvent("tengu_mcp_ide_server_connection_succeeded",{connectionDurationMs:ideConnectionDurationMs,serverVersion});try{maybeNotifyIDEConnected(client2)}catch(error40){logMCPError(name,`Failed to send ide_connected notification: ${error40}`)}}let connectionStartTime=Date.now(),hasErrorOccurred=!1,originalOnerror=client2.onerror,originalOnclose=client2.onclose,consecutiveConnectionErrors=0,MAX_ERRORS_BEFORE_RECONNECT=3,hasTriggeredClose=!1,closeTransportAndRejectPending=__name(reason=>{hasTriggeredClose||(hasTriggeredClose=!0,logMCPDebug(name,`Closing transport (${reason})`),client2.close().catch(e2=>{logMCPDebug(name,`Error during close: ${errorMessage(e2)}`)}))},"closeTransportAndRejectPending"),isTerminalConnectionError=__name(msg=>msg.includes("ECONNRESET")||msg.includes("ETIMEDOUT")||msg.includes("EPIPE")||msg.includes("EHOSTUNREACH")||msg.includes("ECONNREFUSED")||msg.includes("Body Timeout Error")||msg.includes("terminated")||msg.includes("SSE stream disconnected")||msg.includes("Failed to reconnect SSE stream"),"isTerminalConnectionError");client2.onerror=error40=>{let uptime=Date.now()-connectionStartTime;hasErrorOccurred=!0;let transportType=serverRef.type||"stdio";if(logMCPDebug(name,`${transportType.toUpperCase()} connection dropped after ${Math.floor(uptime/1e3)}s uptime`),error40.message&&(error40.message.includes("ECONNRESET")?logMCPDebug(name,"Connection reset - server may have crashed or restarted"):error40.message.includes("ETIMEDOUT")?logMCPDebug(name,"Connection timeout - network issue or server unresponsive"):error40.message.includes("ECONNREFUSED")?logMCPDebug(name,"Connection refused - server may be down"):error40.message.includes("EPIPE")?logMCPDebug(name,"Broken pipe - server closed connection unexpectedly"):error40.message.includes("EHOSTUNREACH")?logMCPDebug(name,"Host unreachable - network connectivity issue"):error40.message.includes("ESRCH")?logMCPDebug(name,"Process not found - stdio server process terminated"):error40.message.includes("spawn")?logMCPDebug(name,"Failed to spawn process - check command and permissions"):logMCPDebug(name,`Connection error: ${error40.message}`)),(transportType==="http"||transportType==="claudeai-proxy")&&isMcpSessionExpiredError(error40)){logMCPDebug(name,"MCP session expired (server returned 404 with session-not-found), triggering reconnection"),closeTransportAndRejectPending("session expired"),originalOnerror&&originalOnerror(error40);return}if(transportType==="sse"||transportType==="http"||transportType==="claudeai-proxy"){if(error40.message.includes("Maximum reconnection attempts")){closeTransportAndRejectPending("SSE reconnection exhausted"),originalOnerror&&originalOnerror(error40);return}isTerminalConnectionError(error40.message)?(consecutiveConnectionErrors++,logMCPDebug(name,`Terminal connection error ${consecutiveConnectionErrors}/${MAX_ERRORS_BEFORE_RECONNECT}`),consecutiveConnectionErrors>=MAX_ERRORS_BEFORE_RECONNECT&&(consecutiveConnectionErrors=0,closeTransportAndRejectPending("max consecutive terminal errors"))):consecutiveConnectionErrors=0}originalOnerror&&originalOnerror(error40)},client2.onclose=()=>{let uptime=Date.now()-connectionStartTime,transportType=serverRef.type??"unknown";logMCPDebug(name,`${transportType.toUpperCase()} connection closed after ${Math.floor(uptime/1e3)}s (${hasErrorOccurred?"with errors":"cleanly"})`);let key=getServerCacheKey(name,serverRef);clearMcpFetchCaches(name,{tools:fetchToolsForClient,resources:fetchResourcesForClient,resourceTemplates:fetchResourceTemplatesForClient,commands:fetchCommandsForClient,skills:null}),connectToServer.cache.delete(key),logMCPDebug(name,"Cleared connection cache for reconnection"),originalOnclose&&originalOnclose()};let cleanup=__name(async()=>{if(inProcessServer){try{await inProcessServer.close?.()}catch(error40){logMCPDebug(name,`Error closing in-process server: ${error40}`)}try{await client2.close()}catch(error40){logMCPDebug(name,`Error closing client: ${error40}`)}return}if(stderrHandler&&(serverRef.type==="stdio"||!serverRef.type)&&transport.stderr?.off("data",stderrHandler),serverRef.type==="stdio")try{let childPid=transport.pid;if(childPid){logMCPDebug(name,"Sending SIGINT to MCP server process");try{process.kill(childPid,"SIGINT")}catch(error40){logMCPDebug(name,`Error sending SIGINT: ${error40}`);return}await new Promise(async resolve64=>{let resolved=!1,checkInterval=setInterval(()=>{try{process.kill(childPid,0)}catch{resolved||(resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),logMCPDebug(name,"MCP server process exited cleanly"),resolve64())}},50),failsafeTimeout=setTimeout(()=>{resolved||(resolved=!0,clearInterval(checkInterval),logMCPDebug(name,"Cleanup timeout reached, stopping process monitoring"),resolve64())},600);try{if(await sleep2(100),!resolved){try{process.kill(childPid,0),logMCPDebug(name,"SIGINT failed, sending SIGTERM to MCP server process");try{process.kill(childPid,"SIGTERM")}catch(termError){logMCPDebug(name,`Error sending SIGTERM: ${termError}`),resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64();return}}catch{resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64();return}if(await sleep2(400),!resolved)try{process.kill(childPid,0),logMCPDebug(name,"SIGTERM failed, sending SIGKILL to MCP server process");try{process.kill(childPid,"SIGKILL")}catch(killError){logMCPDebug(name,`Error sending SIGKILL: ${killError}`)}}catch{resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64()}}resolved||(resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64())}catch{resolved||(resolved=!0,clearInterval(checkInterval),clearTimeout(failsafeTimeout),resolve64())}})}}catch(processError){logMCPDebug(name,`Error terminating process: ${processError}`)}try{await client2.close()}catch(error40){logMCPDebug(name,`Error closing client: ${error40}`)}},"cleanup"),cleanupUnregister=registerCleanup(cleanup),wrappedCleanup=__name(async()=>{cleanupUnregister?.(),await cleanup()},"wrappedCleanup"),connectionDurationMs=Date.now()-connectStartTime;return logEvent("tengu_mcp_server_connection_succeeded",{connectionDurationMs,transportType:serverRef.type??"stdio",totalServers:serverStats?.totalServers,stdioCount:serverStats?.stdioCount,sseCount:serverStats?.sseCount,httpCount:serverStats?.httpCount,sseIdeCount:serverStats?.sseIdeCount,wsIdeCount:serverStats?.wsIdeCount,...mcpBaseUrlAnalytics(serverRef)}),{name,client:client2,type:"connected",capabilities:capabilities??{},serverInfo:serverVersion,instructions,config:serverRef,cleanup:wrappedCleanup}}catch(error40){let connectionDurationMs=Date.now()-connectStartTime;return logEvent("tengu_mcp_server_connection_failed",{connectionDurationMs,totalServers:serverStats?.totalServers||1,stdioCount:serverStats?.stdioCount||(serverRef.type==="stdio"?1:0),sseCount:serverStats?.sseCount||(serverRef.type==="sse"?1:0),httpCount:serverStats?.httpCount||(serverRef.type==="http"?1:0),sseIdeCount:serverStats?.sseIdeCount||(serverRef.type==="sse-ide"?1:0),wsIdeCount:serverStats?.wsIdeCount||(serverRef.type==="ws-ide"?1:0),transportType:serverRef.type??"stdio",...mcpBaseUrlAnalytics(serverRef)}),logMCPDebug(name,`Connection failed after ${connectionDurationMs}ms: ${errorMessage(error40)}`),logMCPError(name,`Connection failed: ${errorMessage(error40)}`),inProcessServer&&inProcessServer.close?.().catch(()=>{}),{name,type:"failed",config:serverRef,error:errorMessage(error40)}}},getServerCacheKey);__name(clearServerCache,"clearServerCache");__name(ensureConnectedClient,"ensureConnectedClient");fetchToolsForClient=createFetchToolsForClient({ensureConnectedClient,callMCPToolWithUrlElicitationRetry}),fetchCommandsForClient=createFetchCommandsForClient({ensureConnectedClient,transformResultContent,zipObject:zipObject_default});__name(callIdeRpc,"callIdeRpc");__name(reconnectMcpServerImpl,"reconnectMcpServerImpl");__name(getMcpToolsCommandsAndResources,"getMcpToolsCommandsAndResources");prefetchAllMcpResources=createPrefetchAllMcpResources(getMcpToolsCommandsAndResources);__name(callMCPToolWithUrlElicitationRetry,"callMCPToolWithUrlElicitationRetry");__name(callMCPTool2,"callMCPTool");__name(setupSdkMcpClients,"setupSdkMcpClients")}});import{createHash as createHash25}from"crypto";function filterSwarmFieldsFromSchema(toolName5,schema){let fieldsToRemove=SWARM_FIELDS_BY_TOOL[toolName5];if(!fieldsToRemove||fieldsToRemove.length===0)return schema;let filtered={...schema},props=filtered.properties;if(props&&typeof props=="object"){let filteredProps={...props};for(let field of fieldsToRemove)delete filteredProps[field];filtered.properties=filteredProps}return filtered}async function toolToAPISchema(tool,options){let cacheKey="inputJSONSchema"in tool&&tool.inputJSONSchema?`${tool.name}:${jsonStringify(tool.inputJSONSchema)}`:tool.name,cache5=getToolSchemaCache(),strictToolsEnabled=checkStatsigFeatureGate_CACHED_MAY_BE_STALE("tengu_tool_pear"),base=cache5.get(cacheKey);if(!base){let input_schema=normalizeToolInputJsonSchema("inputJSONSchema"in tool&&tool.inputJSONSchema?tool.inputJSONSchema:zodToJsonSchema2(tool.inputSchema));isAgentSwarmsEnabled()||(input_schema=filterSwarmFieldsFromSchema(tool.name,input_schema)),base={name:tool.name,description:await tool.prompt({getToolPermissionContext:options.getToolPermissionContext,tools:options.tools,agents:options.agents,allowedAgentTypes:options.allowedAgentTypes}),input_schema},cache5.set(cacheKey,base)}let useStrict=strictToolsEnabled&&tool.strict===!0&&options.model!==void 0&&modelSupportsStructuredOutputs(options.model),useEagerInputStreaming=getAPIProvider()==="firstParty"&&isFirstPartyAnthropicBaseUrl()&&(getFeatureValue_CACHED_MAY_BE_STALE("tengu_fgts",!1)||isEnvTruthy2(process.env.CLAUDE_CODE_ENABLE_FINE_GRAINED_TOOL_STREAMING)),schema={name:base.name,description:base.description,input_schema:base.input_schema,...useStrict&&{strict:!0},...useEagerInputStreaming&&{eager_input_streaming:!0}};if(options.deferLoading&&(schema.defer_loading=!0),options.cacheControl&&(schema.cache_control=options.cacheControl),isEnvTruthy2(process.env.CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS)){let allowed=new Set(["name","description","input_schema","cache_control"]),stripped=Object.keys(schema).filter(k2=>!allowed.has(k2));if(stripped.length>0)return logStripOnce(stripped),{name:schema.name,description:schema.description,input_schema:schema.input_schema,...schema.cache_control&&{cache_control:schema.cache_control}}}return schema}function logStripOnce(stripped){loggedStrip||(loggedStrip=!0,logForDebugging(`[betas] Stripped from tool schemas: [${stripped.join(", ")}] (CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1)`))}function logAPIPrefix(systemPrompt){let[firstSyspromptBlock]=splitSysPromptPrefix(systemPrompt),firstSystemPrompt=firstSyspromptBlock?.text;logEvent("tengu_sysprompt_block",{snippet:firstSystemPrompt?.slice(0,20),length:firstSystemPrompt?.length??0,hash:firstSystemPrompt?createHash25("sha256").update(firstSystemPrompt).digest("hex"):""})}function splitSysPromptPrefix(systemPrompt,options){let useGlobalCacheFeature=shouldUseGlobalCacheScope();if(useGlobalCacheFeature&&options?.skipGlobalCacheForSystemPrompt){logEvent("tengu_sysprompt_using_tool_based_cache",{promptBlockCount:systemPrompt.length});let systemPromptPrefix2,rest3=[];for(let prompt of systemPrompt)prompt&&prompt!==SYSTEM_PROMPT_DYNAMIC_BOUNDARY&&(CLI_SYSPROMPT_PREFIXES.has(prompt)?systemPromptPrefix2=prompt:rest3.push(prompt));let result3=[];systemPromptPrefix2&&result3.push({text:systemPromptPrefix2,cacheScope:"org"});let restJoined2=rest3.join(`
5597
5597
 
5598
5598
  `);return restJoined2&&result3.push({text:restJoined2,cacheScope:"org"}),result3}if(useGlobalCacheFeature){let boundaryIndex=systemPrompt.findIndex(s2=>s2===SYSTEM_PROMPT_DYNAMIC_BOUNDARY);if(boundaryIndex!==-1){let systemPromptPrefix2,staticBlocks=[],dynamicBlocks=[];for(let i3=0;i3<systemPrompt.length;i3++){let block=systemPrompt[i3];!block||block===SYSTEM_PROMPT_DYNAMIC_BOUNDARY||(CLI_SYSPROMPT_PREFIXES.has(block)?systemPromptPrefix2=block:i3<boundaryIndex?staticBlocks.push(block):dynamicBlocks.push(block))}let result3=[];systemPromptPrefix2&&result3.push({text:systemPromptPrefix2,cacheScope:null});let staticJoined=staticBlocks.join(`
5599
5599
 
@@ -6264,13 +6264,13 @@ Example: /workflow run ${def.name} {"target":"origin/main...HEAD"}`);!args.targe
6264
6264
 
6265
6265
  `+usage())}async function handleWorkflowsCommand(rawArgs,options={}){let cwd6=options.cwd||process.cwd(),t8=String(rawArgs||"").trim().toLowerCase();if(t8==="help"||t8==="-h"||t8==="--help")return text2(usage());let index=await readWorkflowIndex(cwd6),runs=[];for(let e2 of index.runs){if(t8&&e2.status!==t8&&e2.displayName!==t8&&e2.definitionName!==t8)continue;let run2=await loadWorkflowRun(cwd6,e2.runId);run2&&runs.push(run2)}if(runs.length===0&&index.runs.length>0&&t8)return text2(`No runs match "${rawArgs}".
6266
6266
 
6267
- `+formatRunDashboard((await Promise.all(index.runs.map(e2=>loadWorkflowRun(cwd6,e2.runId)))).filter(r2=>!!r2)));if(runs.length===0){let all4=(await Promise.all(index.runs.map(e2=>loadWorkflowRun(cwd6,e2.runId)))).filter(r2=>!!r2);return text2(formatRunDashboard(all4))}return text2(formatRunDashboard(runs))}var init_runtime7=__esm({"src/services/workflow/runtime.ts"(){init_catalog();init_engine();init_suppress();__name(text2,"text");__name(usage,"usage");__name(splitArgs2,"splitArgs");__name(parseRunInvocation,"parseRunInvocation");__name(handleWorkflowCommand,"handleWorkflowCommand");__name(handleWorkflowsCommand,"handleWorkflowsCommand")}});var workflow_exports={};__export(workflow_exports,{call:()=>call10});var call10,init_workflow=__esm({"src/commands/workflow/workflow.ts"(){init_cwd2();init_runtime7();call10=__name(async args=>await handleWorkflowCommand(args,{cwd:getCwd()}),"call")}});var workflow,workflow_default,init_workflow2=__esm({"src/commands/workflow/index.ts"(){workflow={type:"local",name:"workflow",aliases:["wf"],description:"Run multi-agent workflows (phased parallel fan-out + budget + dashboard)",argumentHint:"[list|run|status|pause|resume|stop|complete|report|help] \u2026",supportsNonInteractive:!0,load:__name(()=>Promise.resolve().then(()=>(init_workflow(),workflow_exports)),"load")},workflow_default=workflow}});var workflows_exports={};__export(workflows_exports,{call:()=>call11});var call11,init_workflows=__esm({"src/commands/workflows/workflows.ts"(){init_cwd2();init_runtime7();call11=__name(async args=>await handleWorkflowsCommand(args,{cwd:getCwd()}),"call")}});var workflows_exports2={};__export(workflows_exports2,{default:()=>workflows_default});var workflows,workflows_default,init_workflows2=__esm({"src/commands/workflows/index.ts"(){workflows={type:"local",name:"workflows",aliases:["wfs"],description:"Live workflow run dashboard (active and retained runs, not definition catalog)",argumentHint:"[status-filter|help]",supportsNonInteractive:!0,load:__name(()=>Promise.resolve().then(()=>(init_workflows(),workflows_exports)),"load")},workflows_default=workflows}});function resolveFeedbackCommandNameFromFlags(flags){return flags.useBedrock||flags.useVertex||flags.useFoundry||flags.disableFeedbackCommand||flags.disableBugCommand||flags.essentialTrafficOnly||flags.userType==="ant"||!flags.allowProductFeedback?null:"/feedback"}function formatIncorrectDecisionPrompt(commandName){return commandName?`${commandName} if incorrect`:"report it in GitHub issues if incorrect"}var init_feedbackChannelsCore=__esm({"src/utils/feedbackChannelsCore.ts"(){__name(resolveFeedbackCommandNameFromFlags,"resolveFeedbackCommandNameFromFlags");__name(formatIncorrectDecisionPrompt,"formatIncorrectDecisionPrompt")}});function getFeedbackCommandName(){return resolveFeedbackCommandNameFromFlags({useBedrock:isEnvTruthy2(process.env.CLAUDE_CODE_USE_BEDROCK),useVertex:isEnvTruthy2(process.env.CLAUDE_CODE_USE_VERTEX),useFoundry:isEnvTruthy2(process.env.CLAUDE_CODE_USE_FOUNDRY),disableFeedbackCommand:isEnvTruthy2(process.env.DISABLE_FEEDBACK_COMMAND),disableBugCommand:isEnvTruthy2(process.env.DISABLE_BUG_COMMAND),essentialTrafficOnly:isEssentialTrafficOnly(),userType:process.env.USER_TYPE,allowProductFeedback:isPolicyAllowedForCommandFiltering("allow_product_feedback")})}function isFeedbackCommandAvailable(){return getFeedbackCommandName()!==null}function getIncorrectDecisionPrompt(){return formatIncorrectDecisionPrompt(getFeedbackCommandName())}var init_feedbackChannels=__esm({"src/utils/feedbackChannels.ts"(){init_policyLimits();init_envUtils();init_feedbackChannelsCore();init_privacyLevel();init_feedbackChannelsCore();__name(getFeedbackCommandName,"getFeedbackCommandName");__name(isFeedbackCommandAvailable,"isFeedbackCommandAvailable");__name(getIncorrectDecisionPrompt,"getIncorrectDecisionPrompt")}});var QuerySource,init_querySource=__esm({"src/constants/querySource.ts"(){QuerySource={CLI:"cli",SDK:"sdk",UI:"ui",Agent:"agent",Background:"background",Unknown:"unknown"}}});import{readFile as readFile53,stat as stat42}from"fs/promises";function redactSensitiveInfo(text3){let redacted=text3;return redacted=redacted.replace(/"(sk-ant[^\s"']{24,})"/g,'"[REDACTED_API_KEY]"'),redacted=redacted.replace(/(?<![A-Za-z0-9"'])(sk-ant-?[A-Za-z0-9_-]{10,})(?![A-Za-z0-9"'])/g,"[REDACTED_API_KEY]"),redacted=redacted.replace(/AWS key: "(AWS[A-Z0-9]{20,})"/g,'AWS key: "[REDACTED_AWS_KEY]"'),redacted=redacted.replace(/(AKIA[A-Z0-9]{16})/g,"[REDACTED_AWS_KEY]"),redacted=redacted.replace(/(?<![A-Za-z0-9])(AIza[A-Za-z0-9_-]{35})(?![A-Za-z0-9])/g,"[REDACTED_GCP_KEY]"),redacted=redacted.replace(/(?<![A-Za-z0-9])([a-z0-9-]+@[a-z0-9-]+\.iam\.gserviceaccount\.com)(?![A-Za-z0-9])/g,"[REDACTED_GCP_SERVICE_ACCOUNT]"),redacted=redacted.replace(/(["']?x-api-key["']?\s*[:=]\s*["']?)[^"',\s)}\]]+/gi,"$1[REDACTED_API_KEY]"),redacted=redacted.replace(/(["']?authorization["']?\s*[:=]\s*["']?(bearer\s+)?)[^"',\s)}\]]+/gi,"$1[REDACTED_TOKEN]"),redacted=redacted.replace(/(AWS[_-][A-Za-z0-9_]+\s*[=:]\s*)["']?[^"',\s)}\]]+["']?/gi,"$1[REDACTED_AWS_VALUE]"),redacted=redacted.replace(/(GOOGLE[_-][A-Za-z0-9_]+\s*[=:]\s*)["']?[^"',\s)}\]]+["']?/gi,"$1[REDACTED_GCP_VALUE]"),redacted=redacted.replace(/((API[-_]?KEY|TOKEN|SECRET|PASSWORD)\s*[=:]\s*)["']?[^"',\s)}\]]+["']?/gi,"$1[REDACTED]"),redacted}function getSanitizedErrorLogs(){return getInMemoryErrors().map(errorInfo=>{let errorCopy={...errorInfo};return errorCopy&&typeof errorCopy.error=="string"&&(errorCopy.error=redactSensitiveInfo(errorCopy.error)),errorCopy})}async function loadRawTranscriptJsonl(){try{let transcriptPath=getTranscriptPath(),{size:size2}=await stat42(transcriptPath);return size2>MAX_TRANSCRIPT_READ_BYTES2?(logForDebugging(`Skipping raw transcript read: file too large (${size2} bytes)`,{level:"warn"}),null):await readFile53(transcriptPath,"utf-8")}catch{return null}}function Feedback({abortSignal,messages,initialDescription,onDone,backgroundTasks={}}){let[step2,setStep]=(0,import_react64.useState)("userInput"),[cursorOffset,setCursorOffset]=(0,import_react64.useState)(0),[description,setDescription]=(0,import_react64.useState)(initialDescription??""),[feedbackId,setFeedbackId]=(0,import_react64.useState)(null),[error40,setError]=(0,import_react64.useState)(null),[envInfo,setEnvInfo]=(0,import_react64.useState)({isGit:!1,gitState:null}),[title,setTitle]=(0,import_react64.useState)(null),textInputColumns=useTerminalSize().columns-4;(0,import_react64.useEffect)(()=>{async function loadEnvInfo(){let isGit=await getIsGit(),gitState=null;isGit&&(gitState=await getGitState()),setEnvInfo({isGit,gitState})}__name(loadEnvInfo,"loadEnvInfo"),loadEnvInfo()},[]);let submitReport=(0,import_react64.useCallback)(async()=>{setStep("submitting"),setError(null),setFeedbackId(null);let sanitizedErrors=getSanitizedErrorLogs(),lastAssistantMessageId=getLastAssistantMessage(messages)?.requestId??null,[diskTranscripts,rawTranscriptJsonl,fieldEvidenceDigest]=await Promise.all([loadAllSubagentTranscriptsFromDisk(),loadRawTranscriptJsonl(),loadFieldEvidenceDigest()]),teammateTranscripts=extractTeammateTranscriptsFromTasks(backgroundTasks),subagentTranscripts={...diskTranscripts,...teammateTranscripts},reportData={latestAssistantMessageId:lastAssistantMessageId,message_count:messages.length,datetime:new Date().toISOString(),description,platform:env4.platform,gitRepo:envInfo.isGit,terminal:env4.terminal,version:"11.3.12",transcript:normalizeMessagesForAPI(messages),errors:sanitizedErrors,lastApiRequest:getLastAPIRequest(),...Object.keys(subagentTranscripts).length>0&&{subagentTranscripts},...rawTranscriptJsonl&&{rawTranscriptJsonl},...fieldEvidenceDigest&&{fieldEvidenceDigest}},[result2,t8]=await Promise.all([submitFeedback(reportData,abortSignal),generateTitle(description,abortSignal)]);setTitle(t8),result2.success?(result2.feedbackId&&(setFeedbackId(result2.feedbackId),logEvent("tengu_bug_report_submitted",{feedback_id:result2.feedbackId,last_assistant_message_id:lastAssistantMessageId}),logEventTo1P("tengu_bug_report_description",{feedback_id:result2.feedbackId,description:redactSensitiveInfo(description)})),setStep("done")):(result2.isZdrOrg?setError("Feedback collection is not available for organizations with custom data retention policies."):setError("Could not submit feedback. Please try again later."),setStep("userInput"))},[description,envInfo.isGit,messages]),handleCancel=(0,import_react64.useCallback)(()=>{if(step2==="done"){error40?onDone("Error submitting feedback / bug report",{display:"system"}):onDone("Feedback / bug report submitted",{display:"system"});return}onDone("Feedback / bug report cancelled",{display:"system"})},[step2,error40,onDone]);useKeybinding("confirm:no",handleCancel,{context:"Settings",isActive:step2==="userInput"}),useInput((input2,key)=>{if(step2==="done"){if(key.return&&title){let issueUrl=createGitHubIssueUrl(feedbackId??"",title,description,getSanitizedErrorLogs());openBrowser(issueUrl)}error40?onDone("Error submitting feedback / bug report",{display:"system"}):onDone("Feedback / bug report submitted",{display:"system"});return}if(error40&&step2!=="userInput"){onDone(resolveUiLocale()==="zh-CN"?"\u63D0\u4EA4\u53CD\u9988 / Bug \u62A5\u544A\u65F6\u51FA\u9519":"Error submitting feedback / bug report",{display:"system"});return}step2==="consent"&&(key.return||input2===" ")&&submitReport()});let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime82.jsxs)(Dialog,{title:isZh7?"\u63D0\u4EA4\u53CD\u9988 / Bug \u62A5\u544A":"Submit Feedback / Bug Report",onCancel:handleCancel,isCancelActive:step2!=="userInput",inputGuide:exitState=>exitState.pending?(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?`\u518D\u6B21\u6309 ${exitState.keyName} \u9000\u51FA`:`Press ${exitState.keyName} again to exit`}):step2==="userInput"?(0,import_jsx_runtime82.jsxs)(Byline,{children:[(0,import_jsx_runtime82.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"continue"}),(0,import_jsx_runtime82.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]}):step2==="consent"?(0,import_jsx_runtime82.jsxs)(Byline,{children:[(0,import_jsx_runtime82.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"submit"}),(0,import_jsx_runtime82.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]}):null,children:[step2==="userInput"&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u8BF7\u63CF\u8FF0\u4F60\u9047\u5230\u7684\u95EE\u9898:":"Describe the issue below:"}),(0,import_jsx_runtime82.jsx)(TextInput,{value:description,onChange:value=>{setDescription(value),error40&&setError(null)},columns:textInputColumns,onSubmit:()=>setStep("consent"),onExitMessage:()=>onDone(isZh7?"\u5DF2\u53D6\u6D88\u53CD\u9988":"Feedback cancelled",{display:"system"}),disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0,cursorOffset,onChangeCursorOffset:setCursorOffset,showCursor:!0}),error40&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime82.jsx)(ThemedText,{color:"error",children:error40}),(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u4FEE\u6539\u5185\u5BB9\u540E\u6309\u56DE\u8F66\u91CD\u8BD5,\u6216\u6309 Esc \u53D6\u6D88":"Edit and press Enter to retry, or Esc to cancel"})]})]}),step2==="consent"&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u672C\u6B21\u62A5\u544A\u5C06\u5305\u542B:":"This report will include:"}),(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{marginLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- \u4F60\u7684\u53CD\u9988 / Bug \u63CF\u8FF0: ":"- Your feedback / bug description: ",(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:description})]}),(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- \u73AF\u5883\u4FE1\u606F: ":"- Environment info: ",(0,import_jsx_runtime82.jsxs)(ThemedText,{dimColor:!0,children:[env4.platform,", ",env4.terminal,", v","11.3.12"]})]}),envInfo.gitState&&(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- Git \u4ED3\u5E93\u5143\u4FE1\u606F: ":"- Git repo metadata: ",(0,import_jsx_runtime82.jsxs)(ThemedText,{dimColor:!0,children:[envInfo.gitState.branchName,envInfo.gitState.commitHash?`, ${envInfo.gitState.commitHash.slice(0,7)}`:"",envInfo.gitState.remoteUrl?` @ ${envInfo.gitState.remoteUrl}`:"",!envInfo.gitState.isHeadOnRemote&&(isZh7?",\u672A\u540C\u6B65":", not synced"),!envInfo.gitState.isClean&&(isZh7?",\u6709\u672A\u63D0\u4EA4\u53D8\u66F4":", has local changes")]})]}),(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"- \u5F53\u524D\u4F1A\u8BDD\u8BB0\u5F55":"- Current session transcript"}),(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- \u7ED3\u6784\u5316\u73B0\u573A\u8BC1\u636E\u6458\u8981(\u5982\u6709): ":"- Structured field evidence digest (if present): ",(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u8FDE\u63A5\u3001\u8FDC\u7A0B\u3001SSH\u3001\u79FB\u52A8\u7AEF\u76F8\u5173\u75C7\u72B6":"connection, remote, SSH, and mobile-related symptoms"})]})]}),(0,import_jsx_runtime82.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime82.jsx)(ThemedText,{wrap:"wrap",dimColor:!0,children:isZh7?"\u6211\u4EEC\u4F1A\u7528\u4F60\u7684\u53CD\u9988\u6765\u8C03\u8BD5\u76F8\u5173\u95EE\u9898,\u6216\u6539\u8FDB\u514B\u62C9\u7EF4\u7684\u529F\u80FD(\u4F8B\u5982\u964D\u4F4E\u672A\u6765\u51FA\u73B0 Bug \u7684\u98CE\u9669)\u3002":"We will use your feedback to debug related issues or to improve Clavue's functionality (eg. to reduce the risk of bugs occurring in the future)."})}),(0,import_jsx_runtime82.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:["\u6309 ",(0,import_jsx_runtime82.jsx)(ThemedText,{bold:!0,children:"\u56DE\u8F66"})," \u786E\u8BA4\u5E76\u63D0\u4EA4\u3002"]}):(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:["Press ",(0,import_jsx_runtime82.jsx)(ThemedText,{bold:!0,children:"Enter"})," to confirm and submit."]})})})]}),step2==="submitting"&&(0,import_jsx_runtime82.jsx)(ThemedBox_default,{flexDirection:"row",gap:1,children:(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u6B63\u5728\u63D0\u4EA4\u62A5\u544A\u2026":"Submitting report\u2026"})}),step2==="done"&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",children:[error40?(0,import_jsx_runtime82.jsx)(ThemedText,{color:"error",children:error40}):(0,import_jsx_runtime82.jsx)(ThemedText,{color:"success",children:isZh7?"\u611F\u8C22\u4F60\u7684\u53CD\u9988!":"Thank you for your report!"}),feedbackId&&(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u53CD\u9988\u7F16\u53F7:${feedbackId}`:`Feedback ID: ${feedbackId}`}),(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{marginTop:1,children:[(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u6309 ":"Press "}),(0,import_jsx_runtime82.jsx)(ThemedText,{bold:!0,children:isZh7?"\u56DE\u8F66 ":"Enter "}),(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u53EF\u6253\u5F00\u6D4F\u89C8\u5668\u8D77\u8349 GitHub Issue,\u6309\u5176\u4ED6\u4EFB\u610F\u952E\u5173\u95ED\u3002":"to open your browser and draft a GitHub issue, or any other key to close."})]})]})]})}function createGitHubIssueUrl(feedbackId,title,description,errors){let sanitizedTitle=redactSensitiveInfo(title),bodyPrefix=`**Bug Description**
6267
+ `+formatRunDashboard((await Promise.all(index.runs.map(e2=>loadWorkflowRun(cwd6,e2.runId)))).filter(r2=>!!r2)));if(runs.length===0){let all4=(await Promise.all(index.runs.map(e2=>loadWorkflowRun(cwd6,e2.runId)))).filter(r2=>!!r2);return text2(formatRunDashboard(all4))}return text2(formatRunDashboard(runs))}var init_runtime7=__esm({"src/services/workflow/runtime.ts"(){init_catalog();init_engine();init_suppress();__name(text2,"text");__name(usage,"usage");__name(splitArgs2,"splitArgs");__name(parseRunInvocation,"parseRunInvocation");__name(handleWorkflowCommand,"handleWorkflowCommand");__name(handleWorkflowsCommand,"handleWorkflowsCommand")}});var workflow_exports={};__export(workflow_exports,{call:()=>call10});var call10,init_workflow=__esm({"src/commands/workflow/workflow.ts"(){init_cwd2();init_runtime7();call10=__name(async args=>await handleWorkflowCommand(args,{cwd:getCwd()}),"call")}});var workflow,workflow_default,init_workflow2=__esm({"src/commands/workflow/index.ts"(){workflow={type:"local",name:"workflow",aliases:["wf"],description:"Run multi-agent workflows (phased parallel fan-out + budget + dashboard)",argumentHint:"[list|run|status|pause|resume|stop|complete|report|help] \u2026",supportsNonInteractive:!0,load:__name(()=>Promise.resolve().then(()=>(init_workflow(),workflow_exports)),"load")},workflow_default=workflow}});var workflows_exports={};__export(workflows_exports,{call:()=>call11});var call11,init_workflows=__esm({"src/commands/workflows/workflows.ts"(){init_cwd2();init_runtime7();call11=__name(async args=>await handleWorkflowsCommand(args,{cwd:getCwd()}),"call")}});var workflows_exports2={};__export(workflows_exports2,{default:()=>workflows_default});var workflows,workflows_default,init_workflows2=__esm({"src/commands/workflows/index.ts"(){workflows={type:"local",name:"workflows",aliases:["wfs"],description:"Live workflow run dashboard (active and retained runs, not definition catalog)",argumentHint:"[status-filter|help]",supportsNonInteractive:!0,load:__name(()=>Promise.resolve().then(()=>(init_workflows(),workflows_exports)),"load")},workflows_default=workflows}});function resolveFeedbackCommandNameFromFlags(flags){return flags.useBedrock||flags.useVertex||flags.useFoundry||flags.disableFeedbackCommand||flags.disableBugCommand||flags.essentialTrafficOnly||flags.userType==="ant"||!flags.allowProductFeedback?null:"/feedback"}function formatIncorrectDecisionPrompt(commandName){return commandName?`${commandName} if incorrect`:"report it in GitHub issues if incorrect"}var init_feedbackChannelsCore=__esm({"src/utils/feedbackChannelsCore.ts"(){__name(resolveFeedbackCommandNameFromFlags,"resolveFeedbackCommandNameFromFlags");__name(formatIncorrectDecisionPrompt,"formatIncorrectDecisionPrompt")}});function getFeedbackCommandName(){return resolveFeedbackCommandNameFromFlags({useBedrock:isEnvTruthy2(process.env.CLAUDE_CODE_USE_BEDROCK),useVertex:isEnvTruthy2(process.env.CLAUDE_CODE_USE_VERTEX),useFoundry:isEnvTruthy2(process.env.CLAUDE_CODE_USE_FOUNDRY),disableFeedbackCommand:isEnvTruthy2(process.env.DISABLE_FEEDBACK_COMMAND),disableBugCommand:isEnvTruthy2(process.env.DISABLE_BUG_COMMAND),essentialTrafficOnly:isEssentialTrafficOnly(),userType:process.env.USER_TYPE,allowProductFeedback:isPolicyAllowedForCommandFiltering("allow_product_feedback")})}function isFeedbackCommandAvailable(){return getFeedbackCommandName()!==null}function getIncorrectDecisionPrompt(){return formatIncorrectDecisionPrompt(getFeedbackCommandName())}var init_feedbackChannels=__esm({"src/utils/feedbackChannels.ts"(){init_policyLimits();init_envUtils();init_feedbackChannelsCore();init_privacyLevel();init_feedbackChannelsCore();__name(getFeedbackCommandName,"getFeedbackCommandName");__name(isFeedbackCommandAvailable,"isFeedbackCommandAvailable");__name(getIncorrectDecisionPrompt,"getIncorrectDecisionPrompt")}});var QuerySource,init_querySource=__esm({"src/constants/querySource.ts"(){QuerySource={CLI:"cli",SDK:"sdk",UI:"ui",Agent:"agent",Background:"background",Unknown:"unknown"}}});import{readFile as readFile53,stat as stat42}from"fs/promises";function redactSensitiveInfo(text3){let redacted=text3;return redacted=redacted.replace(/"(sk-ant[^\s"']{24,})"/g,'"[REDACTED_API_KEY]"'),redacted=redacted.replace(/(?<![A-Za-z0-9"'])(sk-ant-?[A-Za-z0-9_-]{10,})(?![A-Za-z0-9"'])/g,"[REDACTED_API_KEY]"),redacted=redacted.replace(/AWS key: "(AWS[A-Z0-9]{20,})"/g,'AWS key: "[REDACTED_AWS_KEY]"'),redacted=redacted.replace(/(AKIA[A-Z0-9]{16})/g,"[REDACTED_AWS_KEY]"),redacted=redacted.replace(/(?<![A-Za-z0-9])(AIza[A-Za-z0-9_-]{35})(?![A-Za-z0-9])/g,"[REDACTED_GCP_KEY]"),redacted=redacted.replace(/(?<![A-Za-z0-9])([a-z0-9-]+@[a-z0-9-]+\.iam\.gserviceaccount\.com)(?![A-Za-z0-9])/g,"[REDACTED_GCP_SERVICE_ACCOUNT]"),redacted=redacted.replace(/(["']?x-api-key["']?\s*[:=]\s*["']?)[^"',\s)}\]]+/gi,"$1[REDACTED_API_KEY]"),redacted=redacted.replace(/(["']?authorization["']?\s*[:=]\s*["']?(bearer\s+)?)[^"',\s)}\]]+/gi,"$1[REDACTED_TOKEN]"),redacted=redacted.replace(/(AWS[_-][A-Za-z0-9_]+\s*[=:]\s*)["']?[^"',\s)}\]]+["']?/gi,"$1[REDACTED_AWS_VALUE]"),redacted=redacted.replace(/(GOOGLE[_-][A-Za-z0-9_]+\s*[=:]\s*)["']?[^"',\s)}\]]+["']?/gi,"$1[REDACTED_GCP_VALUE]"),redacted=redacted.replace(/((API[-_]?KEY|TOKEN|SECRET|PASSWORD)\s*[=:]\s*)["']?[^"',\s)}\]]+["']?/gi,"$1[REDACTED]"),redacted}function getSanitizedErrorLogs(){return getInMemoryErrors().map(errorInfo=>{let errorCopy={...errorInfo};return errorCopy&&typeof errorCopy.error=="string"&&(errorCopy.error=redactSensitiveInfo(errorCopy.error)),errorCopy})}async function loadRawTranscriptJsonl(){try{let transcriptPath=getTranscriptPath(),{size:size2}=await stat42(transcriptPath);return size2>MAX_TRANSCRIPT_READ_BYTES2?(logForDebugging(`Skipping raw transcript read: file too large (${size2} bytes)`,{level:"warn"}),null):await readFile53(transcriptPath,"utf-8")}catch{return null}}function Feedback({abortSignal,messages,initialDescription,onDone,backgroundTasks={}}){let[step2,setStep]=(0,import_react64.useState)("userInput"),[cursorOffset,setCursorOffset]=(0,import_react64.useState)(0),[description,setDescription]=(0,import_react64.useState)(initialDescription??""),[feedbackId,setFeedbackId]=(0,import_react64.useState)(null),[error40,setError]=(0,import_react64.useState)(null),[envInfo,setEnvInfo]=(0,import_react64.useState)({isGit:!1,gitState:null}),[title,setTitle]=(0,import_react64.useState)(null),textInputColumns=useTerminalSize().columns-4;(0,import_react64.useEffect)(()=>{async function loadEnvInfo(){let isGit=await getIsGit(),gitState=null;isGit&&(gitState=await getGitState()),setEnvInfo({isGit,gitState})}__name(loadEnvInfo,"loadEnvInfo"),loadEnvInfo()},[]);let submitReport=(0,import_react64.useCallback)(async()=>{setStep("submitting"),setError(null),setFeedbackId(null);let sanitizedErrors=getSanitizedErrorLogs(),lastAssistantMessageId=getLastAssistantMessage(messages)?.requestId??null,[diskTranscripts,rawTranscriptJsonl,fieldEvidenceDigest]=await Promise.all([loadAllSubagentTranscriptsFromDisk(),loadRawTranscriptJsonl(),loadFieldEvidenceDigest()]),teammateTranscripts=extractTeammateTranscriptsFromTasks(backgroundTasks),subagentTranscripts={...diskTranscripts,...teammateTranscripts},reportData={latestAssistantMessageId:lastAssistantMessageId,message_count:messages.length,datetime:new Date().toISOString(),description,platform:env4.platform,gitRepo:envInfo.isGit,terminal:env4.terminal,version:"11.3.13",transcript:normalizeMessagesForAPI(messages),errors:sanitizedErrors,lastApiRequest:getLastAPIRequest(),...Object.keys(subagentTranscripts).length>0&&{subagentTranscripts},...rawTranscriptJsonl&&{rawTranscriptJsonl},...fieldEvidenceDigest&&{fieldEvidenceDigest}},[result2,t8]=await Promise.all([submitFeedback(reportData,abortSignal),generateTitle(description,abortSignal)]);setTitle(t8),result2.success?(result2.feedbackId&&(setFeedbackId(result2.feedbackId),logEvent("tengu_bug_report_submitted",{feedback_id:result2.feedbackId,last_assistant_message_id:lastAssistantMessageId}),logEventTo1P("tengu_bug_report_description",{feedback_id:result2.feedbackId,description:redactSensitiveInfo(description)})),setStep("done")):(result2.isZdrOrg?setError("Feedback collection is not available for organizations with custom data retention policies."):setError("Could not submit feedback. Please try again later."),setStep("userInput"))},[description,envInfo.isGit,messages]),handleCancel=(0,import_react64.useCallback)(()=>{if(step2==="done"){error40?onDone("Error submitting feedback / bug report",{display:"system"}):onDone("Feedback / bug report submitted",{display:"system"});return}onDone("Feedback / bug report cancelled",{display:"system"})},[step2,error40,onDone]);useKeybinding("confirm:no",handleCancel,{context:"Settings",isActive:step2==="userInput"}),useInput((input2,key)=>{if(step2==="done"){if(key.return&&title){let issueUrl=createGitHubIssueUrl(feedbackId??"",title,description,getSanitizedErrorLogs());openBrowser(issueUrl)}error40?onDone("Error submitting feedback / bug report",{display:"system"}):onDone("Feedback / bug report submitted",{display:"system"});return}if(error40&&step2!=="userInput"){onDone(resolveUiLocale()==="zh-CN"?"\u63D0\u4EA4\u53CD\u9988 / Bug \u62A5\u544A\u65F6\u51FA\u9519":"Error submitting feedback / bug report",{display:"system"});return}step2==="consent"&&(key.return||input2===" ")&&submitReport()});let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime82.jsxs)(Dialog,{title:isZh7?"\u63D0\u4EA4\u53CD\u9988 / Bug \u62A5\u544A":"Submit Feedback / Bug Report",onCancel:handleCancel,isCancelActive:step2!=="userInput",inputGuide:exitState=>exitState.pending?(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?`\u518D\u6B21\u6309 ${exitState.keyName} \u9000\u51FA`:`Press ${exitState.keyName} again to exit`}):step2==="userInput"?(0,import_jsx_runtime82.jsxs)(Byline,{children:[(0,import_jsx_runtime82.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"continue"}),(0,import_jsx_runtime82.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]}):step2==="consent"?(0,import_jsx_runtime82.jsxs)(Byline,{children:[(0,import_jsx_runtime82.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"submit"}),(0,import_jsx_runtime82.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]}):null,children:[step2==="userInput"&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u8BF7\u63CF\u8FF0\u4F60\u9047\u5230\u7684\u95EE\u9898:":"Describe the issue below:"}),(0,import_jsx_runtime82.jsx)(TextInput,{value:description,onChange:value=>{setDescription(value),error40&&setError(null)},columns:textInputColumns,onSubmit:()=>setStep("consent"),onExitMessage:()=>onDone(isZh7?"\u5DF2\u53D6\u6D88\u53CD\u9988":"Feedback cancelled",{display:"system"}),disableEscapeDoublePress:!0,disableCtrlCDoublePress:!0,cursorOffset,onChangeCursorOffset:setCursorOffset,showCursor:!0}),error40&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime82.jsx)(ThemedText,{color:"error",children:error40}),(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u4FEE\u6539\u5185\u5BB9\u540E\u6309\u56DE\u8F66\u91CD\u8BD5,\u6216\u6309 Esc \u53D6\u6D88":"Edit and press Enter to retry, or Esc to cancel"})]})]}),step2==="consent"&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u672C\u6B21\u62A5\u544A\u5C06\u5305\u542B:":"This report will include:"}),(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{marginLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- \u4F60\u7684\u53CD\u9988 / Bug \u63CF\u8FF0: ":"- Your feedback / bug description: ",(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:description})]}),(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- \u73AF\u5883\u4FE1\u606F: ":"- Environment info: ",(0,import_jsx_runtime82.jsxs)(ThemedText,{dimColor:!0,children:[env4.platform,", ",env4.terminal,", v","11.3.13"]})]}),envInfo.gitState&&(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- Git \u4ED3\u5E93\u5143\u4FE1\u606F: ":"- Git repo metadata: ",(0,import_jsx_runtime82.jsxs)(ThemedText,{dimColor:!0,children:[envInfo.gitState.branchName,envInfo.gitState.commitHash?`, ${envInfo.gitState.commitHash.slice(0,7)}`:"",envInfo.gitState.remoteUrl?` @ ${envInfo.gitState.remoteUrl}`:"",!envInfo.gitState.isHeadOnRemote&&(isZh7?",\u672A\u540C\u6B65":", not synced"),!envInfo.gitState.isClean&&(isZh7?",\u6709\u672A\u63D0\u4EA4\u53D8\u66F4":", has local changes")]})]}),(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"- \u5F53\u524D\u4F1A\u8BDD\u8BB0\u5F55":"- Current session transcript"}),(0,import_jsx_runtime82.jsxs)(ThemedText,{children:[isZh7?"- \u7ED3\u6784\u5316\u73B0\u573A\u8BC1\u636E\u6458\u8981(\u5982\u6709): ":"- Structured field evidence digest (if present): ",(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u8FDE\u63A5\u3001\u8FDC\u7A0B\u3001SSH\u3001\u79FB\u52A8\u7AEF\u76F8\u5173\u75C7\u72B6":"connection, remote, SSH, and mobile-related symptoms"})]})]}),(0,import_jsx_runtime82.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime82.jsx)(ThemedText,{wrap:"wrap",dimColor:!0,children:isZh7?"\u6211\u4EEC\u4F1A\u7528\u4F60\u7684\u53CD\u9988\u6765\u8C03\u8BD5\u76F8\u5173\u95EE\u9898,\u6216\u6539\u8FDB\u514B\u62C9\u7EF4\u7684\u529F\u80FD(\u4F8B\u5982\u964D\u4F4E\u672A\u6765\u51FA\u73B0 Bug \u7684\u98CE\u9669)\u3002":"We will use your feedback to debug related issues or to improve Clavue's functionality (eg. to reduce the risk of bugs occurring in the future)."})}),(0,import_jsx_runtime82.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:["\u6309 ",(0,import_jsx_runtime82.jsx)(ThemedText,{bold:!0,children:"\u56DE\u8F66"})," \u786E\u8BA4\u5E76\u63D0\u4EA4\u3002"]}):(0,import_jsx_runtime82.jsxs)(import_jsx_runtime82.Fragment,{children:["Press ",(0,import_jsx_runtime82.jsx)(ThemedText,{bold:!0,children:"Enter"})," to confirm and submit."]})})})]}),step2==="submitting"&&(0,import_jsx_runtime82.jsx)(ThemedBox_default,{flexDirection:"row",gap:1,children:(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u6B63\u5728\u63D0\u4EA4\u62A5\u544A\u2026":"Submitting report\u2026"})}),step2==="done"&&(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{flexDirection:"column",children:[error40?(0,import_jsx_runtime82.jsx)(ThemedText,{color:"error",children:error40}):(0,import_jsx_runtime82.jsx)(ThemedText,{color:"success",children:isZh7?"\u611F\u8C22\u4F60\u7684\u53CD\u9988!":"Thank you for your report!"}),feedbackId&&(0,import_jsx_runtime82.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u53CD\u9988\u7F16\u53F7:${feedbackId}`:`Feedback ID: ${feedbackId}`}),(0,import_jsx_runtime82.jsxs)(ThemedBox_default,{marginTop:1,children:[(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u6309 ":"Press "}),(0,import_jsx_runtime82.jsx)(ThemedText,{bold:!0,children:isZh7?"\u56DE\u8F66 ":"Enter "}),(0,import_jsx_runtime82.jsx)(ThemedText,{children:isZh7?"\u53EF\u6253\u5F00\u6D4F\u89C8\u5668\u8D77\u8349 GitHub Issue,\u6309\u5176\u4ED6\u4EFB\u610F\u952E\u5173\u95ED\u3002":"to open your browser and draft a GitHub issue, or any other key to close."})]})]})]})}function createGitHubIssueUrl(feedbackId,title,description,errors){let sanitizedTitle=redactSensitiveInfo(title),bodyPrefix=`**Bug Description**
6268
6268
  ${redactSensitiveInfo(description)}
6269
6269
 
6270
6270
  **Environment Info**
6271
6271
  - Platform: ${env4.platform}
6272
6272
  - Terminal: ${env4.terminal}
6273
- - Version: 11.3.12
6273
+ - Version: 11.3.13
6274
6274
  - Feedback ID: ${feedbackId}
6275
6275
 
6276
6276
  **Errors**
@@ -6484,7 +6484,7 @@ Segments mode: summary structured as multi-section archive (goals \xB7 decisions
6484
6484
  `).filter(p=>p.length>0).map(p=>[style,p])))}function charWidth(ch2){return stringWidth(ch2)}function wrapText5(h3,width,theme2){let newLines=[];for(let line of h3.lines){let queue2=line.slice(),cur=[],curW=0;for(;queue2.length>0;){let[style,text3]=queue2.shift(),tw=stringWidth(text3);if(curW+tw<=width)cur.push([style,text3]),curW+=tw;else{let remaining=width-curW,bytePos=0,accW=0;for(let ch2 of text3){let cw=charWidth(ch2);if(accW+cw>remaining)break;accW+=cw,bytePos+=ch2.length}if(bytePos===0)if(curW===0)bytePos=text3.codePointAt(0)>65535?2:1;else{newLines.push(cur),queue2.unshift([style,text3]),cur=[],curW=0;continue}cur.push([style,text3.slice(0,bytePos)]),newLines.push(cur),queue2.unshift([style,text3.slice(bytePos)]),cur=[],curW=0}}newLines.push(cur)}if(h3.lines=newLines,h3.marker&&h3.marker!==" "){let bg=lineBackground(h3.marker,theme2),padStyle={foreground:theme2.foreground,background:bg};for(let line of h3.lines){let curW=line.reduce((s2,[,t8])=>s2+stringWidth(t8),0);curW<width&&line.push([padStyle," ".repeat(width-curW)])}}}function addLineNumber(h3,theme2,maxDigits,fullDim){let style={foreground:h3.marker?decorationColor(h3.marker,theme2):theme2.foreground,background:h3.marker?lineBackground(h3.marker,theme2):theme2.background},shouldDim=h3.marker===null||h3.marker===" ";for(let i3=0;i3<h3.lines.length;i3++){let prefix=i3===0?` ${String(h3.lineNumber).padStart(maxDigits)} `:" ".repeat(maxDigits+2),wrapped=shouldDim&&!fullDim?`${DIM}${prefix}${UNDIM}`:prefix;h3.lines[i3].unshift([style,wrapped])}}function addMarker(h3,theme2){if(!h3.marker)return;let style={foreground:decorationColor(h3.marker,theme2),background:lineBackground(h3.marker,theme2)};for(let line of h3.lines)line.unshift([style,h3.marker])}function dimContent(h3){for(let line of h3.lines)if(line.length>0){line[0][1]=DIM+line[0][1];let last2=line.length-1;line[last2][1]=line[last2][1]+UNDIM}}function applyBackground(h3,theme2,ranges){if(!h3.marker)return;let lineBg=lineBackground(h3.marker,theme2),wordBg=wordBackground(h3.marker,theme2),rangeIdx=0,byteOff=0;for(let li=0;li<h3.lines.length;li++){let newLine=[];for(let[style,text3]of h3.lines[li]){let textStart=byteOff,textEnd=byteOff+text3.length;for(;rangeIdx<ranges.length&&ranges[rangeIdx].end<=textStart;)rangeIdx++;if(rangeIdx>=ranges.length){newLine.push([{...style,background:lineBg},text3]),byteOff=textEnd;continue}let remaining=text3,pos=textStart;for(;remaining.length>0&&rangeIdx<ranges.length;){let r2=ranges[rangeIdx],inRange3=pos>=r2.start&&pos<r2.end,next;inRange3?next=Math.min(r2.end,textEnd):r2.start>pos&&r2.start<textEnd?next=r2.start:next=textEnd;let segLen=next-pos,seg=remaining.slice(0,segLen);newLine.push([{...style,background:inRange3?wordBg:lineBg},seg]),remaining=remaining.slice(segLen),pos=next,pos>=r2.end&&rangeIdx++}remaining.length>0&&newLine.push([{...style,background:lineBg},remaining]),byteOff=textEnd}h3.lines[li]=newLine}}function intoLines(h3,dim2,skipBg,mode){return h3.lines.map(line=>asTerminalEscaped(line,mode,skipBg,dim2))}function maxLineNumber(hunk){let oldEnd=Math.max(0,hunk.oldStart+hunk.oldLines-1),newEnd=Math.max(0,hunk.newStart+hunk.newLines-1);return Math.max(oldEnd,newEnd)}function parseMarker(s2){return s2==="+"||s2==="-"?s2:" "}function getSyntaxTheme(themeName){let envTheme=process.env.CLAUDE_CODE_SYNTAX_HIGHLIGHT??process.env.BAT_THEME;return{theme:defaultSyntaxThemeName(themeName),source:null}}var cachedHljs,RESET,DIM,UNDIM,DEFAULT_BG,CUBE_LEVELS,MONOKAI_SCOPES,GITHUB_SCOPES,STORAGE_KEYWORDS,ANSI_SCOPES,FILENAME_LANGS,loggedEmitterShapeError,CHANGE_THRESHOLD,ColorDiff,init_color_diff=__esm({"src/native-ts/color-diff/index.ts"(){init_libesm();init_stringWidth();init_log3();cachedHljs=null;__name(hljs,"hljs");RESET="\x1B[0m",DIM="\x1B[2m",UNDIM="\x1B[22m";__name(rgb,"rgb");__name(ansiIdx,"ansiIdx");DEFAULT_BG={r:0,g:0,b:0,a:1};__name(detectColorMode,"detectColorMode");CUBE_LEVELS=[0,95,135,175,215,255];__name(ansi256FromRgb,"ansi256FromRgb");__name(colorToEscape,"colorToEscape");__name(asTerminalEscaped,"asTerminalEscaped");__name(defaultSyntaxThemeName,"defaultSyntaxThemeName");MONOKAI_SCOPES={keyword:rgb(249,38,114),_storage:rgb(102,217,239),built_in:rgb(166,226,46),type:rgb(166,226,46),literal:rgb(190,132,255),number:rgb(190,132,255),string:rgb(230,219,116),title:rgb(166,226,46),"title.function":rgb(166,226,46),"title.class":rgb(166,226,46),"title.class.inherited":rgb(166,226,46),params:rgb(253,151,31),comment:rgb(117,113,94),meta:rgb(117,113,94),attr:rgb(166,226,46),attribute:rgb(166,226,46),variable:rgb(255,255,255),"variable.language":rgb(255,255,255),property:rgb(255,255,255),operator:rgb(249,38,114),punctuation:rgb(248,248,242),symbol:rgb(190,132,255),regexp:rgb(230,219,116),subst:rgb(248,248,242)},GITHUB_SCOPES={keyword:rgb(167,29,93),_storage:rgb(167,29,93),built_in:rgb(0,134,179),type:rgb(0,134,179),literal:rgb(0,134,179),number:rgb(0,134,179),string:rgb(24,54,145),title:rgb(121,93,163),"title.function":rgb(121,93,163),"title.class":rgb(0,0,0),"title.class.inherited":rgb(0,0,0),params:rgb(0,134,179),comment:rgb(150,152,150),meta:rgb(150,152,150),attr:rgb(0,134,179),attribute:rgb(0,134,179),variable:rgb(0,134,179),"variable.language":rgb(0,134,179),property:rgb(0,134,179),operator:rgb(167,29,93),punctuation:rgb(51,51,51),symbol:rgb(0,134,179),regexp:rgb(24,54,145),subst:rgb(51,51,51)},STORAGE_KEYWORDS=new Set(["const","let","var","function","class","type","interface","enum","namespace","module","def","fn","func","struct","trait","impl"]),ANSI_SCOPES={keyword:ansiIdx(13),_storage:ansiIdx(14),built_in:ansiIdx(14),type:ansiIdx(14),literal:ansiIdx(12),number:ansiIdx(12),string:ansiIdx(10),title:ansiIdx(11),"title.function":ansiIdx(11),"title.class":ansiIdx(11),comment:ansiIdx(8),meta:ansiIdx(8)};__name(buildTheme,"buildTheme");__name(defaultStyle,"defaultStyle");__name(lineBackground,"lineBackground");__name(wordBackground,"wordBackground");__name(decorationColor,"decorationColor");FILENAME_LANGS={Dockerfile:"dockerfile",Makefile:"makefile",Rakefile:"ruby",Gemfile:"ruby",CMakeLists:"cmake"};__name(detectLanguage,"detectLanguage");__name(scopeColor,"scopeColor");__name(flattenHljs,"flattenHljs");__name(hasRootNode,"hasRootNode");loggedEmitterShapeError=!1;__name(highlightLine,"highlightLine");CHANGE_THRESHOLD=.4;__name(tokenize4,"tokenize");__name(findAdjacentPairs,"findAdjacentPairs");__name(wordDiffStrings,"wordDiffStrings");__name(removeNewlines,"removeNewlines");__name(charWidth,"charWidth");__name(wrapText5,"wrapText");__name(addLineNumber,"addLineNumber");__name(addMarker,"addMarker");__name(dimContent,"dimContent");__name(applyBackground,"applyBackground");__name(intoLines,"intoLines");__name(maxLineNumber,"maxLineNumber");__name(parseMarker,"parseMarker");ColorDiff=class{static{__name(this,"ColorDiff")}hunk;filePath;firstLine;prefixContent;constructor(hunk,firstLine3,filePath,prefixContent){this.hunk=hunk,this.filePath=filePath,this.firstLine=firstLine3,this.prefixContent=prefixContent??null}render(themeName,width,dim2){let mode=detectColorMode(themeName),theme2=buildTheme(themeName,mode),hlState={lang:detectLanguage(this.filePath,this.firstLine),stack:null};this.prefixContent;let maxDigits=String(maxLineNumber(this.hunk)).length,oldLine=this.hunk.oldStart,newLine=this.hunk.newStart,effectiveWidth=Math.max(1,width-maxDigits-2-1),entries=this.hunk.lines.map(rawLine=>{let marker=parseMarker(rawLine.slice(0,1)),code=rawLine.slice(1),lineNumber;switch(marker){case"+":lineNumber=newLine++;break;case"-":lineNumber=oldLine++;break;case" ":lineNumber=newLine,oldLine++,newLine++;break}return{lineNumber,marker,code}}),ranges=entries.map(()=>[]);if(!dim2){let markers=entries.map(e2=>e2.marker);for(let[delIdx,addIdx]of findAdjacentPairs(markers)){let[delR,addR]=wordDiffStrings(entries[delIdx].code,entries[addIdx].code);ranges[delIdx]=delR,ranges[addIdx]=addR}}let out=[];for(let i3=0;i3<entries.length;i3++){let{lineNumber,marker,code}=entries[i3],tokens=marker==="-"?[[defaultStyle(theme2),code]]:highlightLine(hlState,code,theme2),h3={marker,lineNumber,lines:[tokens]};removeNewlines(h3),applyBackground(h3,theme2,ranges[i3]),wrapText5(h3,effectiveWidth,theme2),mode==="ansi"&&marker==="-"&&dimContent(h3),addMarker(h3,theme2),addLineNumber(h3,theme2,maxDigits,dim2),out.push(...intoLines(h3,dim2,!1,mode))}return out}};__name(getSyntaxTheme,"getSyntaxTheme")}});function getColorModuleUnavailableReason(){return isEnvDefinedFalsy(process.env.CLAUDE_CODE_SYNTAX_HIGHLIGHT)?"env":null}function expectColorDiff(){return getColorModuleUnavailableReason()===null?ColorDiff:null}function getSyntaxTheme2(themeName){return getColorModuleUnavailableReason()===null?getSyntaxTheme(themeName):null}var init_colorDiff=__esm({"src/components/StructuredDiff/colorDiff.ts"(){init_color_diff();init_envUtils();__name(getColorModuleUnavailableReason,"getColorModuleUnavailableReason");__name(expectColorDiff,"expectColorDiff");__name(getSyntaxTheme2,"getSyntaxTheme")}});function StructuredDiffFallback({patch,dim:dim2,width}){let[theme2]=useTheme(),diff=(0,import_react68.useMemo)(()=>formatDiff(patch.lines,patch.oldStart,width,dim2,theme2),[patch.lines,patch.oldStart,width,dim2,theme2]);return(0,import_jsx_runtime90.jsx)(ThemedBox_default,{flexDirection:"column",flexGrow:1,children:diff.map((node,i3)=>(0,import_jsx_runtime90.jsx)(ThemedBox_default,{children:node},i3))})}function transformLinesToObjects(lines){return lines.map(code=>code.startsWith("+")?{code:code.slice(1),i:0,type:"add",originalCode:code.slice(1)}:code.startsWith("-")?{code:code.slice(1),i:0,type:"remove",originalCode:code.slice(1)}:{code:code.slice(1),i:0,type:"nochange",originalCode:code.slice(1)})}function processAdjacentLines(lineObjects){let processedLines=[],i3=0;for(;i3<lineObjects.length;){let current=lineObjects[i3];if(!current){i3++;continue}if(current.type==="remove"){let removeLines=[current],j2=i3+1;for(;j2<lineObjects.length&&lineObjects[j2]?.type==="remove";){let line=lineObjects[j2];line&&removeLines.push(line),j2++}let addLines=[];for(;j2<lineObjects.length&&lineObjects[j2]?.type==="add";){let line=lineObjects[j2];line&&addLines.push(line),j2++}if(removeLines.length>0&&addLines.length>0){let pairCount=Math.min(removeLines.length,addLines.length);for(let k2=0;k2<pairCount;k2++){let removeLine=removeLines[k2],addLine=addLines[k2];removeLine&&addLine&&(removeLine.wordDiff=!0,addLine.wordDiff=!0,removeLine.matchedLine=addLine,addLine.matchedLine=removeLine)}processedLines.push(...removeLines.filter(Boolean)),processedLines.push(...addLines.filter(Boolean)),i3=j2}else processedLines.push(current),i3++}else processedLines.push(current),i3++}return processedLines}function calculateWordDiffs(oldText,newText){return diffWordsWithSpace(oldText,newText,{ignoreCase:!1})}function generateWordDiffElements(item,width,maxWidth,dim2,overrideTheme){let{type,i:i3,wordDiff:wordDiff2,matchedLine,originalCode}=item;if(!wordDiff2||!matchedLine)return null;let removedLineText=type==="remove"?originalCode:matchedLine.originalCode,addedLineText=type==="remove"?matchedLine.originalCode:originalCode,wordDiffs=calculateWordDiffs(removedLineText,addedLineText),totalLength=removedLineText.length+addedLineText.length;if(wordDiffs.filter(part=>part.added||part.removed).reduce((sum2,part)=>sum2+part.value.length,0)/totalLength>CHANGE_THRESHOLD2||dim2)return null;let diffPrefix=type==="add"?"+":"-",diffPrefixWidth=diffPrefix.length,availableContentWidth=Math.max(1,width-maxWidth-1-diffPrefixWidth),wrappedLines=[],currentLine=[],currentLineWidth=0;return wordDiffs.forEach((part,partIndex)=>{let shouldShow=!1,partBgColor;if(type==="add"?part.added?(shouldShow=!0,partBgColor="diffAddedWord"):part.removed||(shouldShow=!0):type==="remove"&&(part.removed?(shouldShow=!0,partBgColor="diffRemovedWord"):part.added||(shouldShow=!0)),!shouldShow)return;wrapText2(part.value,availableContentWidth,"wrap").split(`
6485
6485
  `).forEach((partLine,lineIdx)=>{partLine&&((lineIdx>0||currentLineWidth+stringWidth(partLine)>availableContentWidth)&&currentLine.length>0&&(wrappedLines.push({content:[...currentLine],contentWidth:currentLineWidth}),currentLine=[],currentLineWidth=0),currentLine.push((0,import_jsx_runtime90.jsx)(ThemedText,{backgroundColor:partBgColor,children:partLine},`part-${partIndex}-${lineIdx}`)),currentLineWidth+=stringWidth(partLine))})}),currentLine.length>0&&wrappedLines.push({content:currentLine,contentWidth:currentLineWidth}),wrappedLines.map(({content,contentWidth},lineIndex)=>{let key=`${type}-${i3}-${lineIndex}`,lineBgColor=type==="add"?dim2?"diffAddedDimmed":"diffAdded":dim2?"diffRemovedDimmed":"diffRemoved",lineNum=lineIndex===0?i3:void 0,lineNumStr=(lineNum!==void 0?lineNum.toString().padStart(maxWidth):" ".repeat(maxWidth))+" ",usedWidth=lineNumStr.length+diffPrefixWidth+contentWidth,padding=Math.max(0,width-usedWidth);return(0,import_jsx_runtime90.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime90.jsx)(NoSelect,{fromLeftEdge:!0,children:(0,import_jsx_runtime90.jsxs)(ThemedText,{color:overrideTheme?"text":void 0,backgroundColor:lineBgColor,dimColor:dim2,children:[lineNumStr,diffPrefix]})}),(0,import_jsx_runtime90.jsxs)(ThemedText,{color:overrideTheme?"text":void 0,backgroundColor:lineBgColor,dimColor:dim2,children:[content," ".repeat(padding)]})]},key)})}function formatDiff(lines,startingLineNumber,width,dim2,overrideTheme){let safeWidth=Math.max(1,Math.floor(width)),lineObjects=transformLinesToObjects(lines),processedLines=processAdjacentLines(lineObjects),ls=numberDiffLines(processedLines,startingLineNumber),maxLineNumber2=Math.max(...ls.map(({i:i3})=>i3),0),maxWidth=Math.max(maxLineNumber2.toString().length+1,0);return ls.flatMap(item=>{let{type,code,i:i3,wordDiff:wordDiff2,matchedLine}=item;if(wordDiff2&&matchedLine){let wordDiffElements=generateWordDiffElements(item,safeWidth,maxWidth,dim2,overrideTheme);if(wordDiffElements!==null)return wordDiffElements}let availableContentWidth=Math.max(1,safeWidth-maxWidth-1-2);return wrapText2(code,availableContentWidth,"wrap").split(`
6486
6486
  `).map((line,lineIndex)=>{let key=`${type}-${i3}-${lineIndex}`,lineNum=lineIndex===0?i3:void 0,lineNumStr=(lineNum!==void 0?lineNum.toString().padStart(maxWidth):" ".repeat(maxWidth))+" ",sigil=type==="add"?"+":type==="remove"?"-":" ",contentWidth=lineNumStr.length+1+stringWidth(line),padding=Math.max(0,safeWidth-contentWidth),bgColor=type==="add"?dim2?"diffAddedDimmed":"diffAdded":type==="remove"?dim2?"diffRemovedDimmed":"diffRemoved":void 0;return(0,import_jsx_runtime90.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime90.jsx)(NoSelect,{fromLeftEdge:!0,children:(0,import_jsx_runtime90.jsxs)(ThemedText,{color:overrideTheme?"text":void 0,backgroundColor:bgColor,dimColor:dim2||type==="nochange",children:[lineNumStr,sigil]})}),(0,import_jsx_runtime90.jsxs)(ThemedText,{color:overrideTheme?"text":void 0,backgroundColor:bgColor,dimColor:dim2,children:[line," ".repeat(padding)]})]},key)})})}function numberDiffLines(diff,startLine){let i3=startLine,result2=[],queue2=[...diff];for(;queue2.length>0;){let current=queue2.shift(),{code,type,originalCode,wordDiff:wordDiff2,matchedLine}=current,line={code,type,i:i3,originalCode,wordDiff:wordDiff2,matchedLine};switch(type){case"nochange":i3++,result2.push(line);break;case"add":i3++,result2.push(line);break;case"remove":{result2.push(line);let numRemoved=0;for(;queue2[0]?.type==="remove";){i3++;let current2=queue2.shift(),{code:code2,type:type2,originalCode:originalCode2,wordDiff:wordDiff3,matchedLine:matchedLine2}=current2,line2={code:code2,type:type2,i:i3,originalCode:originalCode2,wordDiff:wordDiff3,matchedLine:matchedLine2};result2.push(line2),numRemoved++}i3-=numRemoved;break}}}return result2}var import_react68,import_jsx_runtime90,CHANGE_THRESHOLD2,init_Fallback=__esm({"src/components/StructuredDiff/Fallback.tsx"(){init_libesm();import_react68=__toESM(require_react());init_stringWidth2();init_ink();import_jsx_runtime90=__toESM(require_jsx_runtime()),CHANGE_THRESHOLD2=.4;__name(StructuredDiffFallback,"StructuredDiffFallback");__name(transformLinesToObjects,"transformLinesToObjects");__name(processAdjacentLines,"processAdjacentLines");__name(calculateWordDiffs,"calculateWordDiffs");__name(generateWordDiffElements,"generateWordDiffElements");__name(formatDiff,"formatDiff");__name(numberDiffLines,"numberDiffLines")}});function computeGutterWidth(patch){return Math.max(patch.oldStart+patch.oldLines-1,patch.newStart+patch.newLines-1,1).toString().length+3}function renderColorDiff(patch,firstLine3,filePath,fileContent,theme2,width,dim2,splitGutter){let ColorDiff2=expectColorDiff();if(!ColorDiff2)return null;let rawGutterWidth=splitGutter?computeGutterWidth(patch):0,gutterWidth=rawGutterWidth>0&&rawGutterWidth<width?rawGutterWidth:0,key=`${theme2}|${width}|${dim2?1:0}|${gutterWidth}|${firstLine3??""}|${filePath}`,perHunk=RENDER_CACHE.get(patch),hit=perHunk?.get(key);if(hit)return hit;let lines=new ColorDiff2(patch,firstLine3,filePath,fileContent).render(theme2,width,dim2);if(lines===null)return null;let gutters=null,contents=null;gutterWidth>0&&(gutters=lines.map(l=>sliceAnsi(l,0,gutterWidth)),contents=lines.map(l=>sliceAnsi(l,gutterWidth)));let entry={lines,gutterWidth,gutters,contents};return perHunk||(perHunk=new Map,RENDER_CACHE.set(patch,perHunk)),perHunk.size>=4&&perHunk.clear(),perHunk.set(key,entry),entry}var import_react69,import_jsx_runtime91,RENDER_CACHE,StructuredDiff,init_StructuredDiff=__esm({"src/components/StructuredDiff.tsx"(){import_react69=__toESM(require_react());init_useSettings();init_ink();init_fullscreen();init_sliceAnsi();init_colorDiff();init_Fallback();import_jsx_runtime91=__toESM(require_jsx_runtime()),RENDER_CACHE=new WeakMap;__name(computeGutterWidth,"computeGutterWidth");__name(renderColorDiff,"renderColorDiff");StructuredDiff=(0,import_react69.memo)(__name(function({patch,dim:dim2,filePath,firstLine:firstLine3,fileContent,width,skipHighlighting=!1}){let[theme2]=useTheme(),syntaxHighlightingDisabled=useSettings().syntaxHighlightingDisabled??!1,safeWidth=Math.max(1,Math.floor(width)),splitGutter=isFullscreenEnvEnabled(),cached3=skipHighlighting||syntaxHighlightingDisabled?null:renderColorDiff(patch,firstLine3,filePath,fileContent??null,theme2,safeWidth,dim2,splitGutter);if(!cached3)return(0,import_jsx_runtime91.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime91.jsx)(StructuredDiffFallback,{patch,dim:dim2,width})});let{lines,gutterWidth,gutters,contents}=cached3;return gutterWidth>0&&gutters&&contents?(0,import_jsx_runtime91.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime91.jsx)(NoSelect,{fromLeftEdge:!0,children:(0,import_jsx_runtime91.jsx)(RawAnsi,{lines:gutters,width:gutterWidth})}),(0,import_jsx_runtime91.jsx)(RawAnsi,{lines:contents,width:safeWidth-gutterWidth})]}):(0,import_jsx_runtime91.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime91.jsx)(RawAnsi,{lines,width:safeWidth})})},"StructuredDiff"))}});function ThemePicker({onThemeSelect,showIntroText=!1,helpText:helpText4="",showHelpTextBelow=!1,hideEscToCancel=!1,skipExitHandling=!1,onCancel:onCancelProp}){let[theme2]=useTheme(),themeSetting=useThemeSetting(),{columns}=useTerminalSize(),colorModuleUnavailableReason=getColorModuleUnavailableReason(),syntaxTheme=colorModuleUnavailableReason===null?getSyntaxTheme2(theme2):null,{setPreviewTheme,savePreview,cancelPreview}=usePreviewTheme(),syntaxHighlightingDisabled=useAppState(s2=>s2.settings.syntaxHighlightingDisabled)??!1,setAppState=useSetAppState();useRegisterKeybindingContext("ThemePicker");let syntaxToggleShortcut=useShortcutDisplay("theme:toggleSyntaxHighlighting","ThemePicker","ctrl+t");useKeybinding("theme:toggleSyntaxHighlighting",()=>{if(colorModuleUnavailableReason===null){let newValue=!syntaxHighlightingDisabled;updateSettingsForSource("userSettings",{syntaxHighlightingDisabled:newValue}),setAppState(prev=>({...prev,settings:{...prev.settings,syntaxHighlightingDisabled:newValue}}))}},{context:"ThemePicker"});let exitState=useExitOnCtrlCDWithKeybindings(skipExitHandling?()=>{}:void 0),themeOptions=[{label:"Dark mode",value:"dark"},{label:"Light mode",value:"light"},{label:"Dark mode (colorblind-friendly)",value:"dark-daltonized"},{label:"Light mode (colorblind-friendly)",value:"light-daltonized"},{label:"Dark mode (ANSI colors only)",value:"dark-ansi"},{label:"Light mode (ANSI colors only)",value:"light-ansi"}],content=(0,import_jsx_runtime92.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime92.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[showIntroText?(0,import_jsx_runtime92.jsx)(ThemedText,{children:"Let's get started."}):(0,import_jsx_runtime92.jsx)(ThemedText,{bold:!0,color:"permission",children:"Theme"}),(0,import_jsx_runtime92.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime92.jsx)(ThemedText,{bold:!0,children:"Choose the text style that looks best with your terminal"}),helpText4&&!showHelpTextBelow&&(0,import_jsx_runtime92.jsx)(ThemedText,{dimColor:!0,children:helpText4})]}),(0,import_jsx_runtime92.jsx)(Select,{options:themeOptions,onFocus:setting=>{setPreviewTheme(setting)},onChange:setting=>{savePreview(),onThemeSelect(setting)},onCancel:skipExitHandling?()=>{cancelPreview(),onCancelProp?.()}:async()=>{cancelPreview(),await gracefulShutdown(0)},visibleOptionCount:themeOptions.length,defaultValue:themeSetting,defaultFocusValue:themeSetting})]}),(0,import_jsx_runtime92.jsxs)(ThemedBox_default,{flexDirection:"column",width:"100%",children:[(0,import_jsx_runtime92.jsx)(ThemedBox_default,{flexDirection:"column",borderTop:!0,borderBottom:!0,borderLeft:!1,borderRight:!1,borderStyle:"dashed",borderColor:"subtle",children:(0,import_jsx_runtime92.jsx)(StructuredDiff,{patch:{oldStart:1,newStart:1,oldLines:3,newLines:3,lines:[" function greet() {",'- console.log("Hello, World!");','+ console.log("Hello, Clavue!");'," }"]},dim:!1,filePath:"demo.js",firstLine:null,width:columns})}),(0,import_jsx_runtime92.jsxs)(ThemedText,{dimColor:!0,children:[" ",colorModuleUnavailableReason==="env"?`Syntax highlighting disabled (via CLAUDE_CODE_SYNTAX_HIGHLIGHT=${process.env.CLAUDE_CODE_SYNTAX_HIGHLIGHT})`:syntaxHighlightingDisabled?`Syntax highlighting disabled (${syntaxToggleShortcut} to enable)`:syntaxTheme?`Syntax theme: ${syntaxTheme.theme}${syntaxTheme.source?` (from ${syntaxTheme.source})`:""} (${syntaxToggleShortcut} to disable)`:`Syntax highlighting enabled (${syntaxToggleShortcut} to disable)`]})]})]});return showIntroText?content:(0,import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment,{children:[(0,import_jsx_runtime92.jsx)(ThemedBox_default,{flexDirection:"column",children:content}),(0,import_jsx_runtime92.jsxs)(ThemedBox_default,{marginTop:1,children:[showHelpTextBelow&&helpText4&&(0,import_jsx_runtime92.jsx)(ThemedBox_default,{marginLeft:3,children:(0,import_jsx_runtime92.jsx)(ThemedText,{dimColor:!0,children:helpText4})}),!hideEscToCancel&&(0,import_jsx_runtime92.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime92.jsx)(ThemedText,{dimColor:!0,italic:!0,children:exitState.pending?(0,import_jsx_runtime92.jsxs)(import_jsx_runtime92.Fragment,{children:["Press ",exitState.keyName," again to exit"]}):(0,import_jsx_runtime92.jsxs)(Byline,{children:[(0,import_jsx_runtime92.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"select"}),(0,import_jsx_runtime92.jsx)(KeyboardShortcutHint,{shortcut:"Esc",action:"cancel"})]})})})]})]})}var import_jsx_runtime92,init_ThemePicker=__esm({"src/components/ThemePicker.tsx"(){init_useExitOnCtrlCDWithKeybindings();init_useTerminalSize();init_ink();init_KeybindingContext();init_useKeybinding();init_useShortcutDisplay();init_AppState();init_gracefulShutdown();init_settings2();init_CustomSelect();init_Byline();init_KeyboardShortcutHint();init_colorDiff();init_StructuredDiff();import_jsx_runtime92=__toESM(require_jsx_runtime());__name(ThemePicker,"ThemePicker")}});function modelValuesEqual(a2,b3){return a2===null&&b3===null?!0:a2===null||b3===null?!1:a2.trim().toLowerCase()===b3.trim().toLowerCase()}function dedupeModelOptions(options){let seen=new Set,out=[];for(let opt of options){let key=opt.value===null?"__null__":opt.value.trim().toLowerCase();seen.has(key)||(seen.add(key),out.push(opt))}return out}function findOptionValueIgnoreCase(options,target){return target===null?options.some(o2=>o2.value===null)?null:void 0:options.find(o2=>modelValuesEqual(o2.value,target))?.value}function focusedDisplayName(option){if(!option)return"";let trimmed=option.label?.trim()??"";return trimmed!==""?trimmed:option.value===null?"Default":option.value}var init_modelPickerHelpers=__esm({"src/utils/model/modelPickerHelpers.ts"(){__name(modelValuesEqual,"modelValuesEqual");__name(dedupeModelOptions,"dedupeModelOptions");__name(findOptionValueIgnoreCase,"findOptionValueIgnoreCase");__name(focusedDisplayName,"focusedDisplayName")}});function effortLevelToSymbol(level){switch(level){case"low":return EFFORT_LOW;case"medium":return EFFORT_MEDIUM;case"high":case"xhigh":case"ultra":return EFFORT_HIGH;case"max":return EFFORT_MAX}}var init_EffortIndicator=__esm({"src/components/EffortIndicator.ts"(){init_figures2();init_effort4();__name(effortLevelToSymbol,"effortLevelToSymbol")}});function ModelPicker({initial:initial2,sessionModel,onSelect,onCancel,isStandaloneCommand,showFastModeNotice,headerText,skipSettingsWrite}){let setAppState=useSetAppState(),exitState=useExitOnCtrlCDWithKeybindings(),maxVisible=10,isFastMode=useAppState(s2=>isFastModeEnabled()?s2.fastMode:!1),[hasToggledEffort,setHasToggledEffort]=(0,import_react70.useState)(!1),effortValue=useAppState(s2=>s2.effortValue),[effort,setEffort]=(0,import_react70.useState)(effortValue!==void 0?convertEffortValueToLevel(effortValue):void 0),modelOptions=(0,import_react70.useMemo)(()=>getModelOptions(isFastMode??!1),[isFastMode]),optionsWithInitial=(0,import_react70.useMemo)(()=>{let deduped=dedupeModelOptions(modelOptions);return initial2!==null&&findOptionValueIgnoreCase(deduped,initial2)===void 0?[...deduped,{value:initial2,label:modelDisplayString(initial2),description:resolveUiLocale()==="zh-CN"?"\u5F53\u524D\u6A21\u578B":"Current model"}]:deduped},[modelOptions,initial2]),initialValue=(0,import_react70.useMemo)(()=>initial2===null?NO_PREFERENCE:findOptionValueIgnoreCase(optionsWithInitial,initial2)??initial2,[initial2,optionsWithInitial]),[focusedValue,setFocusedValue]=(0,import_react70.useState)(initialValue),selectOptions=(0,import_react70.useMemo)(()=>optionsWithInitial.map(opt=>({...opt,value:opt.value===null?NO_PREFERENCE:opt.value})),[optionsWithInitial]),initialFocusValue=(0,import_react70.useMemo)(()=>selectOptions.some(_2=>_2.value===initialValue)?initialValue:selectOptions[0]?.value??void 0,[selectOptions,initialValue]),visibleCount=Math.min(maxVisible,selectOptions.length),hiddenCount=Math.max(0,selectOptions.length-visibleCount),focusedOption=selectOptions.find(opt=>opt.value===focusedValue),focusedModelName=focusedDisplayName(focusedOption?{value:focusedOption.value===NO_PREFERENCE?null:focusedOption.value,label:focusedOption.label,description:focusedOption.description}:void 0),focusedModel=resolveOptionModel(focusedValue),focusedSupportsEffort=focusedModel?modelSupportsEffort(focusedModel):!1,focusedEffortLevels=focusedModel?getSupportedEffortLevels(focusedModel):[],focusedDefaultEffort=getDefaultEffortLevelForOption(focusedValue),displayEffort=effort&&!focusedEffortLevels.includes(effort)?"high":effort,handleFocus=(0,import_react70.useCallback)(value=>{setFocusedValue(value),!hasToggledEffort&&effortValue===void 0&&setEffort(getDefaultEffortLevelForOption(value))},[hasToggledEffort,effortValue]),handleCycleEffort=(0,import_react70.useCallback)(direction=>{focusedSupportsEffort&&(setEffort(prev=>cycleEffortLevel(prev??focusedDefaultEffort,direction,focusedEffortLevels)),setHasToggledEffort(!0))},[focusedSupportsEffort,focusedEffortLevels,focusedDefaultEffort]);useKeybindings({"modelPicker:decreaseEffort":__name(()=>handleCycleEffort("left"),"modelPicker:decreaseEffort"),"modelPicker:increaseEffort":__name(()=>handleCycleEffort("right"),"modelPicker:increaseEffort")},{context:"ModelPicker"});function handleSelect(value){if(logEvent("tengu_model_command_menu_effort",{effort}),!skipSettingsWrite){let effortLevel=resolvePickerEffortPersistence(effort,getDefaultEffortLevelForOption(value),getSettingsForSource("userSettings")?.effortLevel,hasToggledEffort),persistable=toPersistableEffort(effortLevel);persistable!==void 0&&updateSettingsForSource("userSettings",{effortLevel:persistable}),setAppState(prev=>({...prev,effortValue:effortLevel}))}let selectedModel=resolveOptionModel(value),selectedEffort=hasToggledEffort&&selectedModel&&modelSupportsEffort(selectedModel)?effort:void 0;if(value===NO_PREFERENCE){onSelect(null,selectedEffort);return}onSelect(value,selectedEffort)}__name(handleSelect,"handleSelect");let isZh7=resolveUiLocale()==="zh-CN",content=(0,import_jsx_runtime93.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime93.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime93.jsxs)(ThemedBox_default,{marginBottom:1,flexDirection:"column",children:[(0,import_jsx_runtime93.jsx)(ThemedText,{color:"remember",bold:!0,children:isZh7?"\u9009\u62E9\u6A21\u578B":"Select model"}),(0,import_jsx_runtime93.jsx)(ThemedText,{dimColor:!0,children:headerText??(isZh7?"\u8BBE\u7F6E\u4E3B\u4F1A\u8BDD\u6A21\u578B\u3002\u53EF\u4F7F\u7528 /provider \u914D\u7F6E\u5404\u670D\u52A1\u5546\u7684 Primary\u3001Sonnet\u3001Haiku\u3001Opus \u69FD\u4F4D\u3002":"Set the main session model. Use /provider to configure provider-specific Primary, Sonnet, Haiku, and Opus slots.")}),sessionModel&&(0,import_jsx_runtime93.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u672C\u4F1A\u8BDD\u5F53\u524D\u4F7F\u7528 ${modelDisplayString(sessionModel)}(\u7531\u8BA1\u5212\u6A21\u5F0F\u8BBE\u7F6E)\u3002\u91CD\u65B0\u9009\u62E9\u6A21\u578B\u5C06\u53D6\u6D88\u8BE5\u8BBE\u7F6E\u3002`:`Currently using ${modelDisplayString(sessionModel)} for this session (set by plan mode). Selecting a model will undo this.`})]}),(0,import_jsx_runtime93.jsxs)(ThemedBox_default,{flexDirection:"column",marginBottom:1,children:[(0,import_jsx_runtime93.jsx)(ThemedBox_default,{flexDirection:"column",children:(0,import_jsx_runtime93.jsx)(Select,{defaultValue:initialValue,defaultFocusValue:initialFocusValue,options:selectOptions,onChange:handleSelect,onFocus:handleFocus,onCancel:onCancel??(()=>{}),visibleOptionCount:visibleCount})}),hiddenCount>0&&(0,import_jsx_runtime93.jsx)(ThemedBox_default,{paddingLeft:3,children:(0,import_jsx_runtime93.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u8FD8\u6709 ${hiddenCount} \u9879\u2026`:`and ${hiddenCount} more\u2026`})})]}),(0,import_jsx_runtime93.jsx)(ThemedBox_default,{marginBottom:1,flexDirection:"column",children:focusedSupportsEffort?(0,import_jsx_runtime93.jsxs)(ThemedText,{dimColor:!0,children:[(0,import_jsx_runtime93.jsx)(EffortLevelIndicator,{effort:displayEffort})," ",isZh7?`${effortLevelLabelZh(displayEffort)} \u6295\u5165`:`${capitalize_default(displayEffort)} effort`,displayEffort===focusedDefaultEffort?isZh7?"(\u9ED8\u8BA4)":" (default)":""," ",(0,import_jsx_runtime93.jsx)(ThemedText,{color:"subtle",children:isZh7?"\u2190 \u2192 \u8C03\u6574":"\u2190 \u2192 to adjust"})]}):(0,import_jsx_runtime93.jsxs)(ThemedText,{color:"subtle",children:[(0,import_jsx_runtime93.jsx)(EffortLevelIndicator,{effort:void 0}),isZh7?` \u4E0D\u652F\u6301\u6295\u5165\u6863\u4F4D${focusedModelName?`(${focusedModelName})`:""}`:` Effort not supported${focusedModelName?` for ${focusedModelName}`:""}`]})}),isFastModeEnabled()?showFastModeNotice?(0,import_jsx_runtime93.jsx)(ThemedBox_default,{marginBottom:1,children:(0,import_jsx_runtime93.jsx)(ThemedText,{dimColor:!0,children:isZh7?(0,import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment,{children:["\u6781\u901F\u6A21\u5F0F ",(0,import_jsx_runtime93.jsx)(ThemedText,{bold:!0,children:"\u5DF2\u5F00\u542F"}),",\u4E14\u4EC5\u5728"," ",FAST_MODE_MODEL_DISPLAY," \u4E0A\u53EF\u7528(/fast)\u3002\u5207\u6362\u5230\u5176\u4ED6\u6A21\u578B\u4F1A\u81EA\u52A8\u5173\u95ED\u6781\u901F\u6A21\u5F0F\u3002"]}):(0,import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment,{children:["Fast mode is ",(0,import_jsx_runtime93.jsx)(ThemedText,{bold:!0,children:"ON"})," and available with"," ",FAST_MODE_MODEL_DISPLAY," only (/fast). Switching to other models turns off fast mode."]})})}):isFastModeAvailable()&&!isFastModeCooldown()?(0,import_jsx_runtime93.jsx)(ThemedBox_default,{marginBottom:1,children:(0,import_jsx_runtime93.jsx)(ThemedText,{dimColor:!0,children:isZh7?(0,import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment,{children:["\u4F7F\u7528 ",(0,import_jsx_runtime93.jsx)(ThemedText,{bold:!0,children:"/fast"})," \u5F00\u542F\u6781\u901F\u6A21\u5F0F(\u4EC5 ",FAST_MODE_MODEL_DISPLAY,")\u3002"]}):(0,import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment,{children:["Use ",(0,import_jsx_runtime93.jsx)(ThemedText,{bold:!0,children:"/fast"})," to turn on Fast mode (",FAST_MODE_MODEL_DISPLAY," only)."]})})}):null:null]}),isStandaloneCommand&&(0,import_jsx_runtime93.jsx)(ThemedText,{dimColor:!0,italic:!0,children:exitState.pending?(0,import_jsx_runtime93.jsx)(import_jsx_runtime93.Fragment,{children:isZh7?`\u518D\u6B21\u6309 ${exitState.keyName} \u9000\u51FA`:(0,import_jsx_runtime93.jsxs)(import_jsx_runtime93.Fragment,{children:["Press ",exitState.keyName," again to exit"]})}):(0,import_jsx_runtime93.jsxs)(Byline,{children:[(0,import_jsx_runtime93.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime93.jsx)(ConfigurableShortcutHint,{action:"select:cancel",context:"Select",fallback:"Esc",description:"exit"})]})})]});return isStandaloneCommand?(0,import_jsx_runtime93.jsx)(Pane,{color:"permission",children:content}):content}function effortLevelLabelZh(level){switch(level){case"low":return"\u4F4E";case"medium":return"\u4E2D";case"high":return"\u9AD8";case"xhigh":return"\u8D85\u9AD8";case"max":return"\u6700\u9AD8";case"ultra":return"\u6781\u9650"}}function resolveOptionModel(value){if(value)return value===NO_PREFERENCE?getDefaultMainLoopModel():parseUserSpecifiedModel(value)}function EffortLevelIndicator({effort}){return(0,import_jsx_runtime93.jsx)(ThemedText,{color:effort?"claude":"subtle",children:effortLevelToSymbol(effort??"low")})}function cycleEffortLevel(current,direction,levels){let supported=levels.length>0?levels:["low","medium","high"],idx=supported.indexOf(current),currentIndex=idx!==-1?idx:supported.indexOf("high");return direction==="right"?supported[(currentIndex+1)%supported.length]:supported[(currentIndex-1+supported.length)%supported.length]}function getDefaultEffortLevelForOption(value){let resolved=resolveOptionModel(value)??getDefaultMainLoopModel(),defaultValue=getDefaultEffortForModel(resolved);return defaultValue!==void 0?convertEffortValueToLevel(defaultValue):"high"}var import_react70,import_jsx_runtime93,NO_PREFERENCE,init_ModelPicker=__esm({"src/components/ModelPicker.tsx"(){init_capitalize();import_react70=__toESM(require_react());init_useExitOnCtrlCDWithKeybindings();init_analytics();init_fastMode();init_ink();init_useKeybinding();init_AppState();init_effort4();init_model3();init_modelOptions();init_modelPickerHelpers();init_settings2();init_uiLocale();init_ConfigurableShortcutHint();init_CustomSelect();init_Byline();init_KeyboardShortcutHint();init_Pane();init_EffortIndicator();import_jsx_runtime93=__toESM(require_jsx_runtime()),NO_PREFERENCE="__NO_PREFERENCE__";__name(ModelPicker,"ModelPicker");__name(effortLevelLabelZh,"effortLevelLabelZh");__name(resolveOptionModel,"resolveOptionModel");__name(EffortLevelIndicator,"EffortLevelIndicator");__name(cycleEffortLevel,"cycleEffortLevel");__name(getDefaultEffortLevelForOption,"getDefaultEffortLevelForOption")}});function isBilledAsExtraUsage(model,isFastMode,isOpus1mMerged){if(!isClaudeAISubscriber())return!1;if(isFastMode)return!0;if(model===null||!has1mContext(model))return!1;let m3=model.toLowerCase().replace(/\[1m\]$/,"").trim(),isOpus46=m3==="opus"||m3.includes("opus-4-6"),isSonnet46=m3==="sonnet"||m3.includes("sonnet-4-6");return isOpus46&&isOpus1mMerged?!1:isOpus46||isSonnet46}var init_extraUsage=__esm({"src/utils/extraUsage.ts"(){init_auth6();init_context4();__name(isBilledAsExtraUsage,"isBilledAsExtraUsage")}});var ClaudeMdExternalIncludesDialog_exports={};__export(ClaudeMdExternalIncludesDialog_exports,{ClaudeMdExternalIncludesDialog:()=>ClaudeMdExternalIncludesDialog});function ClaudeMdExternalIncludesDialog({onDone,isStandaloneDialog,externalIncludes}){import_react71.default.useEffect(()=>{logEvent("tengu_claude_md_includes_dialog_shown",{})},[]);let handleSelection=(0,import_react71.useCallback)(value=>{value==="no"?(logEvent("tengu_claude_md_external_includes_dialog_declined",{}),saveCurrentProjectConfig(current=>({...current,hasClaudeMdExternalIncludesApproved:!1,hasClaudeMdExternalIncludesWarningShown:!0}))):(logEvent("tengu_claude_md_external_includes_dialog_accepted",{}),saveCurrentProjectConfig(current=>({...current,hasClaudeMdExternalIncludesApproved:!0,hasClaudeMdExternalIncludesWarningShown:!0}))),onDone()},[onDone]),handleEscape=(0,import_react71.useCallback)(()=>{handleSelection("no")},[handleSelection]);return(0,import_jsx_runtime94.jsxs)(Dialog,{title:"Allow external \u0043LAUDE.md file imports?",color:"warning",onCancel:handleEscape,hideBorder:!isStandaloneDialog,hideInputGuide:!isStandaloneDialog,children:[(0,import_jsx_runtime94.jsx)(ThemedText,{children:"This project's clavue.md imports files outside the current working directory. Never allow this for third-party repositories."}),externalIncludes&&externalIncludes.length>0&&(0,import_jsx_runtime94.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime94.jsx)(ThemedText,{dimColor:!0,children:"External imports:"}),externalIncludes.map((include,i3)=>(0,import_jsx_runtime94.jsxs)(ThemedText,{dimColor:!0,children:[" ",include.path]},i3))]}),(0,import_jsx_runtime94.jsxs)(ThemedText,{dimColor:!0,children:["Important: Only use Clavue with files you trust. Accessing untrusted files may pose security risks"," ",(0,import_jsx_runtime94.jsx)(Link,{url:"https://www.clavue.com"})," "]}),(0,import_jsx_runtime94.jsx)(Select,{options:[{label:"Yes, allow external imports",value:"yes"},{label:"No, disable external imports",value:"no"}],onChange:value=>handleSelection(value)})]})}var import_react71,import_jsx_runtime94,init_ClaudeMdExternalIncludesDialog=__esm({"src/components/ClaudeMdExternalIncludesDialog.tsx"(){import_react71=__toESM(require_react());init_analytics();init_ink();init_config11();init_CustomSelect();init_Dialog();import_jsx_runtime94=__toESM(require_jsx_runtime());__name(ClaudeMdExternalIncludesDialog,"ClaudeMdExternalIncludesDialog")}});function ChannelDowngradeDialog({currentVersion,onChoice}){function handleSelect(value){onChoice(value)}__name(handleSelect,"handleSelect");function handleCancel(){onChoice("cancel")}__name(handleCancel,"handleCancel");let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime95.jsxs)(Dialog,{title:isZh7?"\u5207\u6362\u5230\u7A33\u5B9A\u901A\u9053":"Switch to Stable Channel",onCancel:handleCancel,color:"permission",hideBorder:!0,hideInputGuide:!0,children:[(0,import_jsx_runtime95.jsx)(ThemedText,{children:isZh7?`\u7A33\u5B9A\u901A\u9053\u7684\u7248\u672C\u53EF\u80FD\u4F4E\u4E8E\u5F53\u524D\u8FD0\u884C\u7248\u672C(${currentVersion})\u3002`:`The stable channel may have an older version than what you're currently running (${currentVersion}).`}),(0,import_jsx_runtime95.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u4F60\u5E0C\u671B\u5982\u4F55\u5904\u7406?":"How would you like to handle this?"}),(0,import_jsx_runtime95.jsx)(Select,{options:[{label:isZh7?"\u5141\u8BB8\u964D\u7EA7\u5230\u7A33\u5B9A\u7248\u672C":"Allow possible downgrade to stable version",value:"downgrade"},{label:isZh7?`\u4FDD\u7559\u5F53\u524D\u7248\u672C (${currentVersion}) \u76F4\u5230\u7A33\u5B9A\u901A\u9053\u8FFD\u4E0A`:`Stay on current version (${currentVersion}) until stable catches up`,value:"stay"}],onChange:handleSelect})]})}var import_jsx_runtime95,init_ChannelDowngradeDialog=__esm({"src/components/ChannelDowngradeDialog.tsx"(){init_ink();init_uiLocale();init_CustomSelect();init_Dialog();import_jsx_runtime95=__toESM(require_jsx_runtime());__name(ChannelDowngradeDialog,"ChannelDowngradeDialog")}});function mapConfigsToOptions(styles4){return Object.entries(styles4).map(([style,config3])=>({label:config3?.name??DEFAULT_OUTPUT_STYLE_LABEL,value:style,description:config3?.description??DEFAULT_OUTPUT_STYLE_DESCRIPTION}))}function OutputStylePicker({initialStyle,onComplete,onCancel,isStandaloneCommand}){let[styleOptions,setStyleOptions]=(0,import_react72.useState)([]),[isLoading,setIsLoading]=(0,import_react72.useState)(!0);(0,import_react72.useEffect)(()=>{getAllOutputStyles(getCwd()).then(allStyles=>{let options=mapConfigsToOptions(allStyles);setStyleOptions(options),setIsLoading(!1)}).catch(()=>{let builtInOptions=mapConfigsToOptions(OUTPUT_STYLE_CONFIG);setStyleOptions(builtInOptions),setIsLoading(!1)})},[]);let handleStyleSelect=(0,import_react72.useCallback)(style=>{onComplete(style)},[onComplete]);return(0,import_jsx_runtime96.jsx)(Dialog,{title:"Preferred output style",onCancel,hideInputGuide:!isStandaloneCommand,hideBorder:!isStandaloneCommand,children:(0,import_jsx_runtime96.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime96.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime96.jsx)(ThemedText,{dimColor:!0,children:"This changes how Clavue communicates with you"})}),isLoading?(0,import_jsx_runtime96.jsx)(ThemedText,{dimColor:!0,children:"Loading output styles\u2026"}):(0,import_jsx_runtime96.jsx)(Select,{options:styleOptions,onChange:handleStyleSelect,visibleOptionCount:10,defaultValue:initialStyle})]})})}var import_react72,import_jsx_runtime96,DEFAULT_OUTPUT_STYLE_LABEL,DEFAULT_OUTPUT_STYLE_DESCRIPTION,init_OutputStylePicker=__esm({"src/components/OutputStylePicker.tsx"(){import_react72=__toESM(require_react());init_outputStyles();init_ink();init_cwd2();init_select();init_Dialog();import_jsx_runtime96=__toESM(require_jsx_runtime()),DEFAULT_OUTPUT_STYLE_LABEL="Default",DEFAULT_OUTPUT_STYLE_DESCRIPTION="Clavue completes coding tasks efficiently and provides concise responses";__name(mapConfigsToOptions,"mapConfigsToOptions");__name(OutputStylePicker,"OutputStylePicker")}});function LanguagePicker({initialLanguage,onComplete,onCancel,primaryOnly=!1}){let locale=resolveUiLocale(),isZh7=locale==="zh-CN",isJa2=locale==="ja-JP",options=primaryOnly?PRIMARY:[...PRIMARY,...EXTENDED],[selectedIndex,setSelectedIndex]=(0,import_react73.useState)(Math.max(0,options.findIndex(l=>l.locale===initialLanguage||initialLanguage==="en-US"&&l.locale==="en"||initialLanguage==="ja"&&l.locale==="ja-JP")));useKeybinding("confirm:no",onCancel,{context:"Settings"}),useInput((_input,key)=>{key.upArrow||_input==="k"?setSelectedIndex(i3=>(i3-1+options.length)%options.length):key.downArrow||_input==="j"?setSelectedIndex(i3=>(i3+1)%options.length):key.return&&onComplete(options[selectedIndex]?.locale)});let title=isZh7?"\u9009\u62E9\u8BED\u8A00 / Choose Language / \u8A00\u8A9E":isJa2?"\u8A00\u8A9E\u3092\u9078\u629E / Choose Language / \u9009\u62E9\u8BED\u8A00":"Choose Language / \u9009\u62E9\u8BED\u8A00 / \u8A00\u8A9E",hint=isZh7?`${figures_default.arrowUp}${figures_default.arrowDown} \u9009\u62E9 Enter \u786E\u8BA4 Esc \u53D6\u6D88`:isJa2?`${figures_default.arrowUp}${figures_default.arrowDown} \u9078\u629E Enter \u6C7A\u5B9A Esc \u30AD\u30E3\u30F3\u30BB\u30EB`:`${figures_default.arrowUp}${figures_default.arrowDown} navigate Enter confirm Esc cancel`;return(0,import_jsx_runtime97.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime97.jsx)(ThemedText,{bold:!0,children:title}),(0,import_jsx_runtime97.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u754C\u9762\u6587\u6848\u4E0E\u6A21\u578B\u5BF9\u8BDD\u90FD\u4F1A\u6309\u6240\u9009\u8BED\u8A00\u6DF1\u5EA6\u9002\u914D\uFF08\u4E2D / \u82F1 / \u65E5\u4F18\u5148\uFF09":isJa2?"UI \u3068\u30E2\u30C7\u30EB\u5BFE\u8A71\u306E\u4E21\u65B9\u3092\u9078\u629E\u8A00\u8A9E\u306B\u5408\u308F\u305B\u3066\u6700\u9069\u5316\u3057\u307E\u3059\uFF08\u4E2D/\u82F1/\u65E5\uFF09":"UI chrome and model interaction adapt to your language (zh / en / ja first)"}),(0,import_jsx_runtime97.jsx)(ThemedBox_default,{flexDirection:"column",gap:0,children:options.map((lang,i3)=>{let isSelected=i3===selectedIndex;return(0,import_jsx_runtime97.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime97.jsxs)(ThemedText,{color:isSelected?"warning":void 0,bold:isSelected,children:[isSelected?figures_default.pointer:" "," ",lang.flag," ",lang.name,PRIMARY.some(p=>p.locale===lang.locale)?(0,import_jsx_runtime97.jsx)(ThemedText,{dimColor:!0,children:isZh7?" \xB7 \u5B8C\u6574\u9002\u914D":isJa2?" \xB7 \u30D5\u30EB\u5BFE\u5FDC":" \xB7 full profile"}):null]})},lang.locale)})}),(0,import_jsx_runtime97.jsx)(ThemedText,{dimColor:!0,children:hint})]})}var import_react73,import_jsx_runtime97,PRIMARY,EXTENDED,init_LanguagePicker=__esm({"src/components/LanguagePicker.tsx"(){init_figures();import_react73=__toESM(require_react());init_ink();init_useKeybinding();init_localeProfiles();init_uiLocale();import_jsx_runtime97=__toESM(require_jsx_runtime()),PRIMARY=PRIMARY_LOCALES.map(locale=>{let p=resolveLocaleProfile(locale);return{flag:p.flag,name:p.nativeName,locale:p.tag}}),EXTENDED=[{flag:"\u{1F1F0}\u{1F1F7}",name:"\uD55C\uAD6D\uC5B4",locale:"ko-KR"},{flag:"\u{1F1EB}\u{1F1F7}",name:"Fran\xE7ais",locale:"fr-FR"},{flag:"\u{1F1E9}\u{1F1EA}",name:"Deutsch",locale:"de-DE"},{flag:"\u{1F1EA}\u{1F1F8}",name:"Espa\xF1ol",locale:"es-ES"},{flag:"\u{1F1F5}\u{1F1F9}",name:"Portugu\xEAs",locale:"pt-PT"},{flag:"\u{1F1EE}\u{1F1F9}",name:"Italiano",locale:"it-IT"},{flag:"\u{1F1F7}\u{1F1FA}",name:"\u0420\u0443\u0441\u0441\u043A\u0438\u0439",locale:"ru-RU"},{flag:"\u{1F1F8}\u{1F1E6}",name:"\u0627\u0644\u0639\u0631\u0628\u064A\u0629",locale:"ar-SA"},{flag:"\u{1F1EE}\u{1F1F3}",name:"\u0939\u093F\u0928\u094D\u0926\u0940",locale:"hi-IN"},{flag:"\u{1F1F9}\u{1F1ED}",name:"\u0E44\u0E17\u0E22",locale:"th-TH"},{flag:"\u{1F1FB}\u{1F1F3}",name:"Ti\u1EBFng Vi\u1EC7t",locale:"vi-VN"},{flag:"\u{1F1EE}\u{1F1E9}",name:"Bahasa Indonesia",locale:"id-ID"},{flag:"\u{1F1F3}\u{1F1F1}",name:"Nederlands",locale:"nl-NL"},{flag:"\u{1F1F5}\u{1F1F1}",name:"Polski",locale:"pl-PL"},{flag:"\u{1F1F9}\u{1F1F7}",name:"T\xFCrk\xE7e",locale:"tr-TR"},{flag:"\u{1F1FA}\u{1F1E6}",name:"\u0423\u043A\u0440\u0430\u0457\u043D\u0441\u044C\u043A\u0430",locale:"uk-UA"}];__name(LanguagePicker,"LanguagePicker")}});function Config({onClose,context:context2,setTabsHidden,onIsSearchModeChange,contentHeight}){let{headerFocused,focusHeader}=useTabHeaderFocus(),insideModal=useIsInsideModal(),[,setTheme]=useTheme(),themeSetting=useThemeSetting(),[globalConfig2,setGlobalConfig]=(0,import_react74.useState)(getGlobalConfig()),initialConfig=React40.useRef(getGlobalConfig()),[settingsData,setSettingsData]=(0,import_react74.useState)(getInitialSettings()),initialSettingsData=React40.useRef(getInitialSettings()),[currentOutputStyle,setCurrentOutputStyle]=(0,import_react74.useState)(settingsData?.outputStyle||DEFAULT_OUTPUT_STYLE_NAME),initialOutputStyle=React40.useRef(currentOutputStyle),[currentLanguage,setCurrentLanguage]=(0,import_react74.useState)(settingsData?.language),initialLanguage=React40.useRef(currentLanguage),[selectedIndex,setSelectedIndex]=(0,import_react74.useState)(0),[scrollOffset,setScrollOffset]=(0,import_react74.useState)(0),[isSearchMode,setIsSearchMode]=(0,import_react74.useState)(!0),isTerminalFocused=useTerminalFocus(),{rows}=useTerminalSize(),paneCap=contentHeight??Math.min(Math.floor(rows*.8),30),maxVisible=Math.max(5,paneCap-10),mainLoopModel=useAppState(s2=>s2.mainLoopModel),verbose=useAppState(s2=>s2.verbose),thinkingEnabled=useAppState(s2=>s2.thinkingEnabled),isFastMode=useAppState(s2=>isFastModeEnabled()?s2.fastMode:!1),promptSuggestionEnabled=useAppState(s2=>s2.promptSuggestionEnabled),showAutoInDefaultModePicker=hasAutoModeOptInAnySource()||getAutoModeEnabledState()==="enabled",showDefaultViewPicker=!1,setAppState=useSetAppState(),[changes,setChanges]=(0,import_react74.useState)({}),initialThinkingEnabled=React40.useRef(thinkingEnabled),[initialLocalSettings]=(0,import_react74.useState)(()=>getSettingsForSource("localSettings")),[initialUserSettings]=(0,import_react74.useState)(()=>getSettingsForSource("userSettings")),initialThemeSetting=React40.useRef(themeSetting),store=useAppStateStore(),[initialAppState]=(0,import_react74.useState)(()=>{let s2=store.getState();return{mainLoopModel:s2.mainLoopModel,mainLoopModelForSession:s2.mainLoopModelForSession,verbose:s2.verbose,thinkingEnabled:s2.thinkingEnabled,fastMode:s2.fastMode,promptSuggestionEnabled:s2.promptSuggestionEnabled,isBriefOnly:s2.isBriefOnly,replBridgeEnabled:s2.replBridgeEnabled,replBridgeOutboundOnly:s2.replBridgeOutboundOnly,settings:s2.settings}}),[initialUserMsgOptIn]=(0,import_react74.useState)(()=>getUserMsgOptIn3()),isDirty2=React40.useRef(!1),[showThinkingWarning,setShowThinkingWarning]=(0,import_react74.useState)(!1),[showSubmenu,setShowSubmenu]=(0,import_react74.useState)(null),{query:searchQuery,setQuery:setSearchQuery,cursorOffset:searchCursorOffset}=useSearchInput({isActive:isSearchMode&&showSubmenu===null&&!headerFocused,onExit:__name(()=>setIsSearchMode(!1),"onExit"),onExitUp:focusHeader,passthroughCtrlKeys:["c","d"]}),ownsEsc=isSearchMode&&!headerFocused;React40.useEffect(()=>{onIsSearchModeChange?.(ownsEsc)},[ownsEsc,onIsSearchModeChange]);let isConnectedToIde=hasAccessToIDEExtensionDiffFeature(context2.options.mcpClients),isFileCheckpointingAvailable=!isEnvTruthy2(process.env.CLAUDE_CODE_DISABLE_FILE_CHECKPOINTING),memoryFiles=React40.use(getMemoryFiles(!0)),shouldShowExternalIncludesToggle=hasExternalClaudeMdIncludes(memoryFiles),autoUpdaterDisabledReason=getAutoUpdaterDisabledReason();function onChangeMainModelConfig(value){logEvent("tengu_config_model_changed",{from_model:mainLoopModel,to_model:value}),setAppState(prev=>({...prev,mainLoopModel:value,mainLoopModelForSession:null})),setChanges(prev=>{let valStr=modelDisplayString(value)+(isBilledAsExtraUsage(value,!1,isOpus1mMergeEnabled())?" \xB7 Billed as extra usage":"");if("model"in prev){let{model,...rest2}=prev;return{...rest2,model:valStr}}return{...prev,model:valStr}})}__name(onChangeMainModelConfig,"onChangeMainModelConfig");function onChangeVerbose(value){saveGlobalConfig(current=>({...current,verbose:value})),setGlobalConfig({...getGlobalConfig(),verbose:value}),setAppState(prev=>({...prev,verbose:value})),setChanges(prev=>{if("verbose"in prev){let{verbose:verbose2,...rest2}=prev;return rest2}return{...prev,verbose:value}})}__name(onChangeVerbose,"onChangeVerbose");let settingsItems=[{id:"autoCompactEnabled",label:"Auto-compact",value:globalConfig2.autoCompactEnabled,type:"boolean",onChange(autoCompactEnabled){saveGlobalConfig(current=>({...current,autoCompactEnabled})),setGlobalConfig({...getGlobalConfig(),autoCompactEnabled}),logEvent("tengu_auto_compact_setting_changed",{enabled:autoCompactEnabled})}},{id:"spinnerTipsEnabled",label:"Show tips",value:settingsData?.spinnerTipsEnabled??!0,type:"boolean",onChange(spinnerTipsEnabled){updateSettingsForSource("localSettings",{spinnerTipsEnabled}),setSettingsData(prev=>({...prev,spinnerTipsEnabled})),logEvent("tengu_tips_setting_changed",{enabled:spinnerTipsEnabled})}},{id:"prefersReducedMotion",label:"Reduce motion",value:settingsData?.prefersReducedMotion??!1,type:"boolean",onChange(prefersReducedMotion){updateSettingsForSource("localSettings",{prefersReducedMotion}),setSettingsData(prev=>({...prev,prefersReducedMotion})),setAppState(prev=>({...prev,settings:{...prev.settings,prefersReducedMotion}})),logEvent("tengu_reduce_motion_setting_changed",{enabled:prefersReducedMotion})}},{id:"thinkingEnabled",label:"Thinking mode",value:thinkingEnabled??!1,type:"boolean",onChange(enabled){setAppState(prev=>({...prev,thinkingEnabled:enabled})),updateSettingsForSource("userSettings",{alwaysThinkingEnabled:enabled?void 0:!1}),logEvent("tengu_thinking_toggled",{enabled})}},...isFastModeEnabled()&&isFastModeAvailable()?[{id:"fastMode",label:`Fast mode (${FAST_MODE_MODEL_DISPLAY} only)`,value:!!isFastMode,type:"boolean",onChange(enabled){clearFastModeCooldown(),updateSettingsForSource("userSettings",{fastMode:enabled?!0:void 0}),enabled?(setAppState(prev=>({...prev,mainLoopModel:getFastModeModel(),mainLoopModelForSession:null,fastMode:!0})),setChanges(prev=>({...prev,model:getFastModeModel(),"Fast mode":"ON"}))):(setAppState(prev=>({...prev,fastMode:!1})),setChanges(prev=>({...prev,"Fast mode":"OFF"})))}}]:[],...getFeatureValue_CACHED_MAY_BE_STALE("tengu_chomp_inflection",!1)?[{id:"promptSuggestionEnabled",label:"Prompt suggestions",value:promptSuggestionEnabled,type:"boolean",onChange(enabled){setAppState(prev=>({...prev,promptSuggestionEnabled:enabled})),updateSettingsForSource("userSettings",{promptSuggestionEnabled:enabled?void 0:!1})}}]:[],...isFileCheckpointingAvailable?[{id:"fileCheckpointingEnabled",label:"Rewind code (checkpoints)",value:globalConfig2.fileCheckpointingEnabled,type:"boolean",onChange(enabled){saveGlobalConfig(current=>({...current,fileCheckpointingEnabled:enabled})),setGlobalConfig({...getGlobalConfig(),fileCheckpointingEnabled:enabled}),logEvent("tengu_file_history_snapshots_setting_changed",{enabled})}}]:[],{id:"verbose",label:"Verbose output",value:verbose,type:"boolean",onChange:onChangeVerbose},{id:"terminalProgressBarEnabled",label:"Terminal progress bar",value:globalConfig2.terminalProgressBarEnabled,type:"boolean",onChange(terminalProgressBarEnabled){saveGlobalConfig(current=>({...current,terminalProgressBarEnabled})),setGlobalConfig({...getGlobalConfig(),terminalProgressBarEnabled}),logEvent("tengu_terminal_progress_bar_setting_changed",{enabled:terminalProgressBarEnabled})}},...getFeatureValue_CACHED_MAY_BE_STALE("tengu_terminal_sidebar",!1)?[{id:"showStatusInTerminalTab",label:"Show status in terminal tab",value:globalConfig2.showStatusInTerminalTab??!1,type:"boolean",onChange(showStatusInTerminalTab){saveGlobalConfig(current=>({...current,showStatusInTerminalTab})),setGlobalConfig({...getGlobalConfig(),showStatusInTerminalTab}),logEvent("tengu_terminal_tab_status_setting_changed",{enabled:showStatusInTerminalTab})}}]:[],{id:"showTurnDuration",label:"Show turn duration",value:globalConfig2.showTurnDuration,type:"boolean",onChange(showTurnDuration){saveGlobalConfig(current=>({...current,showTurnDuration})),setGlobalConfig({...getGlobalConfig(),showTurnDuration}),logEvent("tengu_show_turn_duration_setting_changed",{enabled:showTurnDuration})}},{id:"showOverviewSidebar",label:"Overview sidebar (wide terminals)",value:globalConfig2.showOverviewSidebar??!0,type:"boolean",onChange(showOverviewSidebar){saveGlobalConfig(current=>({...current,showOverviewSidebar})),setGlobalConfig({...getGlobalConfig(),showOverviewSidebar}),logEvent("tengu_show_overview_sidebar_setting_changed",{enabled:showOverviewSidebar})}},{id:"defaultPermissionMode",label:"Default permission mode",value:settingsData?.permissions?.defaultMode||"default",options:(()=>{let priorityOrder=["default","plan"],allModes=feature("TRANSCRIPT_CLASSIFIER")?PERMISSION_MODES:EXTERNAL_PERMISSION_MODES,excluded=["bypassPermissions","dontAsk"];return showAutoInDefaultModePicker||excluded.push("auto"),[...priorityOrder,...allModes.filter(m3=>!priorityOrder.includes(m3)&&!excluded.includes(m3))]})(),type:"enum",onChange(mode){let parsedMode=permissionModeFromString(mode),validatedMode=isExternalPermissionMode(parsedMode)?toExternalPermissionMode(parsedMode):parsedMode,result2=updateSettingsForSource("userSettings",{permissions:{...settingsData?.permissions,defaultMode:validatedMode}});if(result2.error){logError2(result2.error);return}setSettingsData(prev=>({...prev,permissions:{...prev?.permissions,defaultMode:validatedMode}})),setChanges(prev=>({...prev,defaultPermissionMode:mode})),logEvent("tengu_config_changed",{setting:"defaultPermissionMode",value:mode})}},...showAutoInDefaultModePicker?[{id:"useAutoModeDuringPlan",label:"Use auto mode during plan",value:settingsData?.useAutoModeDuringPlan??!0,type:"boolean",onChange(useAutoModeDuringPlan){updateSettingsForSource("userSettings",{useAutoModeDuringPlan}),setSettingsData(prev=>({...prev,useAutoModeDuringPlan})),setAppState(prev=>{let next=transitionPlanAutoMode(prev.toolPermissionContext);return next===prev.toolPermissionContext?prev:{...prev,toolPermissionContext:next}}),setChanges(prev=>({...prev,"Use auto mode during plan":useAutoModeDuringPlan}))}}]:[],{id:"respectGitignore",label:"Respect .gitignore in file picker",value:globalConfig2.respectGitignore,type:"boolean",onChange(respectGitignore){saveGlobalConfig(current=>({...current,respectGitignore})),setGlobalConfig({...getGlobalConfig(),respectGitignore}),logEvent("tengu_respect_gitignore_setting_changed",{enabled:respectGitignore})}},{id:"copyFullResponse",label:"Always copy full response (skip /copy picker)",value:globalConfig2.copyFullResponse,type:"boolean",onChange(copyFullResponse){saveGlobalConfig(current=>({...current,copyFullResponse})),setGlobalConfig({...getGlobalConfig(),copyFullResponse}),logEvent("tengu_config_changed",{setting:"copyFullResponse",value:String(copyFullResponse)})}},...isFullscreenEnvEnabled()?[{id:"copyOnSelect",label:"Copy on select",value:globalConfig2.copyOnSelect??!0,type:"boolean",onChange(copyOnSelect){saveGlobalConfig(current=>({...current,copyOnSelect})),setGlobalConfig({...getGlobalConfig(),copyOnSelect}),logEvent("tengu_config_changed",{setting:"copyOnSelect",value:String(copyOnSelect)})}}]:[],autoUpdaterDisabledReason?{id:"autoUpdatesChannel",label:"Auto-update channel",value:"disabled",type:"managedEnum",onChange(){}}:{id:"autoUpdatesChannel",label:"Auto-update channel",value:settingsData?.autoUpdatesChannel??"latest",type:"managedEnum",onChange(){}},{id:"theme",label:"Theme",value:themeSetting,type:"managedEnum",onChange:setTheme},{id:"notifChannel",label:"Notifications",value:globalConfig2.preferredNotifChannel,options:["auto","iterm2","terminal_bell","iterm2_with_bell","kitty","ghostty","notifications_disabled"],type:"enum",onChange(notifChannel){saveGlobalConfig(current=>({...current,preferredNotifChannel:notifChannel})),setGlobalConfig({...getGlobalConfig(),preferredNotifChannel:notifChannel})}},{id:"outputStyle",label:"Output style",value:currentOutputStyle,type:"managedEnum",onChange:__name(()=>{},"onChange")},...showDefaultViewPicker?[{id:"defaultView",label:"What you see by default",value:settingsData?.defaultView===void 0?"default":String(settingsData.defaultView),options:["transcript","chat","default"],type:"enum",onChange(selected){let defaultView=selected==="default"?void 0:selected;updateSettingsForSource("localSettings",{defaultView}),setSettingsData(prev=>({...prev,defaultView}));let nextBrief=defaultView==="chat";setAppState(prev=>prev.isBriefOnly===nextBrief?prev:{...prev,isBriefOnly:nextBrief}),setUserMsgOptIn(nextBrief),setChanges(prev=>({...prev,"Default view":selected})),logEvent("tengu_default_view_setting_changed",{value:defaultView??"unset"})}}]:[],{id:"language",label:"Language",value:currentLanguage??"Default (English)",type:"managedEnum",onChange:__name(()=>{},"onChange")},{id:"editorMode",label:"Editor mode",value:globalConfig2.editorMode==="emacs"?"normal":globalConfig2.editorMode||"normal",options:["normal","vim"],type:"enum",onChange(value){saveGlobalConfig(current=>({...current,editorMode:value})),setGlobalConfig({...getGlobalConfig(),editorMode:value}),logEvent("tengu_editor_mode_changed",{mode:value,source:"config_panel"})}},{id:"prStatusFooterEnabled",label:"Show PR status footer",value:globalConfig2.prStatusFooterEnabled??!0,type:"boolean",onChange(enabled){saveGlobalConfig(current=>current.prStatusFooterEnabled===enabled?current:{...current,prStatusFooterEnabled:enabled}),setGlobalConfig({...getGlobalConfig(),prStatusFooterEnabled:enabled}),logEvent("tengu_pr_status_footer_setting_changed",{enabled})}},{id:"model",label:"Model",value:mainLoopModel===null?"Default (recommended)":mainLoopModel,type:"managedEnum",onChange:onChangeMainModelConfig},...isConnectedToIde?[{id:"diffTool",label:"Diff tool",value:globalConfig2.diffTool??"auto",options:["terminal","auto"],type:"enum",onChange(diffTool){saveGlobalConfig(current=>({...current,diffTool})),setGlobalConfig({...getGlobalConfig(),diffTool}),logEvent("tengu_diff_tool_changed",{tool:diffTool,source:"config_panel"})}}]:[],...isSupportedTerminal()?[]:[{id:"autoConnectIde",label:"Auto-connect to IDE (external terminal)",value:globalConfig2.autoConnectIde??!1,type:"boolean",onChange(autoConnectIde){saveGlobalConfig(current=>({...current,autoConnectIde})),setGlobalConfig({...getGlobalConfig(),autoConnectIde}),logEvent("tengu_auto_connect_ide_changed",{enabled:autoConnectIde,source:"config_panel"})}}],...isSupportedTerminal()?[{id:"autoInstallIdeExtension",label:"Auto-install IDE extension",value:globalConfig2.autoInstallIdeExtension??!0,type:"boolean",onChange(autoInstallIdeExtension){saveGlobalConfig(current=>({...current,autoInstallIdeExtension})),setGlobalConfig({...getGlobalConfig(),autoInstallIdeExtension}),logEvent("tengu_auto_install_ide_extension_changed",{enabled:autoInstallIdeExtension,source:"config_panel"})}}]:[],{id:"claudeInChromeDefaultEnabled",label:"Clavue browser integration enabled by default",value:globalConfig2.\u0063laudeInChromeDefaultEnabled??!0,type:"boolean",onChange(enabled){saveGlobalConfig(current=>({...current,claudeInChromeDefaultEnabled:enabled})),setGlobalConfig({...getGlobalConfig(),claudeInChromeDefaultEnabled:enabled}),logEvent("tengu_claude_in_chrome_setting_changed",{enabled})}},...isAgentSwarmsEnabled()?(()=>{let cliOverride=getCliTeammateModeOverride();return[{id:"teammateMode",label:cliOverride?`Teammate mode [overridden: ${cliOverride}]`:"Teammate mode",value:globalConfig2.teammateMode??"auto",options:["auto","tmux","in-process"],type:"enum",onChange(mode){mode!=="auto"&&mode!=="tmux"&&mode!=="in-process"||(clearCliTeammateModeOverride(mode),saveGlobalConfig(current=>({...current,teammateMode:mode})),setGlobalConfig({...getGlobalConfig(),teammateMode:mode}),logEvent("tengu_teammate_mode_changed",{mode}))}},{id:"teammateDefaultModel",label:"Default teammate model",value:teammateModelDisplayString(globalConfig2.teammateDefaultModel),type:"managedEnum",onChange(){}}]})():[],...shouldShowExternalIncludesToggle?[{id:"showExternalIncludesDialog",label:"External \u0043LAUDE.md includes",value:getCurrentProjectConfig().hasClaudeMdExternalIncludesApproved?"true":"false",type:"managedEnum",onChange(){}}]:[],...process.env.ANTHROPIC_API_KEY&&!isRunningOnHomespace()?[{id:"apiKey",label:(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["Use custom API key:"," ",(0,import_jsx_runtime98.jsx)(ThemedText,{bold:!0,children:normalizeApiKeyForConfig(process.env.ANTHROPIC_API_KEY)})]}),searchText:"Use custom API key",value:!!(process.env.ANTHROPIC_API_KEY&&globalConfig2.customApiKeyResponses?.approved?.includes(normalizeApiKeyForConfig(process.env.ANTHROPIC_API_KEY))),type:"boolean",onChange(useCustomKey){saveGlobalConfig(current=>{let updated={...current};if(updated.customApiKeyResponses||(updated.customApiKeyResponses={approved:[],rejected:[]}),updated.customApiKeyResponses.approved||(updated.customApiKeyResponses={...updated.customApiKeyResponses,approved:[]}),updated.customApiKeyResponses.rejected||(updated.customApiKeyResponses={...updated.customApiKeyResponses,rejected:[]}),process.env.ANTHROPIC_API_KEY){let truncatedKey=normalizeApiKeyForConfig(process.env.ANTHROPIC_API_KEY);useCustomKey?updated.customApiKeyResponses={...updated.customApiKeyResponses,approved:[...(updated.customApiKeyResponses.approved??[]).filter(k2=>k2!==truncatedKey),truncatedKey],rejected:(updated.customApiKeyResponses.rejected??[]).filter(k2=>k2!==truncatedKey)}:updated.customApiKeyResponses={...updated.customApiKeyResponses,approved:(updated.customApiKeyResponses.approved??[]).filter(k2=>k2!==truncatedKey),rejected:[...(updated.customApiKeyResponses.rejected??[]).filter(k2=>k2!==truncatedKey),truncatedKey]}}return updated}),setGlobalConfig(getGlobalConfig())}}]:[]],filteredSettingsItems=React40.useMemo(()=>{if(!searchQuery)return settingsItems;let lowerQuery=searchQuery.toLowerCase();return settingsItems.filter(setting=>setting.id.toLowerCase().includes(lowerQuery)?!0:("searchText"in setting?setting.searchText:setting.label).toLowerCase().includes(lowerQuery))},[settingsItems,searchQuery]);React40.useEffect(()=>{if(selectedIndex>=filteredSettingsItems.length){let newIndex=Math.max(0,filteredSettingsItems.length-1);setSelectedIndex(newIndex),setScrollOffset(Math.max(0,newIndex-maxVisible+1));return}setScrollOffset(prev=>selectedIndex<prev?selectedIndex:selectedIndex>=prev+maxVisible?selectedIndex-maxVisible+1:prev)},[filteredSettingsItems.length,selectedIndex,maxVisible]);let adjustScrollOffset=(0,import_react74.useCallback)(newIndex=>{setScrollOffset(prev=>newIndex<prev?newIndex:newIndex>=prev+maxVisible?newIndex-maxVisible+1:prev)},[maxVisible]),handleSaveAndClose=(0,import_react74.useCallback)(()=>{if(showSubmenu!==null)return;let formattedChanges=Object.entries(changes).map(([key,value])=>(logEvent("tengu_config_changed",{key,value}),`Set ${key} to ${source_default.bold(value)}`)),effectiveApiKey=isRunningOnHomespace()?void 0:process.env.ANTHROPIC_API_KEY,initialUsingCustomKey=!!(effectiveApiKey&&initialConfig.current.customApiKeyResponses?.approved?.includes(normalizeApiKeyForConfig(effectiveApiKey))),currentUsingCustomKey=!!(effectiveApiKey&&globalConfig2.customApiKeyResponses?.approved?.includes(normalizeApiKeyForConfig(effectiveApiKey)));if(initialUsingCustomKey!==currentUsingCustomKey&&(formattedChanges.push(`${currentUsingCustomKey?"Enabled":"Disabled"} custom API key`),logEvent("tengu_config_changed",{key:"env.ANTHROPIC_API_KEY",value:currentUsingCustomKey})),globalConfig2.theme!==initialConfig.current.theme&&formattedChanges.push(`Set theme to ${source_default.bold(globalConfig2.theme)}`),globalConfig2.preferredNotifChannel!==initialConfig.current.preferredNotifChannel&&formattedChanges.push(`Set notifications to ${source_default.bold(globalConfig2.preferredNotifChannel)}`),currentOutputStyle!==initialOutputStyle.current&&formattedChanges.push(`Set output style to ${source_default.bold(currentOutputStyle)}`),currentLanguage!==initialLanguage.current&&formattedChanges.push(`Set response language to ${source_default.bold(currentLanguage??"Default (English)")}`),globalConfig2.editorMode!==initialConfig.current.editorMode&&formattedChanges.push(`Set editor mode to ${source_default.bold(globalConfig2.editorMode||"emacs")}`),globalConfig2.diffTool!==initialConfig.current.diffTool&&formattedChanges.push(`Set diff tool to ${source_default.bold(globalConfig2.diffTool)}`),globalConfig2.autoConnectIde!==initialConfig.current.autoConnectIde&&formattedChanges.push(`${globalConfig2.autoConnectIde?"Enabled":"Disabled"} auto-connect to IDE`),globalConfig2.autoInstallIdeExtension!==initialConfig.current.autoInstallIdeExtension&&formattedChanges.push(`${globalConfig2.autoInstallIdeExtension?"Enabled":"Disabled"} auto-install IDE extension`),globalConfig2.autoCompactEnabled!==initialConfig.current.autoCompactEnabled&&formattedChanges.push(`${globalConfig2.autoCompactEnabled?"Enabled":"Disabled"} auto-compact`),globalConfig2.respectGitignore!==initialConfig.current.respectGitignore&&formattedChanges.push(`${globalConfig2.respectGitignore?"Enabled":"Disabled"} respect .gitignore in file picker`),globalConfig2.copyFullResponse!==initialConfig.current.copyFullResponse&&formattedChanges.push(`${globalConfig2.copyFullResponse?"Enabled":"Disabled"} always copy full response`),globalConfig2.copyOnSelect!==initialConfig.current.copyOnSelect&&formattedChanges.push(`${globalConfig2.copyOnSelect?"Enabled":"Disabled"} copy on select`),globalConfig2.terminalProgressBarEnabled!==initialConfig.current.terminalProgressBarEnabled&&formattedChanges.push(`${globalConfig2.terminalProgressBarEnabled?"Enabled":"Disabled"} terminal progress bar`),globalConfig2.showStatusInTerminalTab!==initialConfig.current.showStatusInTerminalTab&&formattedChanges.push(`${globalConfig2.showStatusInTerminalTab?"Enabled":"Disabled"} terminal tab status`),globalConfig2.showTurnDuration!==initialConfig.current.showTurnDuration&&formattedChanges.push(`${globalConfig2.showTurnDuration?"Enabled":"Disabled"} turn duration`),globalConfig2.remoteControlAtStartup!==initialConfig.current.remoteControlAtStartup){let remoteLabel=globalConfig2.remoteControlAtStartup===void 0?"Reset Remote Control to default":`${globalConfig2.remoteControlAtStartup?"Enabled":"Disabled"} Remote Control for all sessions`;formattedChanges.push(remoteLabel)}settingsData?.autoUpdatesChannel!==initialSettingsData.current?.autoUpdatesChannel&&formattedChanges.push(`Set auto-update channel to ${source_default.bold(settingsData?.autoUpdatesChannel??"latest")}`),formattedChanges.length>0?onClose(formattedChanges.join(`
6487
- `)):onClose("Config dialog dismissed",{display:"system"})},[showSubmenu,changes,globalConfig2,mainLoopModel,currentOutputStyle,currentLanguage,settingsData?.autoUpdatesChannel,isFastModeEnabled()?settingsData?.fastMode:void 0,onClose]),revertChanges=(0,import_react74.useCallback)(()=>{themeSetting!==initialThemeSetting.current&&setTheme(initialThemeSetting.current),saveGlobalConfig(()=>initialConfig.current);let il=initialLocalSettings;updateSettingsForSource("localSettings",{spinnerTipsEnabled:il?.spinnerTipsEnabled,prefersReducedMotion:il?.prefersReducedMotion,defaultView:il?.defaultView,outputStyle:il?.outputStyle});let iu=initialUserSettings;updateSettingsForSource("userSettings",{alwaysThinkingEnabled:iu?.alwaysThinkingEnabled,fastMode:iu?.fastMode,promptSuggestionEnabled:iu?.promptSuggestionEnabled,autoUpdatesChannel:iu?.autoUpdatesChannel,minimumVersion:iu?.minimumVersion,language:iu?.language,useAutoModeDuringPlan:iu?.useAutoModeDuringPlan,syntaxHighlightingDisabled:iu?.syntaxHighlightingDisabled,permissions:iu?.permissions===void 0?void 0:{...iu.permissions,defaultMode:iu.permissions.defaultMode}});let ia=initialAppState;setAppState(prev=>({...prev,mainLoopModel:ia.mainLoopModel,mainLoopModelForSession:ia.mainLoopModelForSession,verbose:ia.verbose,thinkingEnabled:ia.thinkingEnabled,fastMode:ia.fastMode,promptSuggestionEnabled:ia.promptSuggestionEnabled,isBriefOnly:ia.isBriefOnly,replBridgeEnabled:ia.replBridgeEnabled,replBridgeOutboundOnly:ia.replBridgeOutboundOnly,settings:ia.settings,toolPermissionContext:transitionPlanAutoMode(prev.toolPermissionContext)})),getUserMsgOptIn3()!==initialUserMsgOptIn&&setUserMsgOptIn(initialUserMsgOptIn)},[themeSetting,setTheme,initialLocalSettings,initialUserSettings,initialAppState,initialUserMsgOptIn,setAppState]),handleEscape=(0,import_react74.useCallback)(()=>{showSubmenu===null&&(isDirty2.current&&revertChanges(),onClose("Config dialog dismissed",{display:"system"}))},[showSubmenu,revertChanges,onClose]);useKeybinding("confirm:no",handleEscape,{context:"Settings",isActive:showSubmenu===null&&!isSearchMode&&!headerFocused}),useKeybinding("settings:close",handleSaveAndClose,{context:"Settings",isActive:showSubmenu===null&&!isSearchMode&&!headerFocused});let toggleSetting=(0,import_react74.useCallback)(()=>{let setting=filteredSettingsItems[selectedIndex];if(!(!setting||!setting.onChange)){if(setting.type==="boolean"){isDirty2.current=!0,setting.onChange(!setting.value),setting.id==="thinkingEnabled"&&(!setting.value===initialThinkingEnabled.current?setShowThinkingWarning(!1):context2.messages.some(m3=>m3.type==="assistant")&&setShowThinkingWarning(!0));return}if(setting.id==="theme"||setting.id==="model"||setting.id==="teammateDefaultModel"||setting.id==="showExternalIncludesDialog"||setting.id==="outputStyle"||setting.id==="language")switch(setting.id){case"theme":setShowSubmenu("Theme"),setTabsHidden(!0);return;case"model":setShowSubmenu("Model"),setTabsHidden(!0);return;case"teammateDefaultModel":setShowSubmenu("TeammateModel"),setTabsHidden(!0);return;case"showExternalIncludesDialog":setShowSubmenu("ExternalIncludes"),setTabsHidden(!0);return;case"outputStyle":setShowSubmenu("OutputStyle"),setTabsHidden(!0);return;case"language":setShowSubmenu("Language"),setTabsHidden(!0);return}if(setting.id==="autoUpdatesChannel"){if(autoUpdaterDisabledReason){setShowSubmenu("EnableAutoUpdates"),setTabsHidden(!0);return}(settingsData?.autoUpdatesChannel??"latest")==="latest"?(setShowSubmenu("ChannelDowngrade"),setTabsHidden(!0)):(isDirty2.current=!0,updateSettingsForSource("userSettings",{autoUpdatesChannel:"latest",minimumVersion:void 0}),setSettingsData(prev=>({...prev,autoUpdatesChannel:"latest",minimumVersion:void 0})),logEvent("tengu_autoupdate_channel_changed",{channel:"latest"}));return}if(setting.type==="enum"){isDirty2.current=!0;let nextIndex=(setting.options.indexOf(setting.value)+1)%setting.options.length;setting.onChange(setting.options[nextIndex]);return}}},[autoUpdaterDisabledReason,filteredSettingsItems,selectedIndex,settingsData?.autoUpdatesChannel,setTabsHidden]),moveSelection=__name(delta=>{setShowThinkingWarning(!1);let newIndex=Math.max(0,Math.min(filteredSettingsItems.length-1,selectedIndex+delta));setSelectedIndex(newIndex),adjustScrollOffset(newIndex)},"moveSelection");useKeybindings({"select:previous":__name(()=>{selectedIndex===0?(setShowThinkingWarning(!1),setIsSearchMode(!0),setScrollOffset(0)):moveSelection(-1)},"select:previous"),"select:next":__name(()=>moveSelection(1),"select:next"),"scroll:lineUp":__name(()=>moveSelection(-1),"scroll:lineUp"),"scroll:lineDown":__name(()=>moveSelection(1),"scroll:lineDown"),"select:accept":toggleSetting,"settings:search":__name(()=>{setIsSearchMode(!0),setSearchQuery("")},"settings:search")},{context:"Settings",isActive:showSubmenu===null&&!isSearchMode&&!headerFocused});let handleKeyDown=(0,import_react74.useCallback)(e2=>{if(showSubmenu===null&&!headerFocused){if(isSearchMode){if(e2.key==="escape"){e2.preventDefault(),searchQuery.length>0?setSearchQuery(""):setIsSearchMode(!1);return}(e2.key==="return"||e2.key==="down"||e2.key==="wheeldown")&&(e2.preventDefault(),setIsSearchMode(!1),setSelectedIndex(0),setScrollOffset(0));return}if(e2.key==="left"||e2.key==="right"||e2.key==="tab"){e2.preventDefault(),toggleSetting();return}e2.ctrl||e2.meta||e2.key==="j"||e2.key==="k"||e2.key==="/"||e2.key.length===1&&e2.key!==" "&&(e2.preventDefault(),setIsSearchMode(!0),setSearchQuery(e2.key))}},[showSubmenu,headerFocused,isSearchMode,searchQuery,setSearchQuery,toggleSetting]);return(0,import_jsx_runtime98.jsx)(ThemedBox_default,{flexDirection:"column",width:"100%",tabIndex:0,autoFocus:!0,onKeyDown:handleKeyDown,children:showSubmenu==="Theme"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ThemePicker,{onThemeSelect:setting=>{isDirty2.current=!0,setTheme(setting),setShowSubmenu(null),setTabsHidden(!1)},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)},hideEscToCancel:!0,skipExitHandling:!0}),(0,import_jsx_runtime98.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,italic:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"select"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})})]}):showSubmenu==="Model"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ModelPicker,{initial:mainLoopModel,onSelect:(model,_effort)=>{isDirty2.current=!0,onChangeMainModelConfig(model),setShowSubmenu(null),setTabsHidden(!1)},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)},showFastModeNotice:isFastModeEnabled()?isFastMode&&isFastModeSupportedByModel(mainLoopModel)&&isFastModeAvailable():!1}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="TeammateModel"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ModelPicker,{initial:globalConfig2.teammateDefaultModel??null,skipSettingsWrite:!0,headerText:"Default model for newly spawned teammates. The leader can override via the tool call's model parameter.",onSelect:(model,_effort)=>{setShowSubmenu(null),setTabsHidden(!1),!(globalConfig2.teammateDefaultModel===void 0&&model===null)&&(isDirty2.current=!0,saveGlobalConfig(current=>current.teammateDefaultModel===model?current:{...current,teammateDefaultModel:model}),setGlobalConfig({...getGlobalConfig(),teammateDefaultModel:model}),setChanges(prev=>({...prev,teammateDefaultModel:teammateModelDisplayString(model)})),logEvent("tengu_teammate_default_model_changed",{model}))},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)}}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="ExternalIncludes"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ClaudeMdExternalIncludesDialog,{onDone:()=>{setShowSubmenu(null),setTabsHidden(!1)},externalIncludes:getExternalClaudeMdIncludes(memoryFiles)}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"disable external includes"})]})})]}):showSubmenu==="OutputStyle"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(OutputStylePicker,{initialStyle:currentOutputStyle,onComplete:style=>{isDirty2.current=!0,setCurrentOutputStyle(style??DEFAULT_OUTPUT_STYLE_NAME),setShowSubmenu(null),setTabsHidden(!1),updateSettingsForSource("localSettings",{outputStyle:style}),logEvent("tengu_output_style_changed",{style:style??DEFAULT_OUTPUT_STYLE_NAME,source:"config_panel",settings_source:"localSettings"})},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)}}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="Language"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(LanguagePicker,{initialLanguage:currentLanguage,onComplete:language=>{isDirty2.current=!0,setCurrentLanguage(language),setShowSubmenu(null),setTabsHidden(!1),updateSettingsForSource("userSettings",{language}),logEvent("tengu_language_changed",{language:language??"default",source:"config_panel"})},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)}}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="EnableAutoUpdates"?(0,import_jsx_runtime98.jsx)(Dialog,{title:"Enable Auto-Updates",onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)},hideBorder:!0,hideInputGuide:!0,children:autoUpdaterDisabledReason?.type!=="config"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ThemedText,{children:autoUpdaterDisabledReason?.type==="env"?"Auto-updates are controlled by an environment variable and cannot be changed here.":"Auto-updates are disabled in development builds."}),autoUpdaterDisabledReason?.type==="env"&&(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:["Unset ",autoUpdaterDisabledReason.envVar," to re-enable auto-updates."]})]}):(0,import_jsx_runtime98.jsx)(Select,{options:[{label:"Enable with latest channel",value:"latest"},{label:"Enable with stable channel",value:"stable"}],onChange:channel=>{isDirty2.current=!0,setShowSubmenu(null),setTabsHidden(!1),saveGlobalConfig(current=>({...current,autoUpdates:!0})),setGlobalConfig({...getGlobalConfig(),autoUpdates:!0}),updateSettingsForSource("userSettings",{autoUpdatesChannel:channel,minimumVersion:void 0}),setSettingsData(prev=>({...prev,autoUpdatesChannel:channel,minimumVersion:void 0})),logEvent("tengu_autoupdate_enabled",{channel})}})}):showSubmenu==="ChannelDowngrade"?(0,import_jsx_runtime98.jsx)(ChannelDowngradeDialog,{currentVersion:"11.3.12",onChoice:choice=>{if(setShowSubmenu(null),setTabsHidden(!1),choice==="cancel")return;isDirty2.current=!0;let newSettings={autoUpdatesChannel:"stable"};choice==="stay"&&(newSettings.minimumVersion="11.3.12"),updateSettingsForSource("userSettings",newSettings),setSettingsData(prev=>({...prev,...newSettings})),logEvent("tengu_autoupdate_channel_changed",{channel:"stable",minimum_version_set:choice==="stay"})}}):(0,import_jsx_runtime98.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,marginY:insideModal?void 0:1,children:[(0,import_jsx_runtime98.jsx)(SearchBox,{query:searchQuery,isFocused:isSearchMode&&!headerFocused,isTerminalFocused,cursorOffset:searchCursorOffset,placeholder:"Search settings\u2026"}),(0,import_jsx_runtime98.jsx)(ThemedBox_default,{flexDirection:"column",children:filteredSettingsItems.length===0?(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,italic:!0,children:['No settings match "',searchQuery,'"']}):(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[scrollOffset>0&&(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.arrowUp," ",scrollOffset," more above"]}),filteredSettingsItems.slice(scrollOffset,scrollOffset+maxVisible).map((setting,i3)=>{let isSelected=scrollOffset+i3===selectedIndex&&!headerFocused&&!isSearchMode;return(0,import_jsx_runtime98.jsx)(React40.Fragment,{children:(0,import_jsx_runtime98.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime98.jsx)(ThemedBox_default,{width:44,children:(0,import_jsx_runtime98.jsxs)(ThemedText,{color:isSelected?"suggestion":void 0,children:[isSelected?figures_default.pointer:" "," ",setting.label]})}),(0,import_jsx_runtime98.jsx)(ThemedBox_default,{children:setting.type==="boolean"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:setting.value.toString()}),showThinkingWarning&&setting.id==="thinkingEnabled"&&(0,import_jsx_runtime98.jsxs)(ThemedText,{color:"warning",children:[" ","Changing thinking mode mid-conversation will increase latency and may reduce quality."]})]}):setting.id==="theme"?(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:THEME_LABELS[setting.value.toString()]??setting.value.toString()}):setting.id==="notifChannel"?(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:(0,import_jsx_runtime98.jsx)(NotifChannelLabel,{value:setting.value.toString()})}):setting.id==="defaultPermissionMode"?(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:permissionModeTitle(setting.value)}):setting.id==="autoUpdatesChannel"&&autoUpdaterDisabledReason?(0,import_jsx_runtime98.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:"disabled"}),(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:["(",formatAutoUpdaterDisabledReason(autoUpdaterDisabledReason),")"]})]}):(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:setting.value.toString()})},isSelected?"selected":"unselected")]})},setting.id)}),scrollOffset+maxVisible<filteredSettingsItems.length&&(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.arrowDown," ",filteredSettingsItems.length-scrollOffset-maxVisible," ","more below"]})]})}),headerFocused?(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"\u2190/\u2192 tab",action:"switch"}),(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"\u2193",action:"return"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"close"})]})}):isSearchMode?(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(ThemedText,{children:"Type to filter"}),(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter/\u2193",action:"select"}),(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"\u2191",action:"tabs"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"clear"})]})}):(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"select:accept",context:"Settings",fallback:"Space",description:"change"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"settings:close",context:"Settings",fallback:"Enter",description:"save"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"settings:search",context:"Settings",fallback:"/",description:"search"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})]})})]})})}function teammateModelDisplayString(value){return value===void 0?modelDisplayString(getHardcodedTeammateModelFallback()):value===null?"Default (leader's model)":modelDisplayString(value)}function NotifChannelLabel({value}){switch(value){case"auto":return"Auto";case"iterm2":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["iTerm2 ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(OSC 9)"})]});case"terminal_bell":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["Terminal Bell ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(\\a)"})]});case"kitty":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["Kitty ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(OSC 99)"})]});case"ghostty":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["Ghostty ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(OSC 777)"})]});case"iterm2_with_bell":return"iTerm2 w/ Bell";case"notifications_disabled":return"Disabled";default:return value}}var React40,import_react74,import_jsx_runtime98,THEME_LABELS,init_Config=__esm({"src/components/Settings/Config.tsx"(){init_featureFlags();init_ink();React40=__toESM(require_react()),import_react74=__toESM(require_react());init_useKeybinding();init_figures();init_config11();init_authPortable();init_config11();init_source();init_PermissionMode();init_permissionSetup();init_log3();init_analytics();init_bridgeEnabled();init_ThemePicker();init_AppState();init_ModelPicker();init_model3();init_extraUsage();init_ClaudeMdExternalIncludesDialog();init_ChannelDowngradeDialog();init_Dialog();init_CustomSelect();init_OutputStylePicker();init_LanguagePicker();init_claudemd();init_KeyboardShortcutHint();init_ConfigurableShortcutHint();init_Byline();init_Tabs();init_modalContext();init_SearchBox();init_ide();init_settings2();init_state();init_outputStyles();init_envUtils();init_growthbook();init_agentSwarmsEnabled();init_teammateModeSnapshot();init_teammateModel();init_useSearchInput();init_useTerminalSize();init_fastMode();init_fullscreen();import_jsx_runtime98=__toESM(require_jsx_runtime());__name(Config,"Config");__name(teammateModelDisplayString,"teammateModelDisplayString");THEME_LABELS={auto:"Auto (match terminal)",dark:"Dark mode",light:"Light mode","dark-daltonized":"Dark mode (colorblind-friendly)","light-daltonized":"Light mode (colorblind-friendly)","dark-ansi":"Dark mode (ANSI colors only)","light-ansi":"Light mode (ANSI colors only)"};__name(NotifChannelLabel,"NotifChannelLabel")}});import{copyFileSync as copyFileSync2,existsSync as existsSync22,mkdirSync as mkdirSync19,readFileSync as readFileSync26,writeFileSync as writeFileSync17}from"fs";import{homedir as homedir31}from"os";import{dirname as dirname60,join as join142}from"path";function getCcjkProviderConfigPath(){return join142(homedir31(),".ccjk","config.toml")}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 normalizeAuthType(value){return value==="auth_token"?"auth_token":"api_key"}function normalizeProfile2(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:normalizeAuthType(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(!existsSync22(configPath))return{profiles:[]};let content="";try{content=readFileSync26(configPath,"utf8")}catch{return{profiles:[]}}let rawProfiles=new Map,currentProfile="",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&&currentPath[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])=>normalizeProfile2(id,profile)).filter(profile=>profile!==null)}}function escapeTomlBasicString(value){return value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function formatTomlPathSegment(value){return/^[A-Za-z0-9_-]+$/u.test(value)?value:`"${escapeTomlBasicString(value)}"`}function serializeCcjkProviderConfig(config3){let lines=["[claudeCode]",`currentProfile = "${escapeTomlBasicString(config3.currentProfile||"")}"`];for(let profile of config3.profiles)lines.push("",`[claudeCode.profiles.${formatTomlPathSegment(profile.id)}]`,`name = "${escapeTomlBasicString(profile.name)}"`,`authType = "${profile.authType}"`,`apiKey = "${escapeTomlBasicString(profile.apiKey)}"`,`baseUrl = "${escapeTomlBasicString(profile.baseUrl)}"`,`primaryModel = "${escapeTomlBasicString(profile.primaryModel)}"`,`defaultHaikuModel = "${escapeTomlBasicString(profile.defaultHaikuModel)}"`,`defaultSonnetModel = "${escapeTomlBasicString(profile.defaultSonnetModel)}"`,`defaultOpusModel = "${escapeTomlBasicString(profile.defaultOpusModel)}"`);return`${lines.join(`
6487
+ `)):onClose("Config dialog dismissed",{display:"system"})},[showSubmenu,changes,globalConfig2,mainLoopModel,currentOutputStyle,currentLanguage,settingsData?.autoUpdatesChannel,isFastModeEnabled()?settingsData?.fastMode:void 0,onClose]),revertChanges=(0,import_react74.useCallback)(()=>{themeSetting!==initialThemeSetting.current&&setTheme(initialThemeSetting.current),saveGlobalConfig(()=>initialConfig.current);let il=initialLocalSettings;updateSettingsForSource("localSettings",{spinnerTipsEnabled:il?.spinnerTipsEnabled,prefersReducedMotion:il?.prefersReducedMotion,defaultView:il?.defaultView,outputStyle:il?.outputStyle});let iu=initialUserSettings;updateSettingsForSource("userSettings",{alwaysThinkingEnabled:iu?.alwaysThinkingEnabled,fastMode:iu?.fastMode,promptSuggestionEnabled:iu?.promptSuggestionEnabled,autoUpdatesChannel:iu?.autoUpdatesChannel,minimumVersion:iu?.minimumVersion,language:iu?.language,useAutoModeDuringPlan:iu?.useAutoModeDuringPlan,syntaxHighlightingDisabled:iu?.syntaxHighlightingDisabled,permissions:iu?.permissions===void 0?void 0:{...iu.permissions,defaultMode:iu.permissions.defaultMode}});let ia=initialAppState;setAppState(prev=>({...prev,mainLoopModel:ia.mainLoopModel,mainLoopModelForSession:ia.mainLoopModelForSession,verbose:ia.verbose,thinkingEnabled:ia.thinkingEnabled,fastMode:ia.fastMode,promptSuggestionEnabled:ia.promptSuggestionEnabled,isBriefOnly:ia.isBriefOnly,replBridgeEnabled:ia.replBridgeEnabled,replBridgeOutboundOnly:ia.replBridgeOutboundOnly,settings:ia.settings,toolPermissionContext:transitionPlanAutoMode(prev.toolPermissionContext)})),getUserMsgOptIn3()!==initialUserMsgOptIn&&setUserMsgOptIn(initialUserMsgOptIn)},[themeSetting,setTheme,initialLocalSettings,initialUserSettings,initialAppState,initialUserMsgOptIn,setAppState]),handleEscape=(0,import_react74.useCallback)(()=>{showSubmenu===null&&(isDirty2.current&&revertChanges(),onClose("Config dialog dismissed",{display:"system"}))},[showSubmenu,revertChanges,onClose]);useKeybinding("confirm:no",handleEscape,{context:"Settings",isActive:showSubmenu===null&&!isSearchMode&&!headerFocused}),useKeybinding("settings:close",handleSaveAndClose,{context:"Settings",isActive:showSubmenu===null&&!isSearchMode&&!headerFocused});let toggleSetting=(0,import_react74.useCallback)(()=>{let setting=filteredSettingsItems[selectedIndex];if(!(!setting||!setting.onChange)){if(setting.type==="boolean"){isDirty2.current=!0,setting.onChange(!setting.value),setting.id==="thinkingEnabled"&&(!setting.value===initialThinkingEnabled.current?setShowThinkingWarning(!1):context2.messages.some(m3=>m3.type==="assistant")&&setShowThinkingWarning(!0));return}if(setting.id==="theme"||setting.id==="model"||setting.id==="teammateDefaultModel"||setting.id==="showExternalIncludesDialog"||setting.id==="outputStyle"||setting.id==="language")switch(setting.id){case"theme":setShowSubmenu("Theme"),setTabsHidden(!0);return;case"model":setShowSubmenu("Model"),setTabsHidden(!0);return;case"teammateDefaultModel":setShowSubmenu("TeammateModel"),setTabsHidden(!0);return;case"showExternalIncludesDialog":setShowSubmenu("ExternalIncludes"),setTabsHidden(!0);return;case"outputStyle":setShowSubmenu("OutputStyle"),setTabsHidden(!0);return;case"language":setShowSubmenu("Language"),setTabsHidden(!0);return}if(setting.id==="autoUpdatesChannel"){if(autoUpdaterDisabledReason){setShowSubmenu("EnableAutoUpdates"),setTabsHidden(!0);return}(settingsData?.autoUpdatesChannel??"latest")==="latest"?(setShowSubmenu("ChannelDowngrade"),setTabsHidden(!0)):(isDirty2.current=!0,updateSettingsForSource("userSettings",{autoUpdatesChannel:"latest",minimumVersion:void 0}),setSettingsData(prev=>({...prev,autoUpdatesChannel:"latest",minimumVersion:void 0})),logEvent("tengu_autoupdate_channel_changed",{channel:"latest"}));return}if(setting.type==="enum"){isDirty2.current=!0;let nextIndex=(setting.options.indexOf(setting.value)+1)%setting.options.length;setting.onChange(setting.options[nextIndex]);return}}},[autoUpdaterDisabledReason,filteredSettingsItems,selectedIndex,settingsData?.autoUpdatesChannel,setTabsHidden]),moveSelection=__name(delta=>{setShowThinkingWarning(!1);let newIndex=Math.max(0,Math.min(filteredSettingsItems.length-1,selectedIndex+delta));setSelectedIndex(newIndex),adjustScrollOffset(newIndex)},"moveSelection");useKeybindings({"select:previous":__name(()=>{selectedIndex===0?(setShowThinkingWarning(!1),setIsSearchMode(!0),setScrollOffset(0)):moveSelection(-1)},"select:previous"),"select:next":__name(()=>moveSelection(1),"select:next"),"scroll:lineUp":__name(()=>moveSelection(-1),"scroll:lineUp"),"scroll:lineDown":__name(()=>moveSelection(1),"scroll:lineDown"),"select:accept":toggleSetting,"settings:search":__name(()=>{setIsSearchMode(!0),setSearchQuery("")},"settings:search")},{context:"Settings",isActive:showSubmenu===null&&!isSearchMode&&!headerFocused});let handleKeyDown=(0,import_react74.useCallback)(e2=>{if(showSubmenu===null&&!headerFocused){if(isSearchMode){if(e2.key==="escape"){e2.preventDefault(),searchQuery.length>0?setSearchQuery(""):setIsSearchMode(!1);return}(e2.key==="return"||e2.key==="down"||e2.key==="wheeldown")&&(e2.preventDefault(),setIsSearchMode(!1),setSelectedIndex(0),setScrollOffset(0));return}if(e2.key==="left"||e2.key==="right"||e2.key==="tab"){e2.preventDefault(),toggleSetting();return}e2.ctrl||e2.meta||e2.key==="j"||e2.key==="k"||e2.key==="/"||e2.key.length===1&&e2.key!==" "&&(e2.preventDefault(),setIsSearchMode(!0),setSearchQuery(e2.key))}},[showSubmenu,headerFocused,isSearchMode,searchQuery,setSearchQuery,toggleSetting]);return(0,import_jsx_runtime98.jsx)(ThemedBox_default,{flexDirection:"column",width:"100%",tabIndex:0,autoFocus:!0,onKeyDown:handleKeyDown,children:showSubmenu==="Theme"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ThemePicker,{onThemeSelect:setting=>{isDirty2.current=!0,setTheme(setting),setShowSubmenu(null),setTabsHidden(!1)},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)},hideEscToCancel:!0,skipExitHandling:!0}),(0,import_jsx_runtime98.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,italic:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"select"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})})]}):showSubmenu==="Model"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ModelPicker,{initial:mainLoopModel,onSelect:(model,_effort)=>{isDirty2.current=!0,onChangeMainModelConfig(model),setShowSubmenu(null),setTabsHidden(!1)},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)},showFastModeNotice:isFastModeEnabled()?isFastMode&&isFastModeSupportedByModel(mainLoopModel)&&isFastModeAvailable():!1}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="TeammateModel"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ModelPicker,{initial:globalConfig2.teammateDefaultModel??null,skipSettingsWrite:!0,headerText:"Default model for newly spawned teammates. The leader can override via the tool call's model parameter.",onSelect:(model,_effort)=>{setShowSubmenu(null),setTabsHidden(!1),!(globalConfig2.teammateDefaultModel===void 0&&model===null)&&(isDirty2.current=!0,saveGlobalConfig(current=>current.teammateDefaultModel===model?current:{...current,teammateDefaultModel:model}),setGlobalConfig({...getGlobalConfig(),teammateDefaultModel:model}),setChanges(prev=>({...prev,teammateDefaultModel:teammateModelDisplayString(model)})),logEvent("tengu_teammate_default_model_changed",{model}))},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)}}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="ExternalIncludes"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ClaudeMdExternalIncludesDialog,{onDone:()=>{setShowSubmenu(null),setTabsHidden(!1)},externalIncludes:getExternalClaudeMdIncludes(memoryFiles)}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"disable external includes"})]})})]}):showSubmenu==="OutputStyle"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(OutputStylePicker,{initialStyle:currentOutputStyle,onComplete:style=>{isDirty2.current=!0,setCurrentOutputStyle(style??DEFAULT_OUTPUT_STYLE_NAME),setShowSubmenu(null),setTabsHidden(!1),updateSettingsForSource("localSettings",{outputStyle:style}),logEvent("tengu_output_style_changed",{style:style??DEFAULT_OUTPUT_STYLE_NAME,source:"config_panel",settings_source:"localSettings"})},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)}}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="Language"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(LanguagePicker,{initialLanguage:currentLanguage,onComplete:language=>{isDirty2.current=!0,setCurrentLanguage(language),setShowSubmenu(null),setTabsHidden(!1),updateSettingsForSource("userSettings",{language}),logEvent("tengu_language_changed",{language:language??"default",source:"config_panel"})},onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)}}),(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})]})})]}):showSubmenu==="EnableAutoUpdates"?(0,import_jsx_runtime98.jsx)(Dialog,{title:"Enable Auto-Updates",onCancel:()=>{setShowSubmenu(null),setTabsHidden(!1)},hideBorder:!0,hideInputGuide:!0,children:autoUpdaterDisabledReason?.type!=="config"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ThemedText,{children:autoUpdaterDisabledReason?.type==="env"?"Auto-updates are controlled by an environment variable and cannot be changed here.":"Auto-updates are disabled in development builds."}),autoUpdaterDisabledReason?.type==="env"&&(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:["Unset ",autoUpdaterDisabledReason.envVar," to re-enable auto-updates."]})]}):(0,import_jsx_runtime98.jsx)(Select,{options:[{label:"Enable with latest channel",value:"latest"},{label:"Enable with stable channel",value:"stable"}],onChange:channel=>{isDirty2.current=!0,setShowSubmenu(null),setTabsHidden(!1),saveGlobalConfig(current=>({...current,autoUpdates:!0})),setGlobalConfig({...getGlobalConfig(),autoUpdates:!0}),updateSettingsForSource("userSettings",{autoUpdatesChannel:channel,minimumVersion:void 0}),setSettingsData(prev=>({...prev,autoUpdatesChannel:channel,minimumVersion:void 0})),logEvent("tengu_autoupdate_enabled",{channel})}})}):showSubmenu==="ChannelDowngrade"?(0,import_jsx_runtime98.jsx)(ChannelDowngradeDialog,{currentVersion:"11.3.13",onChoice:choice=>{if(setShowSubmenu(null),setTabsHidden(!1),choice==="cancel")return;isDirty2.current=!0;let newSettings={autoUpdatesChannel:"stable"};choice==="stay"&&(newSettings.minimumVersion="11.3.13"),updateSettingsForSource("userSettings",newSettings),setSettingsData(prev=>({...prev,...newSettings})),logEvent("tengu_autoupdate_channel_changed",{channel:"stable",minimum_version_set:choice==="stay"})}}):(0,import_jsx_runtime98.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,marginY:insideModal?void 0:1,children:[(0,import_jsx_runtime98.jsx)(SearchBox,{query:searchQuery,isFocused:isSearchMode&&!headerFocused,isTerminalFocused,cursorOffset:searchCursorOffset,placeholder:"Search settings\u2026"}),(0,import_jsx_runtime98.jsx)(ThemedBox_default,{flexDirection:"column",children:filteredSettingsItems.length===0?(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,italic:!0,children:['No settings match "',searchQuery,'"']}):(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[scrollOffset>0&&(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.arrowUp," ",scrollOffset," more above"]}),filteredSettingsItems.slice(scrollOffset,scrollOffset+maxVisible).map((setting,i3)=>{let isSelected=scrollOffset+i3===selectedIndex&&!headerFocused&&!isSearchMode;return(0,import_jsx_runtime98.jsx)(React40.Fragment,{children:(0,import_jsx_runtime98.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime98.jsx)(ThemedBox_default,{width:44,children:(0,import_jsx_runtime98.jsxs)(ThemedText,{color:isSelected?"suggestion":void 0,children:[isSelected?figures_default.pointer:" "," ",setting.label]})}),(0,import_jsx_runtime98.jsx)(ThemedBox_default,{children:setting.type==="boolean"?(0,import_jsx_runtime98.jsxs)(import_jsx_runtime98.Fragment,{children:[(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:setting.value.toString()}),showThinkingWarning&&setting.id==="thinkingEnabled"&&(0,import_jsx_runtime98.jsxs)(ThemedText,{color:"warning",children:[" ","Changing thinking mode mid-conversation will increase latency and may reduce quality."]})]}):setting.id==="theme"?(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:THEME_LABELS[setting.value.toString()]??setting.value.toString()}):setting.id==="notifChannel"?(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:(0,import_jsx_runtime98.jsx)(NotifChannelLabel,{value:setting.value.toString()})}):setting.id==="defaultPermissionMode"?(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:permissionModeTitle(setting.value)}):setting.id==="autoUpdatesChannel"&&autoUpdaterDisabledReason?(0,import_jsx_runtime98.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:"disabled"}),(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:["(",formatAutoUpdaterDisabledReason(autoUpdaterDisabledReason),")"]})]}):(0,import_jsx_runtime98.jsx)(ThemedText,{color:isSelected?"suggestion":void 0,children:setting.value.toString()})},isSelected?"selected":"unselected")]})},setting.id)}),scrollOffset+maxVisible<filteredSettingsItems.length&&(0,import_jsx_runtime98.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.arrowDown," ",filteredSettingsItems.length-scrollOffset-maxVisible," ","more below"]})]})}),headerFocused?(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"\u2190/\u2192 tab",action:"switch"}),(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"\u2193",action:"return"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"close"})]})}):isSearchMode?(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(ThemedText,{children:"Type to filter"}),(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"Enter/\u2193",action:"select"}),(0,import_jsx_runtime98.jsx)(KeyboardShortcutHint,{shortcut:"\u2191",action:"tabs"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"clear"})]})}):(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime98.jsxs)(Byline,{children:[(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"select:accept",context:"Settings",fallback:"Space",description:"change"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"settings:close",context:"Settings",fallback:"Enter",description:"save"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"settings:search",context:"Settings",fallback:"/",description:"search"}),(0,import_jsx_runtime98.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})]})})]})})}function teammateModelDisplayString(value){return value===void 0?modelDisplayString(getHardcodedTeammateModelFallback()):value===null?"Default (leader's model)":modelDisplayString(value)}function NotifChannelLabel({value}){switch(value){case"auto":return"Auto";case"iterm2":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["iTerm2 ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(OSC 9)"})]});case"terminal_bell":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["Terminal Bell ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(\\a)"})]});case"kitty":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["Kitty ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(OSC 99)"})]});case"ghostty":return(0,import_jsx_runtime98.jsxs)(ThemedText,{children:["Ghostty ",(0,import_jsx_runtime98.jsx)(ThemedText,{dimColor:!0,children:"(OSC 777)"})]});case"iterm2_with_bell":return"iTerm2 w/ Bell";case"notifications_disabled":return"Disabled";default:return value}}var React40,import_react74,import_jsx_runtime98,THEME_LABELS,init_Config=__esm({"src/components/Settings/Config.tsx"(){init_featureFlags();init_ink();React40=__toESM(require_react()),import_react74=__toESM(require_react());init_useKeybinding();init_figures();init_config11();init_authPortable();init_config11();init_source();init_PermissionMode();init_permissionSetup();init_log3();init_analytics();init_bridgeEnabled();init_ThemePicker();init_AppState();init_ModelPicker();init_model3();init_extraUsage();init_ClaudeMdExternalIncludesDialog();init_ChannelDowngradeDialog();init_Dialog();init_CustomSelect();init_OutputStylePicker();init_LanguagePicker();init_claudemd();init_KeyboardShortcutHint();init_ConfigurableShortcutHint();init_Byline();init_Tabs();init_modalContext();init_SearchBox();init_ide();init_settings2();init_state();init_outputStyles();init_envUtils();init_growthbook();init_agentSwarmsEnabled();init_teammateModeSnapshot();init_teammateModel();init_useSearchInput();init_useTerminalSize();init_fastMode();init_fullscreen();import_jsx_runtime98=__toESM(require_jsx_runtime());__name(Config,"Config");__name(teammateModelDisplayString,"teammateModelDisplayString");THEME_LABELS={auto:"Auto (match terminal)",dark:"Dark mode",light:"Light mode","dark-daltonized":"Dark mode (colorblind-friendly)","light-daltonized":"Light mode (colorblind-friendly)","dark-ansi":"Dark mode (ANSI colors only)","light-ansi":"Light mode (ANSI colors only)"};__name(NotifChannelLabel,"NotifChannelLabel")}});import{copyFileSync as copyFileSync2,existsSync as existsSync22,mkdirSync as mkdirSync19,readFileSync as readFileSync26,writeFileSync as writeFileSync17}from"fs";import{homedir as homedir31}from"os";import{dirname as dirname60,join as join142}from"path";function getCcjkProviderConfigPath(){return join142(homedir31(),".ccjk","config.toml")}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 normalizeAuthType(value){return value==="auth_token"?"auth_token":"api_key"}function normalizeProfile2(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:normalizeAuthType(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(!existsSync22(configPath))return{profiles:[]};let content="";try{content=readFileSync26(configPath,"utf8")}catch{return{profiles:[]}}let rawProfiles=new Map,currentProfile="",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&&currentPath[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])=>normalizeProfile2(id,profile)).filter(profile=>profile!==null)}}function escapeTomlBasicString(value){return value.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function formatTomlPathSegment(value){return/^[A-Za-z0-9_-]+$/u.test(value)?value:`"${escapeTomlBasicString(value)}"`}function serializeCcjkProviderConfig(config3){let lines=["[claudeCode]",`currentProfile = "${escapeTomlBasicString(config3.currentProfile||"")}"`];for(let profile of config3.profiles)lines.push("",`[claudeCode.profiles.${formatTomlPathSegment(profile.id)}]`,`name = "${escapeTomlBasicString(profile.name)}"`,`authType = "${profile.authType}"`,`apiKey = "${escapeTomlBasicString(profile.apiKey)}"`,`baseUrl = "${escapeTomlBasicString(profile.baseUrl)}"`,`primaryModel = "${escapeTomlBasicString(profile.primaryModel)}"`,`defaultHaikuModel = "${escapeTomlBasicString(profile.defaultHaikuModel)}"`,`defaultSonnetModel = "${escapeTomlBasicString(profile.defaultSonnetModel)}"`,`defaultOpusModel = "${escapeTomlBasicString(profile.defaultOpusModel)}"`);return`${lines.join(`
6488
6488
  `)}
6489
6489
  `}function formatBackupTimestamp(date5=new Date){let pad7=__name(value=>value.toString().padStart(2,"0"),"pad");return[date5.getFullYear(),"-",pad7(date5.getMonth()+1),"-",pad7(date5.getDate()),"_",pad7(date5.getHours()),"-",pad7(date5.getMinutes()),"-",pad7(date5.getSeconds())].join("")}function createBackup2(configPath){if(!existsSync22(configPath))return;let backupPath=join142(dirname60(configPath),`config.backup.${formatBackupTimestamp()}.toml`);return copyFileSync2(configPath,backupPath),backupPath}function writeCcjkProviderConfig(config3,configPath=getCcjkProviderConfigPath()){mkdirSync19(dirname60(configPath),{recursive:!0});let backupPath=createBackup2(configPath);return writeFileSync17(configPath,serializeCcjkProviderConfig(config3),"utf8"),{backupPath}}var init_ccjkProviderConfig=__esm({"src/utils/ccjkProviderConfig.ts"(){__name(getCcjkProviderConfigPath,"getCcjkProviderConfigPath");__name(stripTomlComment,"stripTomlComment");__name(parseTomlPathSegments,"parseTomlPathSegments");__name(parseTomlStringValue,"parseTomlStringValue");__name(normalizeAuthType,"normalizeAuthType");__name(normalizeProfile2,"normalizeProfile");__name(readCcjkProviderConfig,"readCcjkProviderConfig");__name(escapeTomlBasicString,"escapeTomlBasicString");__name(formatTomlPathSegment,"formatTomlPathSegment");__name(serializeCcjkProviderConfig,"serializeCcjkProviderConfig");__name(formatBackupTimestamp,"formatBackupTimestamp");__name(createBackup2,"createBackup");__name(writeCcjkProviderConfig,"writeCcjkProviderConfig")}});function normalizeValue2(value){return String(value??"").trim()}function completeProviderRoutingSlotsFromPrimary(rawRouting,baseRouting={}){let presetId=normalizeValue2(rawRouting.presetId||baseRouting.presetId),primaryModel=normalizeValue2(rawRouting.primaryModel)||normalizeValue2(baseRouting.primaryModel),slotFallback=(presetId==="provider_default"||presetId==="custom")&&normalizeValue2(rawRouting.primaryModel).length>0?primaryModel:"",subagentModel=normalizeValue2(rawRouting.subagentModel)||normalizeValue2(baseRouting.subagentModel)||slotFallback,generalModel=normalizeValue2(rawRouting.generalModel)||normalizeValue2(baseRouting.generalModel)||subagentModel,planModel=normalizeValue2(rawRouting.planModel)||normalizeValue2(baseRouting.planModel)||primaryModel,exploreModel=normalizeValue2(rawRouting.exploreModel)||normalizeValue2(baseRouting.exploreModel)||generalModel,teamModel=normalizeValue2(rawRouting.teamModel)||normalizeValue2(baseRouting.teamModel)||generalModel,guideModel=normalizeValue2(rawRouting.guideModel)||normalizeValue2(baseRouting.guideModel)||planModel,rawReview=normalizeValue2(rawRouting.reviewModel),reviewModel=__name(v2=>{if(!v2)return!0;let lower4=v2.toLowerCase();return lower4==="inherit"||lower4==="model"||lower4==="your-model"||lower4.startsWith("example-")||lower4.includes("placeholder")||lower4.includes("changeme")},"isBlankReview")(rawReview)?"":rawReview;return{primaryModel,subagentModel,smallFastModel:normalizeValue2(rawRouting.smallFastModel)||normalizeValue2(baseRouting.smallFastModel)||"",planModel,exploreModel,generalModel,teamModel,guideModel,reviewModel}}function inferProviderModelFamily(model){let normalizedModel2=normalizeValue2(model).toLowerCase();return normalizedModel2?normalizedModel2.includes("claude")?"claude":normalizedModel2.startsWith("gpt-")||normalizedModel2.startsWith("o1")||normalizedModel2.startsWith("o3")||normalizedModel2.startsWith("o4")||normalizedModel2.includes("codex")?"openai":normalizedModel2.startsWith("gemini-")?"gemini":normalizedModel2.startsWith("grok-")?"grok":normalizedModel2.startsWith("deepseek-")?"deepseek":normalizedModel2.startsWith("qwen")?"qwen":normalizedModel2.startsWith("kimi-")?"kimi":normalizedModel2.startsWith("swe-")?"swe":normalizedModel2.startsWith("glm-")?"glm":normalizedModel2.startsWith("lingsi-")?"lingsi":"unknown":"unknown"}function isAnthropicMessagesCompatibleFamily(family){return family==="claude"||family==="deepseek"||family==="qwen"||family==="kimi"||family==="swe"||family==="glm"||family==="lingsi"}function getProviderModeSlotValues(routing){let primaryModel=normalizeValue2(routing?.primaryModel),executionModel=normalizeValue2(routing?.subagentModel)||normalizeValue2(routing?.generalModel)||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?.subagentModel)||normalizeValue2(routing?.generalModel),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"||providerId==="openrouter"?"anthropic_native":providerId==="kimi"||providerId==="openai"||providerId==="openrouter_openai"||providerId==="xai"||providerId==="deepseek"||providerId==="gemini"?"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_5_max"||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":configuredFamilies.has("openai")?"openai_native":"hybrid_compatible":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;getProviderModelModeDefinition(modeId);let family=inferProviderModelFamily(normalizedModel2);return modeId==="anthropic_native"?isAnthropicMessagesCompatibleFamily(family):modeId==="openai_native"?family==="openai":!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){if(modeId==="hybrid_compatible")return{primaryModel:"gpt-5.5",haikuModel:"deepseek-v4-flash",sonnetModel:"deepseek-v4-pro",opusModel:"gpt-5.5"};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=[];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)&&requireExplicitHybridSelections&&issues.push({level:"error",slot,message:localize(language,`${slotDefinition.label} is required to be explicitly set for this hybrid selection flow.`,`${slotDefinition.label} \u5728\u6B64\u7279\u6B8A\u6DF7\u5408\u9009\u62E9\u6D41\u7A0B\u4E2D\u9700\u8981\u660E\u786E\u8BBE\u7F6E\u3002`)})}return issues}function filterProviderModeAutoRepairCandidates(modeId,roles,candidates){let definition=getProviderModelModeDefinition(modeId),uniqueCandidates=[...new Set(candidates.map(candidate=>candidate.trim()))].filter(Boolean).filter(candidate=>isProviderModelCompatibleWithMode(modeId,candidate)),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(completeProviderRoutingSlotsFromPrimary,"completeProviderRoutingSlotsFromPrimary");PROVIDER_MODE_SLOT_ORDER=["primary","haiku","sonnet","opus"];__name(inferProviderModelFamily,"inferProviderModelFamily");__name(isAnthropicMessagesCompatibleFamily,"isAnthropicMessagesCompatibleFamily");__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",slotDefinitions:{primary:{label:"\u542F\u52A8\u6A21\u578B",description:"Main session workhorse model for Anthropic-native mode.",placeholder:"claude-sonnet-4-6",defaultModel:"claude-sonnet-4-6"},haiku:{label:"\u8F7B\u91CF\u6A21\u578B",description:"Fast-response helper slot for Anthropic-native mode.",placeholder:"claude-haiku-4-5",defaultModel:"claude-haiku-4-5"},sonnet:{label:"\u4E2D\u5EA6\u6A21\u578B",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:"\u8BA1\u7B97\u6A21\u578B",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:["openai","openrouter_openai","deepseek","kimi","xai","gemini","openrouter","custom"],routingPresetIds:["gpt_5_5_max","gpt_5_4_codex","gpt_5_1_stable","gpt_5_3_codex"],defaultRoutingPresetId:"gpt_5_5_max",slotDefinitions:{primary:{label:"\u542F\u52A8\u6A21\u578B",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:"\u8F7B\u91CF\u6A21\u578B",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:"\u4E2D\u5EA6\u6A21\u578B",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:"\u8BA1\u7B97\u6A21\u578B",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. Supports all major model families via custom/OpenAI-compatible gateways (gpt-5.*, claude-*, gemini-*, grok-*, kimi-*, swe-*, glm-*, lingsi-* etc.). Model names are matched by prefix for maximum flexibility with user-managed endpoints.",providerPresetIds:["custom","openrouter","openrouter_openai","openai","deepseek","xai","gemini"],routingPresetIds:["custom","gpt55_deepseek_combo","deepseek_gpt_combo","grok_current","deepseek_v4_pro"],defaultRoutingPresetId:"gpt55_deepseek_combo",slotDefinitions:{primary:{label:"\u542F\u52A8\u6A21\u578B",description:"Main session slot. For custom providers: accepts any model string (gpt-5.*, claude-*, gemini-*, grok-* etc.). Prefix matching is used for routing.",placeholder:"gemini-3-5-flash-high",defaultModel:"gpt-5.5",requireExplicitSelection:!1},haiku:{label:"\u8F7B\u91CF\u6A21\u578B",description:"Fast helper slot. For custom providers: any fast model via prefix (e.g. gpt-5.3-*, gemini-3-5-flash, claude-haiku-*)",placeholder:"gemini-3-5-flash",defaultModel:"gpt-5.3-codex",requireExplicitSelection:!1},sonnet:{label:"\u4E2D\u5EA6\u6A21\u578B",description:"Execution slot. For custom providers: any strong model via prefix matching (gpt-5.5-*, claude-sonnet-*, gemini-*, grok-*)",placeholder:"gemini-3-5-flash-high",defaultModel:"claude-sonnet-4-6",requireExplicitSelection:!1},opus:{label:"\u8BA1\u7B97\u6A21\u578B",description:"Planning slot. For custom providers: any top-tier model via prefix (gpt-5.5-*, claude-opus-*, gemini-*, grok-*)",placeholder:"gemini-3-5-flash-high",defaultModel:"claude-opus-4-6",requireExplicitSelection:!1}}}},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 getAuthTypeLabel(authType){return authType==="auth_token"?"Auth Token":"API Key"}function getAuthTypeDefaultIndex(authType){return authType==="auth_token"?1:0}function getManageActionLabel(action){return MANAGE_ACTION_OPTIONS.find(option=>option.value===action)?.label??""}function getProviderModelModeForOption(modelModeOption){return modelModeOption==="gemini_compatible"||modelModeOption==="grok_compatible"?"hybrid_compatible":modelModeOption}function getModelModeOptionLabel(modelModeOption){return MODEL_MODE_OPTIONS.find(option=>option.value===modelModeOption)?.label??getProviderModelModeLabel(getProviderModelModeForOption(modelModeOption))}function getProviderConfigModeOptionLabel(value){return PROVIDER_CONFIG_MODE_OPTIONS.find(option=>option.value===value)?.label??value}function getForcedApiDialectMode(modelModeOption){return modelModeOption==="gemini_compatible"||modelModeOption==="grok_compatible"?"openai_responses":void 0}function applyForcedApiDialectMode(draft,modelModeOption){let forcedDialect=getForcedApiDialectMode(modelModeOption);return forcedDialect?{...draft,apiDialectMode:forcedDialect}:draft}function getModeOptionDraftDefaults(modelMode,modelModeOption){let defaults3=createDefaultProviderModeSlotValues(modelMode);return modelModeOption==="gemini_compatible"?{baseUrl:GEMINI_OPENAI_BASE_URL,primaryModel:"gemini-3-5-flash-high",defaultHaikuModel:"gemini-3-5-flash",defaultSonnetModel:"gemini-3-5-flash-high",defaultOpusModel:"gemini-3-5-flash-high",apiDialectMode:"openai_responses"}:modelModeOption==="grok_compatible"?{baseUrl:XAI_GROK_BASE_URL,primaryModel:"grok-4.3",defaultHaikuModel:"grok-composer-2.5-fast",defaultSonnetModel:"grok-build-0.1",defaultOpusModel:"grok-4.3",apiDialectMode:"openai_responses"}:{baseUrl:"",primaryModel:defaults3.primaryModel,defaultHaikuModel:defaults3.haikuModel,defaultSonnetModel:defaults3.sonnetModel,defaultOpusModel:defaults3.opusModel,apiDialectMode:void 0}}function getChooseProfileQuestion(action){return action==="edit"?"\u9009\u62E9\u8981\u7F16\u8F91\u7684\u914D\u7F6E":action==="copy"?"\u9009\u62E9\u8981\u590D\u5236\u7684\u914D\u7F6E":action==="set-default"?"\u9009\u62E9\u8981\u8BBE\u4E3A\u9ED8\u8BA4\u7684\u914D\u7F6E":"\u9009\u62E9\u8981\u5220\u9664\u7684\u914D\u7F6E"}function getProfileOptionLabel(profile,index){let base=`${index+1}. ${profile.name} (${getAuthTypeLabel(profile.authType)})`,profileMode=getManagerProfileModelMode(profile),modeLabel3=profileMode==="anthropic_native"?"Claude":profileMode==="openai_native"?"OpenAI":profileMode==="hybrid_compatible"?"\u6DF7\u5408":"",suffix="",high=profile.providerProfile?.geminiHighAmplification;high==="off"?suffix+=" [Gemini High: \u5DF2\u5173\u95ED]":high==="light"?suffix+=" [Gemini High: \u8F7B\u91CF]":high==="full"?suffix+=" [Gemini High: \u5B8C\u6574]":isGeminiRelated(profile)&&(suffix+=" [Gemini High: \u9ED8\u8BA4]"),profile.providerProfile?.modelRouting.primaryModel&&(suffix+=` [\u8DEF\u7531: ${describeProviderPrimaryUpstreamPath(profile.providerProfile)}]`);let modePart=modeLabel3?` [${modeLabel3}]`:"";return`${base}${modePart}${suffix}`}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,reviewModel:profile.providerProfile?.modelRouting.reviewModel}),providerId=inferProviderPresetId(profile.baseUrl)??"custom";return getProviderModelModeForProfile({providerId,modelRouting})}function createDraft(profile,modelMode="openai_native",modelModeOption=modelMode){let existingModelMode=profile?getManagerProfileModelMode(profile):modelMode,shouldUseModeDefaults=!profile||existingModelMode!==modelMode,defaults3=getModeOptionDraftDefaults(modelMode,modelModeOption);return{name:profile?.name??"",authType:profile?.authType??"api_key",apiKey:profile?.apiKey??"",baseUrl:shouldUseModeDefaults?defaults3.baseUrl:profile?.baseUrl??defaults3.baseUrl,modelMode,primaryModel:shouldUseModeDefaults?defaults3.primaryModel:profile?.primaryModel??defaults3.primaryModel,defaultHaikuModel:shouldUseModeDefaults?defaults3.defaultHaikuModel:profile?.defaultHaikuModel??defaults3.defaultHaikuModel,defaultSonnetModel:shouldUseModeDefaults?defaults3.defaultSonnetModel:profile?.defaultSonnetModel??defaults3.defaultSonnetModel,defaultOpusModel:shouldUseModeDefaults?defaults3.defaultOpusModel:profile?.defaultOpusModel??defaults3.defaultOpusModel,reviewModel:shouldUseModeDefaults?"":profile?.providerProfile?.modelRouting.reviewModel??"",geminiHighAmplification:profile?.providerProfile?.geminiHighAmplification,apiDialectMode:shouldUseModeDefaults?defaults3.apiDialectMode:profile?.providerProfile?.apiDialectMode}}function createCopyDraft(profile,modelMode,modelModeOption){return{...createDraft(profile,modelMode,modelModeOption),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 isSameManagerProfileForEdit(profile,originalProfile){if(!originalProfile)return!1;if(profile.id===originalProfile.id)return!0;let profileKey=profile.providerProfile?getProviderProfileKey(profile.providerProfile):profile.id.trim(),originalProfileKey=originalProfile.providerProfile?getProviderProfileKey(originalProfile.providerProfile):originalProfile.id.trim();return profileKey&&originalProfileKey&&profileKey===originalProfileKey?!0:profile.name.trim().toLowerCase()===originalProfile.name.trim().toLowerCase()&&profile.baseUrl.trim()===originalProfile.baseUrl.trim()&&profile.apiKey.trim()===originalProfile.apiKey.trim()}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=>!isSameManagerProfileForEdit(profile,originalProfile)&&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\u6216 Auth Token \u4E0D\u80FD\u4E3A\u7A7A\u3002",focusField:"apiKey"};if(isPlaceholderProviderCredential(apiKey))return{message:"API\u5BC6\u94A5\u770B\u8D77\u6765\u50CF\u5360\u4F4D\u7B26\uFF1B\u5982\u679C\u4F7F\u7528 Auth Token\uFF0C\u8BF7\u8F93\u5165\u771F\u5B9E\u53EF\u7528\u7684 Token\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 resolveDraftAuthType(profile){return profile.authType}function isGeminiRelated(d){return`${d.baseUrl??""} ${d.primaryModel??""}`.toLowerCase().includes("gemini")}function slotModelsForDraft(draft){return[draft.primaryModel,draft.defaultHaikuModel,draft.defaultSonnetModel,draft.defaultOpusModel].map(model=>String(model??"").trim()).filter(Boolean)}function resolveDraftApiDialectMode(draft){return inferProviderApiDialectMode(draft.modelMode,slotModelsForDraft(draft))}function createProviderProfileFromDraft(profile,modelMode,originalProviderProfile,reviewModel){let now3=Date.now(),modelRouting=createCustomProviderModelRouting({primaryModel:profile.primaryModel,haikuModel:profile.defaultHaikuModel,sonnetModel:profile.defaultSonnetModel,opusModel:profile.defaultOpusModel,reviewModel}),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??now3,updatedAt:now3}}function saveDraft(draft,action,originalProfile,options){let profiles=loadManagerProfiles(),originalId=action==="edit"?originalProfile?.id:void 0,nextProfile={id:createUniqueProfileId(draft.name,profiles,originalId),name:draft.name.trim(),authType:draft.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,draft.reviewModel?.trim()));if(draft.geminiHighAmplification&&(repairResult.profile.geminiHighAmplification=draft.geminiHighAmplification),repairResult.profile.apiDialectMode=resolveDraftApiDialectMode(draft),!repairResult.profile.geminiHighAmplification){let m3=(draft.primaryModel||"").toLowerCase()+" "+(draft.baseUrl||"").toLowerCase();m3.includes("gemini")&&(m3.includes("flash")||m3.includes("-high")||m3.includes("high"))&&(repairResult.profile.geminiHighAmplification="light")}let 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 previousCurrent=readCcjkProviderConfig().currentProfile?.trim(),setAsDefault=options?.setAsDefault??(action==="add"||action==="copy"?!0:previousCurrent===originalId),nextCurrent=setAsDefault||previousCurrent===originalId?savedProfile.id:previousCurrent||void 0,writeResult=writeCcjkProviderConfig({currentProfile:nextCurrent,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:setAsDefault}),markProviderOnboardingComplete(),{profile:savedProfile,backupPath:writeResult.backupPath,repairMessages:repairResult.repaired?repairResult.messages:[],isDefault:setAsDefault||nextCurrent===savedProfile.id}}function setDefaultManagerProfile(profile){let config3=readCcjkProviderConfig(),writeResult=writeCcjkProviderConfig({currentProfile:profile.id,profiles:config3.profiles}),activated=activateProviderProfile(profile.id)!==null;return{backupPath:writeResult.backupPath,activated}}function deleteManagerProfile(profile){let profiles=loadManagerProfiles().filter(candidate=>candidate.id!==profile.id),currentProfile=readCcjkProviderConfig().currentProfile?.trim(),nextCurrentProfile=currentProfile&&currentProfile!==profile.id?currentProfile:void 0,writeResult=writeCcjkProviderConfig({currentProfile:nextCurrentProfile,profiles});return deleteProviderProfile(profile.id),{backupPath:writeResult.backupPath}}function PromptSelect({question,options,defaultIndex=0,onSelect,intro}){let[selectedIndex,setSelectedIndex]=(0,import_react75.useState)(defaultIndex);return useInput((input2,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(input2,10);Number.isInteger(numericIndex)&&numericIndex>=1&&numericIndex<=options.length&&onSelect(options[numericIndex-1].value)}),(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[intro,(0,import_jsx_runtime99.jsxs)(ThemedText,{children:[(0,import_jsx_runtime99.jsx)(ThemedText,{bold:!0,children:"?"})," ",question," ",(0,import_jsx_runtime99.jsx)(ThemedText,{dimColor:!0,children:"(Use arrow keys)"})]}),options.map((option,index)=>(0,import_jsx_runtime99.jsxs)(ThemedText,{color:index===selectedIndex?"suggestion":void 0,children:[index===selectedIndex?figures_default.pointer:" "," ",option.label]},option.value))]})}function PromptTextInput({label:label2,value,onChange,onSubmit}){let[cursorOffset,setCursorOffset]=(0,import_react75.useState)(value.length);return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime99.jsxs)(ThemedText,{children:[(0,import_jsx_runtime99.jsx)(ThemedText,{bold:!0,children:"?"})," ",label2," "]}),(0,import_jsx_runtime99.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_react75.useState)(0);return useInput((input2,key)=>{if(key.leftArrow||key.rightArrow||key.tab){setSelectedIndex(index=>index===0?1:0);return}if(input2.toLowerCase()==="n"){onSelect(!1);return}if(input2.toLowerCase()==="y"){onSelect(!0);return}key.return&&onSelect(selectedIndex===1)}),(0,import_jsx_runtime99.jsxs)(ThemedText,{children:[(0,import_jsx_runtime99.jsx)(ThemedText,{bold:!0,children:"?"})," \u8FD4\u56DE\u4E3B\u83DC\u5355\uFF1F"," ",(0,import_jsx_runtime99.jsx)(ThemedText,{color:selectedIndex===0?"suggestion":void 0,children:"no"})," / ",(0,import_jsx_runtime99.jsx)(ThemedText,{color:selectedIndex===1?"suggestion":void 0,children:"yes"})]})}function YesNoPrompt({question,defaultValue=!1,onSelect}){let[selectedIndex,setSelectedIndex]=(0,import_react75.useState)(defaultValue?1:0);return useInput((input2,key)=>{if(key.leftArrow||key.rightArrow||key.tab){setSelectedIndex(index=>index===0?1:0);return}if(input2.toLowerCase()==="n"){onSelect(!1);return}if(input2.toLowerCase()==="y"){onSelect(!0);return}key.return&&onSelect(selectedIndex===1)}),(0,import_jsx_runtime99.jsxs)(ThemedText,{children:[(0,import_jsx_runtime99.jsx)(ThemedText,{bold:!0,children:"?"})," ",question," ",(0,import_jsx_runtime99.jsx)(ThemedText,{color:selectedIndex===0?"suggestion":void 0,children:"no"})," / ",(0,import_jsx_runtime99.jsx)(ThemedText,{color:selectedIndex===1?"suggestion":void 0,children:"yes"})]})}function CompletedLine({question,answer}){return(0,import_jsx_runtime99.jsxs)(ThemedText,{children:[(0,import_jsx_runtime99.jsx)(ThemedText,{color:"success",children:"\u2714"})," ",question," ",answer]})}function ProviderConfigIntro(){return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime99.jsx)(ThemedText,{color:"success",children:" \u{1F432} Clavue"}),(0,import_jsx_runtime99.jsx)(ThemedText,{bold:!0,children:"\u6267\u884C\u4F18\u5148\u7684 AI \u7F16\u7A0B\u7EC8\u7AEF"}),(0,import_jsx_runtime99.jsx)(ThemedText,{dimColor:!0,children:"\u591A\u6A21\u578B\u8DEF\u7531 \xB7 \u539F\u751F\u5DE5\u5177\u6267\u884C \xB7 \u8BA1\u5212/\u4EFB\u52A1/\u9A8C\u8BC1\u95ED\u73AF"}),(0,import_jsx_runtime99.jsx)(ThemedText,{dimColor:!0,children:"\u53EF\u7528\u5B98\u65B9\u767B\u5F55\uFF0C\u4E5F\u53EF\u63A5\u5165 OpenAI / Claude / Gemini / Grok / \u81EA\u5B9A\u4E49\u7F51\u5173\u3002"}),(0,import_jsx_runtime99.jsx)(ThemedText,{children:" "})]})}function ManagerHeader({count:count4,modelModeOption,providerConfigMode}){return(0,import_jsx_runtime99.jsxs)(import_jsx_runtime99.Fragment,{children:[(0,import_jsx_runtime99.jsx)(ThemedText,{children:"\u{1F511} API \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime99.jsx)(ThemedText,{dimColor:!0,children:"\u{1F4CB} Clavue \u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime99.jsx)(ThemedText,{dimColor:!0,children:"\u7EC4\u5408\u6A21\u5F0F\u6309\u542F\u52A8\u3001\u8F7B\u91CF\u3001\u4E2D\u5EA6\u3001\u8BA1\u7B97\u3001\u534F\u4F5C\u3001\u5BA1\u6838\u69FD\u4F4D\u8DEF\u7531\uFF1B\u5355\u72EC\u6A21\u5F0F\u53EA\u663E\u793A\u540C\u5BB6\u65CF\u914D\u7F6E\u3002"}),(0,import_jsx_runtime99.jsx)(ThemedText,{children:" "}),providerConfigMode?(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 Provider \u914D\u7F6E\u6A21\u5F0F:",answer:getProviderConfigModeOptionLabel(providerConfigMode)}):(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",answer:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E"}),(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F:",answer:getModelModeOptionLabel(modelModeOption)}),(0,import_jsx_runtime99.jsxs)(ThemedText,{children:["\u5F53\u524D\u914D\u7F6E\u6570\u91CF\uFF1A",count4]})]})}function getEditFieldsForStage(stage){return stage.quickAdd?QUICK_ADD_FIELDS:EDIT_FIELDS}function isAuthTypeTokenInput(value){return/^(auth[-_ ]?token|access[-_ ]?token|bearer|token)$/iu.test(value.trim())}function isAuthTypeApiKeyInput(value){return/^(api[-_ ]?key|key)$/iu.test(value.trim())}function resolveSubmittedAuthType(value,current){let trimmed=value.trim();return trimmed?isAuthTypeTokenInput(trimmed)?"auth_token":isAuthTypeApiKeyInput(trimmed)?"api_key":current:current}function getCompletedFieldAnswer(draft,field){return field==="authType"?getAuthTypeLabel(draft.authType):draft[field]??""}function renderCompletedFields(draft,untilIndex,fields=EDIT_FIELDS){return fields.slice(0,untilIndex).map(field=>(0,import_jsx_runtime99.jsx)(CompletedLine,{question:FIELD_LABELS[field],answer:getCompletedFieldAnswer(draft,field)},field))}function completeQuickAddDraft(stage,draft,submittedField){if(!stage.quickAdd||submittedField!=="primaryModel")return draft;let primaryModel=draft.primaryModel.trim();return primaryModel?{...draft,defaultHaikuModel:primaryModel,defaultSonnetModel:primaryModel,defaultOpusModel:primaryModel}:draft}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,initialStage="api-mode"}){let[stage,setStage]=(0,import_react75.useState)(initialStage==="provider-mode"?{kind:"provider-mode"}:{kind:"mode"}),profiles=(0,import_react75.useMemo)(()=>loadManagerProfiles(),[stage]),stageModelMode=stage.kind==="manage"||stage.kind==="choose-profile"||stage.kind==="confirm-delete"||stage.kind==="edit"||stage.kind==="post-save-confirm"?stage.modelMode:void 0,filteredProfiles=(0,import_react75.useMemo)(()=>stageModelMode?profiles.filter(p=>{let profileMode=getManagerProfileModelMode(p);return stageModelMode==="hybrid_compatible"?!0:profileMode===stageModelMode}):profiles,[profiles,stageModelMode]),profileOptions=filteredProfiles.map((profile,index)=>({label:getProfileOptionLabel(profile,index),value:profile.id}));function handleProviderConfigModeSelection(value){if(value==="combination"){setStage({kind:"manage",modelMode:"hybrid_compatible",modelModeOption:"hybrid_compatible",providerConfigMode:value});return}if(value==="single"){setStage({kind:"model-mode",scope:"single",source:"provider-mode",providerConfigMode:value});return}setStage({kind:"mode"})}__name(handleProviderConfigModeSelection,"handleProviderConfigModeSelection");function handleModeSelection(value){if(value==="custom"){setStage({kind:"model-mode",scope:"all",source:"api-custom"});return}if(value==="official"){setStage(createReturnStage({configured:!1,message:"\u5DF2\u9009\u62E9 Clavue \u5B98\u65B9\u767B\u5F55\u3002\u8BF7\u8FD0\u884C `clavue auth login` \u5B8C\u6210\u767B\u5F55\u3002"},["\u2714 \u5DF2\u9009\u62E9 Clavue \u5B98\u65B9\u767B\u5F55","\u5B98\u65B9\u767B\u5F55\u9002\u5408\u76F4\u63A5\u4F7F\u7528\u6258\u7BA1\u8BA4\u8BC1\uFF1B\u81EA\u5B9A\u4E49\u7F51\u5173/\u591A\u6A21\u578B\u8BF7\u8D70\u201C\u81EA\u5B9A\u4E49 API \u914D\u7F6E\u201D\u3002","\u4E0B\u4E00\u6B65\uFF1A\u9000\u51FA\u540E\u8FD0\u884C `clavue auth login` \u5B8C\u6210\u5B98\u65B9\u767B\u5F55\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","\u5DF2\u6709 ZCF/CCJK \u8DEF\u7531\u53EF\u7528 `clavue provider import --from zcf` \u6216 `clavue provider import --from ccjk` \u5BFC\u5165\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` \u7EE7\u7EED\u914D\u7F6E\uFF1B`/provider` \u9700\u8FDB\u5165\u5DF2\u914D\u7F6E\u4F1A\u8BDD\u540E\u4F7F\u7528\u3002"]))}__name(handleModeSelection,"handleModeSelection");function handleModelModeSelection(modelModeOption){let modelMode=getProviderModelModeForOption(modelModeOption);setStage({kind:"manage",modelMode,modelModeOption,providerConfigMode:stage.kind==="model-mode"?stage.providerConfigMode:void 0})}__name(handleModelModeSelection,"handleModelModeSelection");function handleManageSelection(modelMode,modelModeOption,value,providerConfigMode){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` \u7EE7\u7EED\u914D\u7F6E\uFF1B`/provider` \u9700\u8FDB\u5165\u5DF2\u914D\u7F6E\u4F1A\u8BDD\u540E\u4F7F\u7528\u3002"]));return}if(value==="add"){setStage({kind:"edit",modelMode,modelModeOption,action:"add",draft:applyForcedApiDialectMode(createDraft(void 0,modelMode,modelModeOption),modelModeOption),fieldIndex:0,quickAdd:modelMode!=="hybrid_compatible",providerConfigMode});return}if(filteredProfiles.length===0){setStage({kind:"manage",modelMode,modelModeOption,statusMessage:"\u5F53\u524D\u6CA1\u6709\u53EF\u64CD\u4F5C\u7684\u914D\u7F6E\uFF0C\u8BF7\u5148\u6DFB\u52A0\u914D\u7F6E\u3002",providerConfigMode});return}setStage({kind:"choose-profile",modelMode,modelModeOption,action:value,providerConfigMode})}__name(handleManageSelection,"handleManageSelection");function handleProfileSelection(modelMode,modelModeOption,action,profileId,providerConfigMode){let profile=profiles.find(candidate=>candidate.id===profileId);if(!profile){setStage({kind:"manage",modelMode,modelModeOption,statusMessage:"\u9009\u62E9\u7684\u914D\u7F6E\u4E0D\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u3002",providerConfigMode});return}if(action==="delete"){setStage({kind:"confirm-delete",modelMode,modelModeOption,profile,providerConfigMode});return}if(action==="set-default"){try{let alreadyDefault=readCcjkProviderConfig().currentProfile?.trim()===profile.id,{backupPath,activated}=setDefaultManagerProfile(profile),lines=[alreadyDefault?`\u2139 ${profile.name} \u5DF2\u7ECF\u662F\u9ED8\u8BA4\u914D\u7F6E`:`\u2714 \u5DF2\u5C06 ${profile.name} \u8BBE\u4E3A\u9ED8\u8BA4\u914D\u7F6E`,...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],activated?"\u2714 \u5F53\u524D\u4F1A\u8BDD\u5DF2\u70ED\u52A0\u8F7D\u65B0\u7684\u9ED8\u8BA4\u914D\u7F6E":"\u26A0 \u5199\u5165\u5B8C\u6210\uFF0C\u4F46\u70ED\u52A0\u8F7D\u5931\u8D25\uFF1B\u8BF7\u91CD\u65B0\u542F\u52A8 Clavue \u540E\u518D\u8BD5\u3002"];setStage({kind:"post-save-confirm",modelMode,modelModeOption,profileName:profile.name,profileId:profile.id,isDefault:!0,restartRequired:!activated,lines,providerConfigMode})}catch(error40){setStage({kind:"manage",modelMode,modelModeOption,statusMessage:error40 instanceof Error?error40.message:"\u5207\u6362\u9ED8\u8BA4\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",providerConfigMode})}return}setStage({kind:"edit",modelMode,modelModeOption,action,originalProfile:profile,draft:action==="copy"?createCopyDraft(profile,modelMode,modelModeOption):createDraft(profile,modelMode,modelModeOption),fieldIndex:0,providerConfigMode})}__name(handleProfileSelection,"handleProfileSelection");function updateDraftField(field,value){field!=="authType"&&setStage(current=>current.kind==="edit"?{...current,draft:{...current.draft,[field]:value},errorMessage:void 0}:current)}__name(updateDraftField,"updateDraftField");function chooseGeminiHighAmplification(value){setStage(current=>{if(current.kind!=="edit"||!current.geminiHighPending)return current;let nextDraft={...current.draft,geminiHighAmplification:value};try{let{profile,backupPath,repairMessages,isDefault}=saveDraft(nextDraft,current.action,current.originalProfile),headline=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}`,defaultLine=isDefault?`\u2714 ${profile.name} \u5DF2\u662F\u5F53\u524D\u9ED8\u8BA4\u914D\u7F6E`:`\u2139 ${profile.name} \u5DF2\u4FDD\u5B58\uFF0C\u4F46\u5F53\u524D\u9ED8\u8BA4\u914D\u7F6E\u672A\u66F4\u6539\uFF08\u53EF\u5728\u83DC\u5355"\u5207\u6362\u9ED8\u8BA4\u914D\u7F6E"\u5207\u6362\uFF09`,loadedLine=isDefault?"\u2714 \u5F53\u524D\u4F1A\u8BDD\u5DF2\u70ED\u52A0\u8F7D\u8BE5\u914D\u7F6E\uFF0C\u53EF\u7ACB\u5373\u4F7F\u7528 /model":"\u2714 \u5F53\u524D\u4F1A\u8BDD\u672A\u5207\u6362\u9ED8\u8BA4\uFF1B\u539F\u914D\u7F6E\u4ECD\u5728\u4F7F\u7528",lines=[headline,...repairMessages.map(message=>`\u26A0 ${message}`),...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],defaultLine,loadedLine];return{kind:"post-save-confirm",modelMode:current.modelMode,modelModeOption:current.modelModeOption,profileName:profile.name,profileId:profile.id,isDefault,restartRequired:!1,lines,providerConfigMode:current.providerConfigMode}}catch(err2){return{...current,draft:nextDraft,geminiHighPending:!1,errorMessage:err2 instanceof Error?err2.message:"\u4FDD\u5B58\u5931\u8D25"}}})}__name(chooseGeminiHighAmplification,"chooseGeminiHighAmplification");function submitDraftField(value){setStage(current=>{if(current.kind!=="edit")return current;let editFields=getEditFieldsForStage(current),field=editFields[current.fieldIndex];if(!field)return current;let trimmedValue=value.trim(),isModelField=field==="primaryModel"||field==="defaultHaikuModel"||field==="defaultSonnetModel"||field==="defaultOpusModel"||field==="reviewModel",originalValue=field==="reviewModel"?void 0:current.originalProfile?.[field],fallbackValue=isModelField&&!trimmedValue&&field!=="reviewModel"?originalValue||current.draft[field]:trimmedValue,submittedValue=field==="authType"?resolveSubmittedAuthType(fallbackValue,current.draft.authType):fallbackValue,nextDraft=completeQuickAddDraft(current,{...current.draft,[field]:submittedValue},field);if(current.fieldIndex<editFields.length-1)return{...current,draft:nextDraft,fieldIndex:current.fieldIndex+1,errorMessage:void 0};let errorMessage3=validateDraft(nextDraft,profiles,current.action==="edit"?current.originalProfile:void 0);if(errorMessage3){let focusIndex=editFields.findIndex(draftField=>draftField===errorMessage3.focusField);return{...current,draft:nextDraft,fieldIndex:focusIndex>=0?focusIndex:0,errorMessage:errorMessage3.message}}if(isGeminiRelated(nextDraft)&&!nextDraft.geminiHighAmplification)return{...current,draft:nextDraft,geminiHighPending:!0,errorMessage:void 0};try{let{profile,backupPath,repairMessages,isDefault}=saveDraft(nextDraft,current.action,current.originalProfile),headline=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}`,defaultLine=isDefault?`\u2714 ${profile.name} \u5DF2\u662F\u5F53\u524D\u9ED8\u8BA4\u914D\u7F6E`:`\u2139 ${profile.name} \u5DF2\u4FDD\u5B58\uFF0C\u4F46\u5F53\u524D\u9ED8\u8BA4\u914D\u7F6E\u672A\u66F4\u6539\uFF08\u53EF\u5728\u83DC\u5355"\u5207\u6362\u9ED8\u8BA4\u914D\u7F6E"\u5207\u6362\uFF09`,loadedLine=isDefault?"\u2714 \u5F53\u524D\u4F1A\u8BDD\u5DF2\u70ED\u52A0\u8F7D\u8BE5\u914D\u7F6E\uFF0C\u53EF\u7ACB\u5373\u4F7F\u7528 /model":"\u2714 \u5F53\u524D\u4F1A\u8BDD\u672A\u5207\u6362\u9ED8\u8BA4\uFF1B\u539F\u914D\u7F6E\u4ECD\u5728\u4F7F\u7528",lines=[headline,...repairMessages.map(message=>`\u26A0 ${message}`),...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],defaultLine,loadedLine];return{kind:"post-save-confirm",modelMode:current.modelMode,modelModeOption:current.modelModeOption,profileName:profile.name,profileId:profile.id,isDefault,restartRequired:!1,lines,providerConfigMode:current.providerConfigMode}}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 handlePostSaveDefaultChoice(confirmed){if(stage.kind==="post-save-confirm"){if(!confirmed){let previousCurrent=readCcjkProviderConfig().currentProfile?.trim(),previousProfile=loadManagerProfiles().find(p=>p.id===previousCurrent);setStage({...stage,profileName:previousProfile?.name??stage.profileName,profileId:previousProfile?.id??stage.profileId,isDefault:!1,lines:[...stage.lines,`\u2139 \u4FDD\u7559\u539F\u9ED8\u8BA4\u914D\u7F6E\uFF1A${previousProfile?.name??"\u672A\u8BBE\u7F6E"}`]});return}try{let profile=loadManagerProfiles().find(candidate=>candidate.id===stage.profileId);if(!profile){setStage({kind:"manage",modelMode:stage.modelMode,modelModeOption:stage.modelModeOption,statusMessage:"\u914D\u7F6E\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u8BBE\u4E3A\u9ED8\u8BA4\u3002",providerConfigMode:stage.providerConfigMode});return}let{backupPath,activated}=setDefaultManagerProfile(profile);setStage({...stage,isDefault:!0,restartRequired:!activated,lines:[...stage.lines,`\u2714 \u5DF2\u5C06 ${stage.profileName} \u8BBE\u4E3A\u9ED8\u8BA4\u914D\u7F6E`,...backupPath?[`\u{1F4C1} \u5DF2\u521B\u5EFA\u914D\u7F6E\u5907\u4EFD\uFF1A${backupPath}`]:[],activated?"\u2714 \u5F53\u524D\u4F1A\u8BDD\u5DF2\u70ED\u52A0\u8F7D\uFF1B\u53EF\u7ACB\u5373\u4F7F\u7528 /model":"\u26A0 \u70ED\u52A0\u8F7D\u5931\u8D25\uFF1B\u8BF7\u91CD\u542F Clavue \u540E\u518D\u8BD5"]})}catch(error40){setStage({kind:"manage",modelMode:stage.modelMode,modelModeOption:stage.modelModeOption,statusMessage:error40 instanceof Error?error40.message:"\u5207\u6362\u9ED8\u8BA4\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",providerConfigMode:stage.providerConfigMode})}}}__name(handlePostSaveDefaultChoice,"handlePostSaveDefaultChoice");function handlePostSaveLoadConfirm(loaded){if(stage.kind==="post-save-confirm"){if(loaded){setStage(createReturnStage({configured:!0,message:`${stage.profileName} \u914D\u7F6E\u5DF2\u5C31\u7EEA\u3002`},[...stage.lines,"\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",stage.isDefault?`\u{1F389} ${stage.profileName} \u5DF2\u52A0\u8F7D\u6210\u529F\uFF0C\u53EF\u4EE5\u5728\u4F1A\u8BDD\u4E2D\u8F93\u5165 /model \u9009\u62E9\u6A21\u578B\u3002`:'\u{1F389} \u914D\u7F6E\u5DF2\u4FDD\u5B58\uFF1B\u9ED8\u8BA4\u4ECD\u662F\u539F\u914D\u7F6E\u3002\u9700\u8981\u65F6\u53EF\u8FDB\u5165 /provider \u2192 "\u5207\u6362\u9ED8\u8BA4\u914D\u7F6E"\u3002']));return}setStage(createReturnStage({configured:!0,message:`${stage.profileName} \u5DF2\u5199\u5165\uFF0C\u4F46\u9700\u8981\u91CD\u542F\u624D\u80FD\u52A0\u8F7D\u3002`},[...stage.lines,"\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","\u26A0 \u672A\u68C0\u6D4B\u5230\u52A0\u8F7D\u6210\u529F\uFF0C\u5EFA\u8BAE\u6267\u884C\u4EE5\u4E0B\u6B65\u9AA4\uFF1A"," 1. \u9000\u51FA\u5F53\u524D Clavue \u4F1A\u8BDD\uFF08Ctrl+D \u6216 /exit\uFF09"," 2. \u91CD\u65B0\u8FD0\u884C `clavue` \u542F\u52A8\u65B0\u4F1A\u8BDD"," 3. \u5728\u65B0\u4F1A\u8BDD\u4E2D\u8FD0\u884C `/provider` \u786E\u8BA4\u5F53\u524D\u9ED8\u8BA4\uFF0C\u518D\u7528 `/model` \u9009\u62E9\u6A21\u578B",stage.isDefault?`\u5F53\u524D\u9ED8\u8BA4\uFF1A${stage.profileName}`:"\u5F53\u524D\u9ED8\u8BA4\u672A\u53D8\u66F4\uFF08\u4FDD\u6301\u539F\u914D\u7F6E\uFF09"]))}}__name(handlePostSaveLoadConfirm,"handlePostSaveLoadConfirm");function confirmDelete(confirmed){if(stage.kind==="confirm-delete"){if(!confirmed){setStage({kind:"manage",modelMode:stage.modelMode,modelModeOption:stage.modelModeOption,providerConfigMode:stage.providerConfigMode});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,modelModeOption:stage.modelModeOption,statusMessage:error40 instanceof Error?error40.message:"\u5220\u9664\u914D\u7F6E\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002",providerConfigMode:stage.providerConfigMode})}}}__name(confirmDelete,"confirmDelete");function handleReturnMain(returnToMain){if(stage.kind==="return-main"){if(returnToMain){setStage(initialStage==="provider-mode"?{kind:"provider-mode"}:{kind:"mode"});return}onDone(stage.result.configured,stage.result.message)}}if(__name(handleReturnMain,"handleReturnMain"),stage.kind==="provider-mode")return(0,import_jsx_runtime99.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9 Provider \u914D\u7F6E\u6A21\u5F0F:",options:PROVIDER_CONFIG_MODE_OPTIONS,onSelect:handleProviderConfigModeSelection,intro:(0,import_jsx_runtime99.jsx)(ProviderConfigIntro,{})});if(stage.kind==="mode")return(0,import_jsx_runtime99.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",options:API_MODE_OPTIONS,defaultIndex:1,onSelect:handleModeSelection,intro:(0,import_jsx_runtime99.jsx)(ProviderConfigIntro,{})});if(stage.kind==="model-mode"){let modelModeOptions=stage.scope==="single"?SINGLE_MODEL_MODE_OPTIONS:MODEL_MODE_OPTIONS;return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime99.jsx)(ProviderConfigIntro,{}),stage.source==="provider-mode"?(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 Provider \u914D\u7F6E\u6A21\u5F0F:",answer:getProviderConfigModeOptionLabel("single")}):(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9 API \u914D\u7F6E\u6A21\u5F0F:",answer:"\u81EA\u5B9A\u4E49 API \u914D\u7F6E"}),(0,import_jsx_runtime99.jsx)(PromptSelect,{question:stage.scope==="single"?"\u8BF7\u9009\u62E9\u5355\u72EC\u6A21\u5F0F\u7684\u6A21\u578B\u5BB6\u65CF:":"\u8BF7\u9009\u62E9\u6A21\u578B\u8DEF\u7531\u6A21\u5F0F:",options:modelModeOptions,onSelect:handleModelModeSelection})]})}if(stage.kind==="manage")return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime99.jsx)(ManagerHeader,{count:filteredProfiles.length,modelModeOption:stage.modelModeOption,providerConfigMode:stage.providerConfigMode}),stage.statusMessage?(0,import_jsx_runtime99.jsx)(ThemedText,{color:"warning",children:stage.statusMessage}):null,(0,import_jsx_runtime99.jsx)(PromptSelect,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",options:MANAGE_ACTION_OPTIONS,onSelect:value=>handleManageSelection(stage.modelMode,stage.modelModeOption,value,stage.providerConfigMode)})]});if(stage.kind==="choose-profile")return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime99.jsx)(ManagerHeader,{count:filteredProfiles.length,modelModeOption:stage.modelModeOption,providerConfigMode:stage.providerConfigMode}),(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel(stage.action)}),(0,import_jsx_runtime99.jsx)(PromptSelect,{question:getChooseProfileQuestion(stage.action),options:profileOptions,onSelect:profileId=>handleProfileSelection(stage.modelMode,stage.modelModeOption,stage.action,profileId,stage.providerConfigMode)})]});if(stage.kind==="confirm-delete"){let selectedProfileIndex=filteredProfiles.findIndex(profile=>profile.id===stage.profile.id);return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime99.jsx)(ManagerHeader,{count:filteredProfiles.length,modelModeOption:stage.modelModeOption,providerConfigMode:stage.providerConfigMode}),(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel("delete")}),(0,import_jsx_runtime99.jsx)(CompletedLine,{question:getChooseProfileQuestion("delete"),answer:getProfileOptionLabel(stage.profile,selectedProfileIndex)}),(0,import_jsx_runtime99.jsx)(YesNoPrompt,{question:`\u786E\u8BA4\u5220\u9664\u914D\u7F6E ${stage.profile.name}\uFF1F`,onSelect:confirmDelete})]})}if(stage.kind==="edit"&&stage.geminiHighPending){let currentValue=stage.draft.geminiHighAmplification,geminiHighOptions=[{label:"\u5B8C\u6574\uFF08full\uFF09- \u6700\u5F3A\u80FD\u529B\uFF0C\u9002\u5408\u590D\u6742\u957F\u4EFB\u52A1",value:"full"},{label:"\u8F7B\u91CF\uFF08light\uFF09- \u4FDD\u7559\u6838\u5FC3\u7EAA\u5F8B\uFF0C\u4F53\u79EF\u5C0F\u5F88\u591A\uFF0C\u5BF9\u7F51\u5173\u66F4\u53CB\u597D",value:"light"},{label:"\u5173\u95ED\uFF08off\uFF09- \u6700\u5C0F prompt\uFF0C\u9002\u5408\u6781\u8F7B\u6A21\u578B\u4F46\u80FD\u529B\u4F1A\u4E0B\u964D",value:"off"}];return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime99.jsx)(ManagerHeader,{count:filteredProfiles.length,modelModeOption:stage.modelModeOption,providerConfigMode:stage.providerConfigMode}),(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel(stage.action)}),stage.originalProfile?(0,import_jsx_runtime99.jsx)(CompletedLine,{question:getChooseProfileQuestion(stage.action),answer:getProfileOptionLabel(stage.originalProfile,profiles.findIndex(p=>p.id===stage.originalProfile?.id))}):null,renderCompletedFields(stage.draft,getEditFieldsForStage(stage).length,getEditFieldsForStage(stage)),(0,import_jsx_runtime99.jsx)(ThemedText,{color:"warning",children:" "}),(0,import_jsx_runtime99.jsxs)(ThemedText,{color:"warning",children:["\u68C0\u6D4B\u5230 Gemini \u76F8\u5173\u914D\u7F6E\uFF08",stage.draft.primaryModel||stage.draft.baseUrl,"\uFF09\u2014\u2014 light \u6A21\u5F0F\u53EF\u5728\u4FDD\u6301\u7EAA\u5F8B\u7684\u540C\u65F6\u5927\u5E45\u964D\u4F4E prompt \u4F53\u79EF"]}),(0,import_jsx_runtime99.jsx)(PromptSelect,{question:"Gemini High \u534F\u8BAE\u5F3A\u5EA6\uFF08flash-high + \u81EA\u5B9A\u4E49\u7F51\u5173\u63A8\u8350 light\uFF09\uFF1A",options:geminiHighOptions,onSelect:chooseGeminiHighAmplification}),currentValue?(0,import_jsx_runtime99.jsxs)(ThemedText,{dimColor:!0,children:["\u5F53\u524D\u5DF2\u9009\u62E9\uFF1A",currentValue==="off"?"\u5173\u95ED\uFF08\u63A8\u8350\uFF09":"\u5F00\u542F"]}):null]})}if(stage.kind==="edit"){let editFields=getEditFieldsForStage(stage),currentField=editFields[stage.fieldIndex]??"name",selectedProfileIndex=stage.originalProfile?profiles.findIndex(profile=>profile.id===stage.originalProfile?.id):-1;return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime99.jsx)(ManagerHeader,{count:filteredProfiles.length,modelModeOption:stage.modelModeOption,providerConfigMode:stage.providerConfigMode}),(0,import_jsx_runtime99.jsx)(CompletedLine,{question:"\u8BF7\u9009\u62E9\u64CD\u4F5C",answer:getManageActionLabel(stage.action)}),stage.originalProfile?(0,import_jsx_runtime99.jsx)(CompletedLine,{question:getChooseProfileQuestion(stage.action==="add"?"edit":stage.action),answer:getProfileOptionLabel(stage.originalProfile,selectedProfileIndex)}):null,(0,import_jsx_runtime99.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime99.jsxs)(ThemedText,{children:[getEditTitle(stage.action),"\uFF1A",stage.originalProfile?.name??stage.draft.name]}),stage.quickAdd?(0,import_jsx_runtime99.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:"\u9996\u6B21\u5FEB\u901F\u914D\u7F6E\u53EA\u9700\u8981\u540D\u79F0\u3001URL\u3001\u8BA4\u8BC1\u65B9\u5F0F\u3001\u5BC6\u94A5\u6216 Token\u3001\u542F\u52A8\u6A21\u578B\uFF1B\u5176\u4ED6\u6A21\u578B\u69FD\u4F4D\u4F1A\u9ED8\u8BA4\u8DDF\u968F\u542F\u52A8\u6A21\u578B\uFF0C\u4E4B\u540E\u53EF\u5728 /provider \u7F16\u8F91\u3002"}):null,renderCompletedFields(stage.draft,stage.fieldIndex,editFields),stage.errorMessage?(0,import_jsx_runtime99.jsx)(ThemedText,{color:"error",children:stage.errorMessage}):null,currentField==="authType"?(0,import_jsx_runtime99.jsx)(PromptSelect,{question:FIELD_LABELS[currentField],options:AUTH_TYPE_OPTIONS,defaultIndex:getAuthTypeDefaultIndex(stage.draft.authType),onSelect:submitDraftField},currentField):(0,import_jsx_runtime99.jsx)(PromptTextInput,{label:FIELD_LABELS[currentField],value:stage.draft[currentField]??"",onChange:value=>updateDraftField(currentField,value),onSubmit:submitDraftField},currentField)]})}if(stage.kind==="post-save-confirm"){let isCurrent=readCcjkProviderConfig().currentProfile?.trim()===stage.profileId;return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[stage.lines.map((line,idx)=>(0,import_jsx_runtime99.jsx)(ThemedText,{children:line},`${idx}-${line}`)),(0,import_jsx_runtime99.jsx)(ThemedText,{children:" "}),isCurrent?(0,import_jsx_runtime99.jsx)(YesNoPrompt,{question:`\u5DF2\u52A0\u8F7D\u300C${stage.profileName}\u300D\uFF1F\u8F93\u5165 yes \u786E\u8BA4\uFF0Cno \u8868\u793A\u9700\u8981\u91CD\u542F\u3002`,defaultValue:!0,onSelect:handlePostSaveLoadConfirm}):(0,import_jsx_runtime99.jsx)(YesNoPrompt,{question:`\u662F\u5426\u5C06\u300C${stage.profileName}\u300D\u8BBE\u4E3A\u9ED8\u8BA4\u914D\u7F6E\uFF1F`,defaultValue:!0,onSelect:handlePostSaveDefaultChoice})]})}return(0,import_jsx_runtime99.jsxs)(ThemedBox_default,{flexDirection:"column",children:[stage.lines.map(line=>(0,import_jsx_runtime99.jsx)(ThemedText,{children:line},line)),(0,import_jsx_runtime99.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime99.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_runtime99.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime99.jsx)(ReturnMainPrompt,{onSelect:handleReturnMain})]})}var import_react75,import_jsx_runtime99,API_MODE_OPTIONS,PROVIDER_CONFIG_MODE_OPTIONS,MODEL_MODE_OPTIONS,SINGLE_MODEL_MODE_OPTIONS,MANAGE_ACTION_OPTIONS,EDIT_FIELDS,QUICK_ADD_FIELDS,FIELD_LABELS,XAI_GROK_BASE_URL,GEMINI_OPENAI_BASE_URL,AUTH_TYPE_OPTIONS,init_ProviderConfigManager=__esm({"src/components/ProviderConfigManager.tsx"(){init_figures();import_react75=__toESM(require_react());init_TextInput();init_ink();init_ccjkProviderConfig();init_providerCredentials();init_providerModes();init_providerProfiles();import_jsx_runtime99=__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"}],PROVIDER_CONFIG_MODE_OPTIONS=[{label:"\u7EC4\u5408\u6A21\u5F0F\uFF08\u6309\u6A21\u578B\u69FD\u4F4D\u7EC4\u5408\u591A\u4E2A\u6A21\u578B\u5BB6\u65CF\uFF09",value:"combination"},{label:"\u5355\u72EC\u6A21\u5F0F\uFF08\u4E00\u4E2A\u6A21\u578B\u5BB6\u65CF / \u4E00\u4E2A Provider \u914D\u7F6E\uFF09",value:"single"},{label:"\u5B8C\u6574 API \u5165\u53E3\uFF08\u5B98\u65B9\u767B\u5F55 / \u81EA\u5B9A\u4E49 API / CCR\uFF09",value:"advanced-api"}],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:"Gemini \u6A21\u578B\uFF08Google Gemini / \u517C\u5BB9\u7AEF\u70B9\uFF09",value:"gemini_compatible"},{label:"Grok \u6A21\u578B\uFF08xAI Grok / \u517C\u5BB9\u7AEF\u70B9\uFF09",value:"grok_compatible"},{label:"\u6DF7\u5408\u6A21\u578B\uFF08\u591A\u5BB6\u65CF\u524D\u7F00\u5339\u914D\uFF0C\u652F\u6301\u4EFB\u610F\u7EC4\u5408\uFF09",value:"hybrid_compatible"}],SINGLE_MODEL_MODE_OPTIONS=MODEL_MODE_OPTIONS.filter(option=>option.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. \u5207\u6362\u9ED8\u8BA4\u914D\u7F6E",value:"set-default"},{label:"6. \u8DF3\u8FC7",value:"skip"}],EDIT_FIELDS=["name","baseUrl","authType","apiKey","primaryModel","defaultHaikuModel","defaultSonnetModel","defaultOpusModel","reviewModel"],QUICK_ADD_FIELDS=["name","baseUrl","authType","apiKey","primaryModel"],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",authType:"\u8BA4\u8BC1\u65B9\u5F0F\uFF08\u56DE\u8F66\u4FDD\u7559 API Key\uFF1B\u8F93\u5165 token/auth_token/bearer \u4F7F\u7528 Auth Token\uFF09",apiKey:"\u8BF7\u8F93\u5165API\u5BC6\u94A5\u6216 Auth Token",primaryModel:"\u542F\u52A8\u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09 - \u4E3B\u4F1A\u8BDD / mainLoop \u5DE5\u4F5C\u8D1F\u8F7D",defaultHaikuModel:"\u8F7B\u91CF\u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09 - \u8F7B\u91CF\u5FEB\u901F\u89D2\u8272\uFF08classify/\u5185\u5B58\u641C\u7D22/\u5DE5\u5177\u603B\u7ED3/\u540E\u53F0hook\uFF09",defaultSonnetModel:"\u4E2D\u5EA6\u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09 - \u6267\u884C/\u5B50\u4EE3\u7406\u5DE5\u4F5C\u9A6C\uFF08subagent/general/summarize/extract\uFF09",defaultOpusModel:"\u8BA1\u7B97\u6A21\u578B\uFF08\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u8DF3\u8FC7\uFF09 - \u89C4\u5212/\u9AD8\u80FD\u529B\u89D2\u8272\uFF08plan/guide\uFF09",reviewModel:"\u5BA1\u6838\u6A21\u578B\uFF08\u53EF\u9009\uFF0C\u7A7A\u5185\u5BB9\u56DE\u8F66\u5219\u7EE7\u627F\u4E3B\u6A21\u578B\uFF09 - /review \u4EE3\u7801\u5BA1\u67E5"},XAI_GROK_BASE_URL="https://api.x.ai/v1",GEMINI_OPENAI_BASE_URL="https://generativelanguage.googleapis.com/v1beta/openai/";__name(getAuthTypeLabel,"getAuthTypeLabel");AUTH_TYPE_OPTIONS=[{label:"API Key\uFF08\u9ED8\u8BA4\uFF09",value:"api_key"},{label:"Auth Token / Bearer Token",value:"auth_token"}];__name(getAuthTypeDefaultIndex,"getAuthTypeDefaultIndex");__name(getManageActionLabel,"getManageActionLabel");__name(getProviderModelModeForOption,"getProviderModelModeForOption");__name(getModelModeOptionLabel,"getModelModeOptionLabel");__name(getProviderConfigModeOptionLabel,"getProviderConfigModeOptionLabel");__name(getForcedApiDialectMode,"getForcedApiDialectMode");__name(applyForcedApiDialectMode,"applyForcedApiDialectMode");__name(getModeOptionDraftDefaults,"getModeOptionDraftDefaults");__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(isSameManagerProfileForEdit,"isSameManagerProfileForEdit");__name(validateDraft,"validateDraft");__name(getEditFieldForModeSlot,"getEditFieldForModeSlot");__name(resolveDraftAuthType,"resolveDraftAuthType");__name(isGeminiRelated,"isGeminiRelated");__name(slotModelsForDraft,"slotModelsForDraft");__name(resolveDraftApiDialectMode,"resolveDraftApiDialectMode");__name(createProviderProfileFromDraft,"createProviderProfileFromDraft");__name(saveDraft,"saveDraft");__name(setDefaultManagerProfile,"setDefaultManagerProfile");__name(deleteManagerProfile,"deleteManagerProfile");__name(PromptSelect,"PromptSelect");__name(PromptTextInput,"PromptTextInput");__name(ReturnMainPrompt,"ReturnMainPrompt");__name(YesNoPrompt,"YesNoPrompt");__name(CompletedLine,"CompletedLine");__name(ProviderConfigIntro,"ProviderConfigIntro");__name(ManagerHeader,"ManagerHeader");__name(getEditFieldsForStage,"getEditFieldsForStage");__name(isAuthTypeTokenInput,"isAuthTypeTokenInput");__name(isAuthTypeApiKeyInput,"isAuthTypeApiKeyInput");__name(resolveSubmittedAuthType,"resolveSubmittedAuthType");__name(getCompletedFieldAnswer,"getCompletedFieldAnswer");__name(renderCompletedFields,"renderCompletedFields");__name(completeQuickAddDraft,"completeQuickAddDraft");__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_react76.useReducer)(x3=>x3+1,0);return(0,import_react76.useEffect)(()=>onGrowthBookRefresh(forceRerender),[]),parseUserSpecifiedModel(mainLoopModelForSession??mainLoopModel??getDefaultMainLoopModelSetting())}var import_react76,init_useMainLoopModel=__esm({"src/hooks/useMainLoopModel.ts"(){import_react76=__toESM(require_react());init_growthbook();init_AppState();init_model3();__name(useMainLoopModel,"useMainLoopModel")}});async function checkAndDisableBypassPermissionsIfNeeded(toolPermissionContext,setAppState){bypassPermissionsCheckRan||(bypassPermissionsCheckRan=!0,!toolPermissionContext.isBypassPermissionsModeAvailable)||!await shouldDisableBypassPermissions()||setAppState(prev=>({...prev,toolPermissionContext:createDisabledBypassPermissionsContext(prev.toolPermissionContext)}))}function resetBypassPermissionsCheck(){bypassPermissionsCheckRan=!1}async function checkAndDisableAutoModeIfNeeded(toolPermissionContext,setAppState,fastMode){{if(autoModeCheckRan)return;autoModeCheckRan=!0;let{updateContext,notification}=await verifyAutoModeGateAccess(toolPermissionContext,fastMode);setAppState(prev=>{let nextCtx=updateContext(prev.toolPermissionContext),newState=nextCtx===prev.toolPermissionContext?prev:{...prev,toolPermissionContext:nextCtx};return notification?{...newState,notifications:{...newState.notifications,queue:[...newState.notifications.queue,{key:"auto-mode-gate-notification",text:notification,color:"warning",priority:"high"}]}}:newState})}}function resetAutoModeGateCheck(){autoModeCheckRan=!1}var import_react77,bypassPermissionsCheckRan,autoModeCheckRan,init_bypassPermissionsKillswitch=__esm({"src/utils/permissions/bypassPermissionsKillswitch.ts"(){import_react77=__toESM(require_react());init_AppState();init_state();init_permissionSetup();bypassPermissionsCheckRan=!1;__name(checkAndDisableBypassPermissionsIfNeeded,"checkAndDisableBypassPermissionsIfNeeded");__name(resetBypassPermissionsCheck,"resetBypassPermissionsCheck");autoModeCheckRan=!1;__name(checkAndDisableAutoModeIfNeeded,"checkAndDisableAutoModeIfNeeded");__name(resetAutoModeGateCheck,"resetAutoModeGateCheck")}});function normalizeValue3(value){return String(value||"").trim()}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_5_max"||strategyId==="gpt_5_4_codex"||strategyId==="gpt_5_1_stable"||strategyId==="gpt_5_3_codex"||strategyId==="gpt55_deepseek_combo"||strategyId==="deepseek_gpt_combo"||strategyId==="custom"?strategyId:"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"gpt_5_5_max":return"GPT-5.5 max capability";case"gpt55_deepseek_combo":return"GPT-5.5 + DeepSeek combo";case"deepseek_gpt_combo":return"DeepSeek + GPT combo";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"gpt_5_5_max":return"OpenAI-native routing with GPT-5.5 as primary and GPT-5.3 Codex for fast helpers.";case"gpt55_deepseek_combo":return"Hybrid combo: GPT-5.5 primary loop with DeepSeek v4 Pro for prose/planning and GPT-5.3 Codex Spark for fast work.";case"deepseek_gpt_combo":return"Hybrid combo: DeepSeek v4 Pro primary with GPT-5.5 for planning/review and GPT-5.3 Codex Spark for fast work.";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 modeLabel3=getProviderExperienceLabel(profile),modeId=inferProviderExperienceFamily(profile);return hasSavedProfile?`A live ${modeLabel3} 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 isGptFamilyModel2(model){let normalized=String(model??"").trim().toLowerCase();return!normalized||normalized.includes("codex")?!1:/^gpt-5(?:[.-]|$)/.test(normalized)||/^gpt-6(?:[.-]|$)/.test(normalized)}function getHomogeneousSlotPerformanceWarning(profile,{language="en"}={}){let routing=profile?.modelRouting;if(!routing)return null;let slotValues=getProviderModeSlotValues(routing),configuredModels=[routing.primaryModel,routing.smallFastModel,slotValues.haikuModel,slotValues.sonnetModel,slotValues.opusModel].map(value=>String(value??"").trim()).filter(Boolean);if(configuredModels.length===0)return null;let uniqueModels=[...new Set(configuredModels)];if(uniqueModels.length!==1||!isGptFamilyModel2(uniqueModels[0]))return null;let model=uniqueModels[0];return language==="zh"?`[WARN] \u6240\u6709 provider \u69FD\u4F4D\u5F53\u524D\u90FD\u8DEF\u7531\u5230 ${model}\u3002\u5206\u7C7B\u5668\u3001\u538B\u7F29\u548C\u5B50\u4EE3\u7406\u65E0\u6CD5\u4F7F\u7528\u66F4\u5FEB\u6A21\u578B\uFF1B\u5982\u9700\u63D0\u901F\u8BF7\u901A\u8FC7 /provider \u914D\u7F6E\u4E0D\u540C\u69FD\u4F4D\uFF0C\u6216\u7528 /effort \u663E\u5F0F\u9009\u62E9\u63A8\u7406\u7B49\u7EA7\u3002Clavue \u4E0D\u4F1A\u81EA\u52A8\u8986\u76D6\u4F60\u7684 effort \u8BBE\u7F6E\u3002`:`[WARN] Every provider slot currently routes to ${model}. Classifiers, compaction, and subagents cannot use a faster model. Reconfigure slots via /provider or choose an explicit effort tier with /effort. Clavue will not override your effort settings automatically.`}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}`);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.");let homogeneousSlotWarning=getHomogeneousSlotPerformanceWarning(profile,{language});return homogeneousSlotWarning&&warnings.push(homogeneousSlotWarning),warnings}var CURRENT_PROVIDER_PROFILE_ID,init_providerProfileMetadata=__esm({"src/utils/providerProfileMetadata.ts"(){init_providerModes();CURRENT_PROVIDER_PROFILE_ID="__current_provider__";__name(normalizeValue3,"normalizeValue");__name(getConfiguredFamilies2,"getConfiguredFamilies");__name(getConfiguredStrategyId,"getConfiguredStrategyId");__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(isGptFamilyModel2,"isGptFamilyModel");__name(getHomogeneousSlotPerformanceWarning,"getHomogeneousSlotPerformanceWarning");__name(getProviderLocalValidationWarnings,"getProviderLocalValidationWarnings")}});function getProviderPrimaryModel(profile){return(profile?.modelRouting.primaryModel?.trim()??"")||null}function normalizedModel(model){return typeof model=="string"?model.trim().toLowerCase():""}function isProviderCompatibleExplicitModel(profile,model){if(!model)return!1;let modelMode=getProviderModelModeForProfile({providerId:profile.providerId,modelMode:profile.modelMode,modelRouting:profile.modelRouting});return isProviderModelCompatibleWithMode(modelMode,String(model))}function shouldAdoptProviderPrimaryModel({resolvedProviderProfile,explicitModelOverride,userSpecifiedModel}){return resolvedProviderProfile?!explicitModelOverride||!userSpecifiedModel?!0:!isProviderCompatibleExplicitModel(resolvedProviderProfile,normalizedModel(userSpecifiedModel)):!1}function resolveProviderSessionModel({resolvedProviderProfile,explicitModelOverride,userSpecifiedModel}){return shouldAdoptProviderPrimaryModel({resolvedProviderProfile,explicitModelOverride,userSpecifiedModel})?getProviderPrimaryModel(resolvedProviderProfile):explicitModelOverride?userSpecifiedModel:null}function getProviderSetupRefreshPlan({providerProfileBeforeOnboarding,resolvedProviderProfile,onboardingResult,explicitModelOverride,userSpecifiedModel}){return{providerProfileChanged:onboardingResult==="continue"&&!Object.is(resolvedProviderProfile,providerProfileBeforeOnboarding),nextMainLoopModel:resolveProviderSessionModel({resolvedProviderProfile,explicitModelOverride,userSpecifiedModel})}}var init_providerStartup=__esm({"src/utils/providerStartup.ts"(){init_providerProfiles();init_providerModes();__name(getProviderPrimaryModel,"getProviderPrimaryModel");__name(normalizedModel,"normalizedModel");__name(isProviderCompatibleExplicitModel,"isProviderCompatibleExplicitModel");__name(shouldAdoptProviderPrimaryModel,"shouldAdoptProviderPrimaryModel");__name(resolveProviderSessionModel,"resolveProviderSessionModel");__name(getProviderSetupRefreshPlan,"getProviderSetupRefreshPlan")}});async function applySuccessfulProviderAuthChange(context2,profile){context2.onChangeAPIKey(),context2.setMessages(stripSignatureBlocks),resetCostState(),refreshRemoteManagedSettings(),refreshPolicyLimits(),resetUserCache(),refreshGrowthBookAfterAuthChange(),clearTrustedDeviceToken(),enrollTrustedDevice(),resetBypassPermissionsCheck();let appState=context2.getAppState();checkAndDisableBypassPermissionsIfNeeded(appState.toolPermissionContext,context2.setAppState),resetAutoModeGateCheck(),checkAndDisableAutoModeIfNeeded(appState.toolPermissionContext,context2.setAppState,appState.fastMode);let currentModel=appState.mainLoopModel??null,mainLoopModel=resolveProviderSessionModel({resolvedProviderProfile:profile,explicitModelOverride:currentModel!==null,userSpecifiedModel:currentModel});context2.setAppState(prev=>({...prev,mainLoopModel,mainLoopModelForSession:null,providerContinuity:buildProviderContinuitySnapshot(profile),authVersion:prev.authVersion+1}))}var init_providerAuthChange=__esm({"src/commands/login/providerAuthChange.ts"(){init_state();init_trustedDevice();init_growthbook();init_policyLimits();init_remoteManagedSettings();init_messages4();init_bypassPermissionsKillswitch();init_providerProfileMetadata();init_providerStartup();init_user();__name(applySuccessfulProviderAuthChange,"applySuccessfulProviderAuthChange")}});var login_exports={};__export(login_exports,{Login:()=>Login,call:()=>call23});async function buildProviderConfiguredMessage(){let profile=getResolvedCurrentProviderProfile();if(!profile)return"API provider configured";let validation=await validateProviderProfile(profile);return validation.status==="warn"?["API provider configured with warnings",...validation.lines].join(`
6490
6490
  `):"API provider configured"}async function call23(onDone,context2){return(0,import_jsx_runtime100.jsx)(Login,{onDone:async success2=>{success2&&await applySuccessfulProviderAuthChange(context2,getResolvedCurrentProviderProfile()),onDone(success2?await buildProviderConfiguredMessage():"Provider setup cancelled")}})}function Login(props){let mainLoopModel=useMainLoopModel();return(0,import_jsx_runtime100.jsx)(Dialog,{title:"/provider",subtitle:"API \u914D\u7F6E\u7BA1\u7406",onCancel:()=>props.onDone(!1,mainLoopModel),color:"permission",hideInputGuide:!0,isCancelActive:!1,children:(0,import_jsx_runtime100.jsx)(ProviderConfigManager,{onDone:success2=>props.onDone(success2,mainLoopModel)})})}var import_jsx_runtime100,init_login=__esm({"src/commands/login/login.tsx"(){init_ProviderConfigManager();init_Dialog();init_useMainLoopModel();init_providerProfiles();init_providerAuthChange();import_jsx_runtime100=__toESM(require_jsx_runtime());__name(buildProviderConfiguredMessage,"buildProviderConfiguredMessage");__name(call23,"call");__name(Login,"Login")}});async function createAdminRequest(params){let{accessToken,orgUUID}=await prepareApiRequest(),headers={...getOAuthHeaders(accessToken),"x-organization-uuid":orgUUID},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/admin_requests`;return(await axios_default.post(url3,params,{headers})).data}async function getMyAdminRequests(requestType,statuses){let{accessToken,orgUUID}=await prepareApiRequest(),headers={...getOAuthHeaders(accessToken),"x-organization-uuid":orgUUID},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/admin_requests/me?request_type=${requestType}`;for(let status2 of statuses)url3+=`&statuses=${status2}`;return(await axios_default.get(url3,{headers})).data}async function checkAdminRequestEligibility(requestType){let{accessToken,orgUUID}=await prepareApiRequest(),headers={...getOAuthHeaders(accessToken),"x-organization-uuid":orgUUID},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/admin_requests/eligibility?request_type=${requestType}`;return(await axios_default.get(url3,{headers})).data}var init_adminRequests=__esm({"src/services/api/adminRequests.ts"(){init_axios2();init_oauth();init_api2();__name(createAdminRequest,"createAdminRequest");__name(getMyAdminRequests,"getMyAdminRequests");__name(checkAdminRequestEligibility,"checkAdminRequestEligibility")}});async function fetchOverageCreditGrant(){try{let{accessToken,orgUUID}=await prepareApiRequest(),url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/overage_credit_grant`;return(await axios_default.get(url3,{headers:getOAuthHeaders(accessToken)})).data}catch(err2){return logError2(err2),null}}function getCachedOverageCreditGrant(){let orgId=getOauthAccountInfo()?.organizationUuid;if(!orgId)return null;let cached3=getGlobalConfig().overageCreditGrantCache?.[orgId];return!cached3||Date.now()-cached3.timestamp>CACHE_TTL_MS4?null:cached3.info}function invalidateOverageCreditGrantCache(){let orgId=getOauthAccountInfo()?.organizationUuid;if(!orgId)return;let cache5=getGlobalConfig().overageCreditGrantCache;!cache5||!(orgId in cache5)||saveGlobalConfig(prev=>{let next={...prev.overageCreditGrantCache};return delete next[orgId],{...prev,overageCreditGrantCache:next}})}async function refreshOverageCreditGrantCache(){if(isEssentialTrafficOnly())return;let orgId=getOauthAccountInfo()?.organizationUuid;if(!orgId)return;let info=await fetchOverageCreditGrant();info&&saveGlobalConfig(prev=>{let prevCached=prev.overageCreditGrantCache?.[orgId],existing=prevCached?.info,dataUnchanged=existing&&existing.available===info.available&&existing.eligible===info.eligible&&existing.granted===info.granted&&existing.amount_minor_units===info.amount_minor_units&&existing.currency===info.currency;if(dataUnchanged&&prevCached&&Date.now()-prevCached.timestamp<=CACHE_TTL_MS4)return prev;let entry={info:dataUnchanged?existing:info,timestamp:Date.now()};return{...prev,overageCreditGrantCache:{...prev.overageCreditGrantCache,[orgId]:entry}}})}function formatGrantAmount(info){if(info.amount_minor_units==null||!info.currency)return null;if(info.currency.toUpperCase()==="USD"){let dollars=info.amount_minor_units/100;return Number.isInteger(dollars)?`$${dollars}`:`$${dollars.toFixed(2)}`}return null}var CACHE_TTL_MS4,init_overageCreditGrant=__esm({"src/services/api/overageCreditGrant.ts"(){init_axios2();init_oauth();init_auth6();init_config11();init_log3();init_privacyLevel();init_api2();CACHE_TTL_MS4=3600*1e3;__name(fetchOverageCreditGrant,"fetchOverageCreditGrant");__name(getCachedOverageCreditGrant,"getCachedOverageCreditGrant");__name(invalidateOverageCreditGrantCache,"invalidateOverageCreditGrantCache");__name(refreshOverageCreditGrantCache,"refreshOverageCreditGrantCache");__name(formatGrantAmount,"formatGrantAmount")}});async function fetchUtilization(){if(!isClaudeAISubscriber()||!hasProfileScope())return{};let tokens=getClaudeAIOAuthTokens();if(tokens&&isOAuthTokenExpired(tokens.expiresAt))return null;let authResult=getAuthHeaders();if(authResult.error)throw new Error(`Auth error: ${authResult.error}`);let headers={"Content-Type":"application/json","User-Agent":getClaudeCodeUserAgent(),...authResult.headers},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/usage`;return(await axios_default.get(url3,{headers,timeout:5e3})).data}var init_usage=__esm({"src/services/api/usage.ts"(){init_axios2();init_oauth();init_auth6();init_http2();init_userAgent();init_client2();__name(fetchUtilization,"fetchUtilization")}});async function runExtraUsage(){getGlobalConfig().hasVisitedExtraUsage||saveGlobalConfig(prev=>({...prev,hasVisitedExtraUsage:!0})),invalidateOverageCreditGrantCache();let subscriptionType=getSubscriptionType(),isTeamOrEnterprise=subscriptionType==="team"||subscriptionType==="enterprise";if(!hasClaudeAiBillingAccess()&&isTeamOrEnterprise){let extraUsage2;try{extraUsage2=(await fetchUtilization())?.extra_usage}catch(error40){logError2(error40)}if(extraUsage2?.is_enabled&&extraUsage2.monthly_limit===null)return{type:"message",value:"Your organization already has unlimited extra usage. No request needed."};try{if((await checkAdminRequestEligibility("limit_increase"))?.is_allowed===!1)return{type:"message",value:"Please contact your admin to manage extra usage settings."}}catch(error40){logError2(error40)}try{let pendingOrDismissedRequests=await getMyAdminRequests("limit_increase",["pending","dismissed"]);if(pendingOrDismissedRequests&&pendingOrDismissedRequests.length>0)return{type:"message",value:"You have already submitted a request for extra usage to your admin."}}catch(error40){logError2(error40)}try{return await createAdminRequest({request_type:"limit_increase",details:null}),{type:"message",value:extraUsage2?.is_enabled?"Request sent to your admin to increase extra usage.":"Request sent to your admin to enable extra usage."}}catch(error40){logError2(error40)}return{type:"message",value:"Please contact your admin to manage extra usage settings."}}let url3=isTeamOrEnterprise?"https://claude.ai/admin-settings/usage":"https://claude.ai/settings/usage";try{let opened=await openBrowser(url3);return{type:"browser-opened",url:url3,opened}}catch(error40){return logError2(error40),{type:"message",value:`Failed to open browser. Please visit ${url3} to manage extra usage.`}}}var init_extra_usage_core=__esm({"src/commands/extra-usage/extra-usage-core.ts"(){init_adminRequests();init_overageCreditGrant();init_usage();init_auth6();init_billing();init_browser();init_config11();init_log3();__name(runExtraUsage,"runExtraUsage")}});var extra_usage_exports={};__export(extra_usage_exports,{call:()=>call24});async function call24(onDone,context2){let result2=await runExtraUsage();return result2.type==="message"?(onDone(result2.value),null):(0,import_jsx_runtime101.jsx)(Login,{startingMessage:"Starting new login following /extra-usage. Exit with Ctrl-C to use existing account.",onDone:success2=>{context2.onChangeAPIKey(),onDone(success2?"Login successful":"Login interrupted")}})}var import_jsx_runtime101,init_extra_usage=__esm({"src/commands/extra-usage/extra-usage.tsx"(){init_login();init_extra_usage_core();import_jsx_runtime101=__toESM(require_jsx_runtime());__name(call24,"call")}});var extra_usage_noninteractive_exports={};__export(extra_usage_noninteractive_exports,{call:()=>call25});async function call25(){let result2=await runExtraUsage();return result2.type==="message"?{type:"text",value:result2.value}:{type:"text",value:result2.opened?`Browser opened to manage extra usage. If it didn't open, visit: ${result2.url}`:`Please visit ${result2.url} to manage extra usage.`}}var init_extra_usage_noninteractive=__esm({"src/commands/extra-usage/extra-usage-noninteractive.ts"(){init_extra_usage_core();__name(call25,"call")}});function isExtraUsageAllowed(){return isEnvTruthy2(process.env.DISABLE_EXTRA_USAGE_COMMAND)?!1:isOverageProvisioningAllowedForCommandFiltering()}var extraUsage,extraUsageNonInteractive,init_extra_usage2=__esm({"src/commands/extra-usage/index.ts"(){init_state();init_auth6();init_envUtils();__name(isExtraUsageAllowed,"isExtraUsageAllowed");extraUsage={type:"local-jsx",name:"extra-usage",description:"Configure extra usage to keep working when limits are hit",isEnabled:__name(()=>isExtraUsageAllowed()&&!getIsNonInteractiveSession(),"isEnabled"),load:__name(()=>Promise.resolve().then(()=>(init_extra_usage(),extra_usage_exports)),"load")},extraUsageNonInteractive={type:"local",name:"extra-usage",supportsNonInteractive:!0,description:"Configure extra usage to keep working when limits are hit",isEnabled:__name(()=>isExtraUsageAllowed()&&getIsNonInteractiveSession(),"isEnabled"),get isHidden(){return!getIsNonInteractiveSession()},load:__name(()=>Promise.resolve().then(()=>(init_extra_usage_noninteractive(),extra_usage_noninteractive_exports)),"load")}}});function ProgressBar({ratio:inputRatio,width,fillColor,emptyColor}){let ratio=Math.min(1,Math.max(0,inputRatio)),whole=Math.floor(ratio*width),segments=[BLOCKS[BLOCKS.length-1].repeat(whole)];if(whole<width){let remainder=ratio*width-whole,middle=Math.floor(remainder*BLOCKS.length);segments.push(BLOCKS[middle]);let empty=width-whole-1;empty>0&&segments.push(BLOCKS[0].repeat(empty))}return(0,import_jsx_runtime102.jsx)(ThemedText,{color:fillColor,backgroundColor:emptyColor,children:segments.join("")})}var import_jsx_runtime102,BLOCKS,init_ProgressBar=__esm({"src/components/design-system/ProgressBar.tsx"(){init_ink();import_jsx_runtime102=__toESM(require_jsx_runtime()),BLOCKS=[" ","\u258F","\u258E","\u258D","\u258C","\u258B","\u258A","\u2589","\u2588"];__name(ProgressBar,"ProgressBar")}});function isEligibleForOverageCreditGrant(){let info=getCachedOverageCreditGrant();return!info||!info.available||info.granted?!1:formatGrantAmount(info)!==null}function shouldShowOverageCreditUpsell(){if(!isEligibleForOverageCreditGrant())return!1;let config3=getGlobalConfig();return!(config3.hasVisitedExtraUsage||(config3.overageCreditUpsellSeenCount??0)>=MAX_IMPRESSIONS)}function maybeRefreshOverageCreditCache(){getCachedOverageCreditGrant()===null&&refreshOverageCreditGrantCache()}function useShowOverageCreditUpsell(){let[show]=(0,import_react78.useState)(()=>(maybeRefreshOverageCreditCache(),shouldShowOverageCreditUpsell()));return show}function incrementOverageCreditUpsellSeenCount(){let newCount=0;saveGlobalConfig(prev=>(newCount=(prev.overageCreditUpsellSeenCount??0)+1,{...prev,overageCreditUpsellSeenCount:newCount})),logEvent("tengu_overage_credit_upsell_shown",{seen_count:newCount})}function getUsageText(amount){return`${amount} in extra usage for third-party apps \xB7 /extra-usage`}function getFeedTitle(amount){return`${amount} in extra usage`}function OverageCreditUpsell({maxWidth,twoLine}){let info=getCachedOverageCreditGrant();if(!info)return null;let amount=formatGrantAmount(info);if(!amount)return null;if(twoLine){let title=getFeedTitle(amount);return(0,import_jsx_runtime103.jsxs)(import_jsx_runtime103.Fragment,{children:[(0,import_jsx_runtime103.jsx)(ThemedText,{color:"brand",children:maxWidth?truncate2(title,maxWidth):title}),(0,import_jsx_runtime103.jsx)(ThemedText,{dimColor:!0,children:maxWidth?truncate2(FEED_SUBTITLE,maxWidth):FEED_SUBTITLE})]})}let text3=getUsageText(amount),display=maxWidth?truncate2(text3,maxWidth):text3,highlightLen=Math.min(getFeedTitle(amount).length,display.length);return(0,import_jsx_runtime103.jsxs)(ThemedText,{dimColor:!0,children:[(0,import_jsx_runtime103.jsx)(ThemedText,{color:"brand",children:display.slice(0,highlightLen)}),display.slice(highlightLen)]})}function createOverageCreditFeed(){let info=getCachedOverageCreditGrant(),amount=info?formatGrantAmount(info):null,title=amount?getFeedTitle(amount):"extra usage credit";return{title,lines:[],customContent:{content:(0,import_jsx_runtime103.jsx)(ThemedText,{dimColor:!0,children:FEED_SUBTITLE}),width:Math.max(title.length,FEED_SUBTITLE.length)}}}var import_react78,import_jsx_runtime103,MAX_IMPRESSIONS,FEED_SUBTITLE,init_OverageCreditUpsell=__esm({"src/components/LogoV2/OverageCreditUpsell.tsx"(){import_react78=__toESM(require_react());init_ink();init_analytics();init_overageCreditGrant();init_config11();init_format();import_jsx_runtime103=__toESM(require_jsx_runtime()),MAX_IMPRESSIONS=3;__name(isEligibleForOverageCreditGrant,"isEligibleForOverageCreditGrant");__name(shouldShowOverageCreditUpsell,"shouldShowOverageCreditUpsell");__name(maybeRefreshOverageCreditCache,"maybeRefreshOverageCreditCache");__name(useShowOverageCreditUpsell,"useShowOverageCreditUpsell");__name(incrementOverageCreditUpsellSeenCount,"incrementOverageCreditUpsellSeenCount");__name(getUsageText,"getUsageText");FEED_SUBTITLE="On us. Works on third-party apps \xB7 /extra-usage";__name(getFeedTitle,"getFeedTitle");__name(OverageCreditUpsell,"OverageCreditUpsell");__name(createOverageCreditFeed,"createOverageCreditFeed")}});function LimitBar({title,limit,maxWidth,showTimeInReset=!0,extraSubtext}){let{utilization,resets_at}=limit;if(utilization===null)return null;let usedText=`${Math.floor(utilization)}% used`,subtext;resets_at&&(subtext=`Resets ${formatResetText(resets_at,!0,showTimeInReset)}`),extraSubtext&&(subtext?subtext=`${extraSubtext} \xB7 ${subtext}`:subtext=extraSubtext);let maxBarWidth=50;return maxWidth>=maxBarWidth+12?(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime104.jsx)(ThemedText,{bold:!0,children:title}),(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,children:[(0,import_jsx_runtime104.jsx)(ProgressBar,{ratio:utilization/100,width:maxBarWidth,fillColor:"rate_limit_fill",emptyColor:"rate_limit_empty"}),(0,import_jsx_runtime104.jsx)(ThemedText,{children:usedText})]}),subtext&&(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:subtext})]}):(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime104.jsxs)(ThemedText,{children:[(0,import_jsx_runtime104.jsx)(ThemedText,{bold:!0,children:title}),subtext&&(0,import_jsx_runtime104.jsxs)(import_jsx_runtime104.Fragment,{children:[(0,import_jsx_runtime104.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime104.jsxs)(ThemedText,{dimColor:!0,children:["\xB7 ",subtext]})]})]}),(0,import_jsx_runtime104.jsx)(ProgressBar,{ratio:utilization/100,width:maxWidth,fillColor:"rate_limit_fill",emptyColor:"rate_limit_empty"}),(0,import_jsx_runtime104.jsx)(ThemedText,{children:usedText})]})}function Usage(){let[utilization,setUtilization]=(0,import_react79.useState)(null),[efficiencySummary,setEfficiencySummary]=(0,import_react79.useState)(null),[skillSelectionSummary,setSkillSelectionSummary]=(0,import_react79.useState)(null),[error40,setError]=(0,import_react79.useState)(null),[isLoading,setIsLoading]=(0,import_react79.useState)(!0),{columns}=useTerminalSize(),availableWidth=columns-2,maxWidth=Math.min(availableWidth,80),loadUtilization=React42.useCallback(async()=>{setIsLoading(!0),setError(null);try{let data=await fetchUtilization();setUtilization(data),setEfficiencySummary(getRecentEfficiencyLedgerSummary()),setSkillSelectionSummary(getRecentSkillSelectionSummary())}catch(err2){logError2(err2);let axiosError=err2,responseBody=axiosError.response?.data?jsonStringify(axiosError.response.data):void 0;setError(responseBody?`Failed to load usage data: ${responseBody}`:"Failed to load usage data")}finally{setIsLoading(!1)}},[]);if((0,import_react79.useEffect)(()=>{loadUtilization()},[loadUtilization]),useKeybinding("settings:retry",()=>{loadUtilization()},{context:"Settings",isActive:!!error40&&!isLoading}),error40)return(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime104.jsxs)(ThemedText,{color:"error",children:["Error: ",error40]}),(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime104.jsxs)(Byline,{children:[(0,import_jsx_runtime104.jsx)(ConfigurableShortcutHint,{action:"settings:retry",context:"Settings",fallback:"r",description:"retry"}),(0,import_jsx_runtime104.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})]})})]});if(!utilization)return(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:"Loading usage data\u2026"}),(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime104.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})})]});let subscriptionType=getSubscriptionType(),showSonnetBar=subscriptionType==="max"||subscriptionType==="team"||subscriptionType===null,limits=[{title:"Current session",limit:utilization.five_hour},{title:"Current week (all models)",limit:utilization.seven_day},...showSonnetBar?[{title:"Current week (Sonnet only)",limit:utilization.seven_day_sonnet}]:[]];return(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,width:"100%",children:[limits.some(({limit})=>limit)||(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:"/usage is only available for subscription plans."}),limits.map(({title,limit})=>limit&&(0,import_jsx_runtime104.jsx)(LimitBar,{title,limit,maxWidth},title)),utilization.extra_usage&&(0,import_jsx_runtime104.jsx)(ExtraUsageSection,{extraUsage:utilization.extra_usage,maxWidth}),efficiencySummary&&(0,import_jsx_runtime104.jsx)(LightweightShareSection,{summary:efficiencySummary}),skillSelectionSummary&&(0,import_jsx_runtime104.jsx)(SkillSelectionSection,{summary:skillSelectionSummary}),isEligibleForOverageCreditGrant()&&(0,import_jsx_runtime104.jsx)(OverageCreditUpsell,{maxWidth}),(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime104.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Settings",fallback:"Esc",description:"cancel"})})]})}function formatLightweightShare(summary){let{routeSlotBreakdown}=summary,trackedSamples=Object.values(routeSlotBreakdown).reduce((total,count4)=>total+count4,0);if(trackedSamples===0)return null;let smallFastSamples=routeSlotBreakdown.smallFast,helperSamples=smallFastSamples+routeSlotBreakdown.general,smallFastShare=Math.round(smallFastSamples/trackedSamples*100),helperShare=Math.round(helperSamples/trackedSamples*100),lightweightStats=summary.routeSlotStats.smallFast,lightweightConcurrency=summary.routeSlotConcurrency?.smallFast,statsText=lightweightStats.sampleCount>0?` \xB7 smallFast cache hit ${Math.round(lightweightStats.avgCacheHitRate*100)}% \xB7 avg latency ${lightweightStats.avgDurationMs}ms`:"",concurrencyText=lightweightConcurrency&&lightweightConcurrency.sampleCount>0?` \xB7 avg in-flight ${lightweightConcurrency.avgInFlightAtStart} \xB7 max in-flight ${lightweightConcurrency.maxInFlightAtStart}`:"";return`Lightweight helper routes: ${helperShare}% (${helperSamples}/${trackedSamples} recent calls) \xB7 smallFast ${smallFastShare}% (${smallFastSamples}/${trackedSamples})${statsText}${concurrencyText}`}function LightweightShareSection({summary}){let formatted=formatLightweightShare(summary);return formatted?(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime104.jsx)(ThemedText,{bold:!0,children:"Model routing efficiency"}),(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:formatted})]}):null}function formatSkillSelectionSummary(summary){if(summary.recent.length===0)return null;let latest=summary.recent[0];if(!latest)return null;let modelCountText=Object.entries(summary.modelBreakdown).map(([model,count4])=>`${model} ${count4}`).join(", "),visibilityText=`${summary.skillToolVisibleCount}/${summary.recent.length} visible`,missingText=summary.missingCommandCount>0?` \xB7 ${summary.missingCommandCount} missing command`:"";return`Skill selections: ${summary.recent.length} recent \xB7 latest /${latest.skillName} on ${latest.mainLoopModel} \xB7 Skill tool ${visibilityText}${missingText}${modelCountText?` \xB7 models ${modelCountText}`:""}`}function SkillSelectionSection({summary}){let formatted=formatSkillSelectionSummary(summary);return formatted?(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime104.jsx)(ThemedText,{bold:!0,children:"Skill selection diagnostics"}),(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:formatted})]}):null}function ExtraUsageSection({extraUsage:extraUsage2,maxWidth}){let subscriptionType=getSubscriptionType();if(!(subscriptionType==="pro"||subscriptionType==="max"))return!1;if(!extraUsage2.is_enabled)return extraUsage.isEnabled()?(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime104.jsx)(ThemedText,{bold:!0,children:EXTRA_USAGE_SECTION_TITLE}),(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:"Extra usage not enabled \xB7 /extra-usage to enable"})]}):null;if(extraUsage2.monthly_limit===null)return(0,import_jsx_runtime104.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime104.jsx)(ThemedText,{bold:!0,children:EXTRA_USAGE_SECTION_TITLE}),(0,import_jsx_runtime104.jsx)(ThemedText,{dimColor:!0,children:"Unlimited"})]});if(typeof extraUsage2.used_credits!="number"||typeof extraUsage2.utilization!="number")return null;let formattedUsedCredits=formatCost(extraUsage2.used_credits/100,2),formattedMonthlyLimit=formatCost(extraUsage2.monthly_limit/100,2),now3=new Date,oneMonthReset=new Date(now3.getFullYear(),now3.getMonth()+1,1);return(0,import_jsx_runtime104.jsx)(LimitBar,{title:EXTRA_USAGE_SECTION_TITLE,limit:{utilization:extraUsage2.utilization,resets_at:oneMonthReset.toISOString()},showTimeInReset:!1,extraSubtext:`${formattedUsedCredits} / ${formattedMonthlyLimit} spent`,maxWidth})}var React42,import_react79,import_jsx_runtime104,EXTRA_USAGE_SECTION_TITLE,init_Usage=__esm({"src/components/Settings/Usage.tsx"(){React42=__toESM(require_react()),import_react79=__toESM(require_react());init_extra_usage2();init_cost_tracker();init_auth6();init_useTerminalSize();init_ink();init_useKeybinding();init_efficiencyLedger();init_skillSelectionTelemetry();init_usage();init_format();init_log3();init_slowOperations();init_ConfigurableShortcutHint();init_Byline();init_ProgressBar();init_OverageCreditUpsell();import_jsx_runtime104=__toESM(require_jsx_runtime());__name(LimitBar,"LimitBar");__name(Usage,"Usage");__name(formatLightweightShare,"formatLightweightShare");__name(LightweightShareSection,"LightweightShareSection");__name(formatSkillSelectionSummary,"formatSkillSelectionSummary");__name(SkillSelectionSection,"SkillSelectionSection");EXTRA_USAGE_SECTION_TITLE="Extra usage";__name(ExtraUsageSection,"ExtraUsageSection")}});function Settings({onClose,context:context2,defaultTab}){let[selectedTab,setSelectedTab]=(0,import_react80.useState)(defaultTab),[tabsHidden,setTabsHidden]=(0,import_react80.useState)(!1),[configOwnsEsc,setConfigOwnsEsc]=(0,import_react80.useState)(!1),[gatesOwnsEsc,setGatesOwnsEsc]=(0,import_react80.useState)(!1),insideModal=useIsInsideModal(),{rows}=useModalOrTerminalSize(useTerminalSize()),contentHeight=insideModal?rows+1:Math.max(15,Math.min(Math.floor(rows*.8),30)),[diagnosticsPromise]=(0,import_react80.useState)(()=>buildDiagnostics().catch(()=>[]));useExitOnCtrlCDWithKeybindings(),useKeybinding("confirm:no",__name(()=>{tabsHidden||onClose("Status dialog dismissed",{display:"system"})},"handleEscape"),{context:"Settings",isActive:!tabsHidden&&!(selectedTab==="Config"&&configOwnsEsc)&&!(selectedTab==="Gates"&&gatesOwnsEsc)});let Gates=__name(_props=>null,"Gates");return(0,import_jsx_runtime105.jsx)(Pane,{color:"permission",children:(0,import_jsx_runtime105.jsx)(Tabs,{color:"permission",selectedTab,onTabChange:setSelectedTab,hidden:tabsHidden,initialHeaderFocused:defaultTab!=="Config"&&defaultTab!=="Gates",contentHeight:tabsHidden||insideModal?void 0:contentHeight,children:[(0,import_jsx_runtime105.jsx)(Tab,{title:"Status",children:(0,import_jsx_runtime105.jsx)(Status,{context:context2,diagnosticsPromise})},"status"),(0,import_jsx_runtime105.jsx)(Tab,{title:"Config",children:(0,import_jsx_runtime105.jsx)(import_react80.Suspense,{fallback:null,children:(0,import_jsx_runtime105.jsx)(Config,{context:context2,onClose,setTabsHidden,onIsSearchModeChange:setConfigOwnsEsc,contentHeight})})},"config"),(0,import_jsx_runtime105.jsx)(Tab,{title:"Usage",children:(0,import_jsx_runtime105.jsx)(Usage,{})},"usage")]})})}var import_react80,import_jsx_runtime105,init_Settings=__esm({"src/components/Settings/Settings.tsx"(){import_react80=__toESM(require_react());init_useKeybinding();init_useExitOnCtrlCDWithKeybindings();init_useTerminalSize();init_modalContext();init_Pane();init_Tabs();init_Status();init_Config();init_Usage();import_jsx_runtime105=__toESM(require_jsx_runtime());__name(Settings,"Settings")}});var config_exports3={};__export(config_exports3,{call:()=>call26});var import_jsx_runtime106,call26,init_config9=__esm({"src/commands/config/config.tsx"(){init_Settings();import_jsx_runtime106=__toESM(require_jsx_runtime()),call26=__name(async(onDone,context2)=>(0,import_jsx_runtime106.jsx)(Settings,{onClose:onDone,context:context2,defaultTab:"Config"}),"call")}});var config2,config_default,init_config10=__esm({"src/commands/config/index.ts"(){config2={aliases:["settings"],type:"local-jsx",name:"config",description:"Open config panel",load:__name(()=>Promise.resolve().then(()=>(init_config9(),config_exports3)),"load")},config_default=config2}});function generateContextSuggestions(data){let suggestions=[];return checkNearCapacity(data,suggestions),checkLargeToolResults(data,suggestions),checkReadResultBloat(data,suggestions),checkMemoryBloat(data,suggestions),checkAutoCompactDisabled(data,suggestions),suggestions.sort((a2,b3)=>a2.severity!==b3.severity?a2.severity==="warning"?-1:1:(b3.savingsTokens??0)-(a2.savingsTokens??0)),suggestions}function checkNearCapacity(data,suggestions){let isZh7=resolveUiLocale()==="zh-CN";data.percentage>=NEAR_CAPACITY_PERCENT&&suggestions.push({severity:"warning",title:isZh7?`\u4E0A\u4E0B\u6587\u5DF2\u7528 ${data.percentage}%`:`Context is ${data.percentage}% full`,detail:data.isAutoCompactEnabled?isZh7?"\u5373\u5C06\u81EA\u52A8\u538B\u7F29(\u4F1A\u4E22\u5F03\u8F83\u65E9\u7684\u6D88\u606F)\u3002\u53EF\u7ACB\u5373\u8FD0\u884C /compact \u81EA\u884C\u9009\u62E9\u4FDD\u7559\u5185\u5BB9\u3002":"Autocompact will trigger soon, which discards older messages. Use /compact now to control what gets kept.":isZh7?"\u81EA\u52A8\u538B\u7F29\u5DF2\u5173\u95ED\u3002\u8FD0\u884C /compact \u91CA\u653E\u7A7A\u95F4,\u6216\u5728 /config \u4E2D\u5F00\u542F\u81EA\u52A8\u538B\u7F29\u3002":"Autocompact is disabled. Use /compact to free space, or enable autocompact in /config."})}function checkLargeToolResults(data,suggestions){if(data.messageBreakdown)for(let tool of data.messageBreakdown.toolCallsByType){let totalToolTokens=tool.callTokens+tool.resultTokens,percent=totalToolTokens/data.rawMaxTokens*100;if(percent<LARGE_TOOL_RESULT_PERCENT||totalToolTokens<LARGE_TOOL_RESULT_TOKENS)continue;let suggestion=getLargeToolSuggestion(tool.name,totalToolTokens,percent);suggestion&&suggestions.push(suggestion)}}function getLargeToolSuggestion(toolName5,tokens,percent){let isZh7=resolveUiLocale()==="zh-CN",tokenStr=formatTokens(tokens),tokenWord=isZh7?"\u8BCD\u5143":"tokens";switch(toolName5){case BASH_TOOL_NAME:return{severity:"warning",title:isZh7?`Bash \u7ED3\u679C\u5360\u7528 ${tokenStr} ${tokenWord} (${percent.toFixed(0)}%)`:`Bash results using ${tokenStr} tokens (${percent.toFixed(0)}%)`,detail:isZh7?"\u628A\u8F93\u51FA\u901A\u8FC7 head/tail/grep \u622A\u53D6\u4EE5\u7F29\u5C0F\u7ED3\u679C\u3002\u8BFB\u5927\u6587\u4EF6\u8BF7\u7528 Read \u52A0 offset/limit,\u522B cat \u6574\u4E2A\u6587\u4EF6\u3002":"Pipe output through head, tail, or grep to reduce result size. Avoid cat on large files \u2014 use Read with offset/limit instead.",savingsTokens:Math.floor(tokens*.5)};case FILE_READ_TOOL_NAME:return{severity:"info",title:isZh7?`Read \u7ED3\u679C\u5360\u7528 ${tokenStr} ${tokenWord} (${percent.toFixed(0)}%)`:`Read results using ${tokenStr} tokens (${percent.toFixed(0)}%)`,detail:isZh7?"\u4F7F\u7528 offset \u548C limit \u53EA\u8BFB\u53D6\u9700\u8981\u7684\u7247\u6BB5\u3002\u53EA\u770B\u51E0\u884C\u65F6\u4E0D\u8981\u91CD\u590D\u8BFB\u6574\u6587\u4EF6\u3002":"Use offset and limit parameters to read only the sections you need. Avoid re-reading entire files when you only need a few lines.",savingsTokens:Math.floor(tokens*.3)};case GREP_TOOL_NAME:return{severity:"info",title:isZh7?`Grep \u7ED3\u679C\u5360\u7528 ${tokenStr} ${tokenWord} (${percent.toFixed(0)}%)`:`Grep results using ${tokenStr} tokens (${percent.toFixed(0)}%)`,detail:isZh7?"\u6536\u7D27\u5339\u914D\u6A21\u5F0F,\u6216\u7528 glob/type \u9650\u5B9A\u6587\u4EF6\u7C7B\u578B\u3002\u5982\u679C\u53EA\u662F\u627E\u6587\u4EF6,Glob \u901A\u5E38\u6BD4 Grep \u66F4\u7701\u3002":"Add more specific patterns or use the glob or type parameter to narrow file types. Consider Glob for file discovery instead of Grep.",savingsTokens:Math.floor(tokens*.3)};case WEB_FETCH_TOOL_NAME:return{severity:"info",title:isZh7?`WebFetch \u7ED3\u679C\u5360\u7528 ${tokenStr} ${tokenWord} (${percent.toFixed(0)}%)`:`WebFetch results using ${tokenStr} tokens (${percent.toFixed(0)}%)`,detail:isZh7?"\u7F51\u9875\u5185\u5BB9\u5F80\u5F80\u5F88\u5927,\u53EA\u62BD\u53D6\u771F\u6B63\u9700\u8981\u7684\u5B57\u6BB5\u5373\u53EF\u3002":"Web page content can be very large. Consider extracting only the specific information needed.",savingsTokens:Math.floor(tokens*.4)};default:return percent>=20?{severity:"info",title:isZh7?`${toolName5} \u5360\u7528 ${tokenStr} ${tokenWord} (${percent.toFixed(0)}%)`:`${toolName5} using ${tokenStr} tokens (${percent.toFixed(0)}%)`,detail:isZh7?"\u8BE5\u5DE5\u5177\u6D88\u8017\u4E86\u8F83\u5927\u6BD4\u4F8B\u7684\u4E0A\u4E0B\u6587\u3002":"This tool is consuming a significant portion of context.",savingsTokens:Math.floor(tokens*.2)}:null}}function checkReadResultBloat(data,suggestions){let isZh7=resolveUiLocale()==="zh-CN",tokenWord=isZh7?"\u8BCD\u5143":"tokens";if(!data.messageBreakdown)return;let readTool=data.messageBreakdown.toolCallsByType.find(t8=>t8.name===FILE_READ_TOOL_NAME);if(!readTool)return;let totalReadTokens=readTool.callTokens+readTool.resultTokens,totalReadPercent=totalReadTokens/data.rawMaxTokens*100,readPercent=readTool.resultTokens/data.rawMaxTokens*100;totalReadPercent>=LARGE_TOOL_RESULT_PERCENT&&totalReadTokens>=LARGE_TOOL_RESULT_TOKENS||readPercent>=READ_BLOAT_PERCENT&&readTool.resultTokens>=LARGE_TOOL_RESULT_TOKENS&&suggestions.push({severity:"info",title:isZh7?`\u6587\u4EF6\u8BFB\u53D6\u5360\u7528 ${formatTokens(readTool.resultTokens)} ${tokenWord} (${readPercent.toFixed(0)}%)`:`File reads using ${formatTokens(readTool.resultTokens)} tokens (${readPercent.toFixed(0)}%)`,detail:isZh7?"\u5982\u679C\u5728\u91CD\u590D\u8BFB\u540C\u4E00\u6587\u4EF6,\u53EF\u5F15\u7528\u4E4B\u524D\u7684\u7ED3\u679C\u3002\u8BFB\u5927\u6587\u4EF6\u7528 offset/limit\u3002":"If you are re-reading files, consider referencing earlier reads. Use offset/limit for large files.",savingsTokens:Math.floor(readTool.resultTokens*.3)})}function checkMemoryBloat(data,suggestions){let isZh7=resolveUiLocale()==="zh-CN",tokenWord=isZh7?"\u8BCD\u5143":"tokens",totalMemoryTokens=data.memoryFiles.reduce((sum2,f3)=>sum2+f3.tokens,0),memoryPercent=totalMemoryTokens/data.rawMaxTokens*100;if(memoryPercent>=MEMORY_HIGH_PERCENT&&totalMemoryTokens>=MEMORY_HIGH_TOKENS){let largestFiles=[...data.memoryFiles].sort((a2,b3)=>b3.tokens-a2.tokens).slice(0,3).map(f3=>`${getDisplayPath(f3.path)} (${formatTokens(f3.tokens)})`).join(", ");suggestions.push({severity:"info",title:isZh7?`\u8BB0\u5FC6\u6587\u4EF6\u5360\u7528 ${formatTokens(totalMemoryTokens)} ${tokenWord} (${memoryPercent.toFixed(0)}%)`:`Memory files using ${formatTokens(totalMemoryTokens)} tokens (${memoryPercent.toFixed(0)}%)`,detail:isZh7?`\u6700\u5927\u51E0\u4E2A:${largestFiles}\u3002\u8FD0\u884C /memory \u68C0\u67E5\u5E76\u6E05\u7406\u8FC7\u671F\u6761\u76EE\u3002`:`Largest: ${largestFiles}. Use /memory to review and prune stale entries.`,savingsTokens:Math.floor(totalMemoryTokens*.3)})}}function checkAutoCompactDisabled(data,suggestions){let isZh7=resolveUiLocale()==="zh-CN";!data.isAutoCompactEnabled&&data.percentage>=50&&data.percentage<NEAR_CAPACITY_PERCENT&&suggestions.push({severity:"info",title:isZh7?"\u81EA\u52A8\u538B\u7F29\u5DF2\u5173\u95ED":"Autocompact is disabled",detail:isZh7?"\u4E0D\u5F00\u81EA\u52A8\u538B\u7F29\u4F1A\u649E\u4E0A\u4E0B\u6587\u4E0A\u9650,\u5BFC\u81F4\u5BF9\u8BDD\u4E22\u5931\u3002\u5728 /config \u542F\u7528,\u6216\u624B\u52A8 /compact\u3002":"Without autocompact, you will hit context limits and lose the conversation. Enable it in /config or use /compact manually."})}var LARGE_TOOL_RESULT_PERCENT,LARGE_TOOL_RESULT_TOKENS,READ_BLOAT_PERCENT,NEAR_CAPACITY_PERCENT,MEMORY_HIGH_PERCENT,MEMORY_HIGH_TOKENS,init_contextSuggestions=__esm({"src/utils/contextSuggestions.ts"(){init_toolName();init_prompt2();init_prompt();init_prompt5();init_file2();init_format();init_uiLocale();LARGE_TOOL_RESULT_PERCENT=15,LARGE_TOOL_RESULT_TOKENS=1e4,READ_BLOAT_PERCENT=5,NEAR_CAPACITY_PERCENT=80,MEMORY_HIGH_PERCENT=5,MEMORY_HIGH_TOKENS=5e3;__name(generateContextSuggestions,"generateContextSuggestions");__name(checkNearCapacity,"checkNearCapacity");__name(checkLargeToolResults,"checkLargeToolResults");__name(getLargeToolSuggestion,"getLargeToolSuggestion");__name(checkReadResultBloat,"checkReadResultBloat");__name(checkMemoryBloat,"checkMemoryBloat");__name(checkAutoCompactDisabled,"checkAutoCompactDisabled")}});function ContextSuggestions({suggestions}){let isZh7=resolveUiLocale()==="zh-CN";return suggestions.length===0?null:(0,import_jsx_runtime107.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime107.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5EFA\u8BAE":"Suggestions"}),suggestions.map((suggestion,i3)=>(0,import_jsx_runtime107.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:i3===0?0:1,children:[(0,import_jsx_runtime107.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime107.jsx)(StatusIcon,{status:suggestion.severity,withSpace:!0}),(0,import_jsx_runtime107.jsx)(ThemedText,{bold:!0,children:suggestion.title}),suggestion.savingsTokens?(0,import_jsx_runtime107.jsxs)(ThemedText,{dimColor:!0,children:[" ",figures_default.arrowRight," ",isZh7?"\u53EF\u7701\u7EA6 ":"save ~",formatTokens(suggestion.savingsTokens)]}):null]}),(0,import_jsx_runtime107.jsx)(ThemedBox_default,{marginLeft:2,children:(0,import_jsx_runtime107.jsx)(ThemedText,{dimColor:!0,children:suggestion.detail})})]},i3))]})}var import_jsx_runtime107,init_ContextSuggestions=__esm({"src/components/ContextSuggestions.tsx"(){init_figures();init_ink();init_format();init_uiLocale();init_StatusIcon();import_jsx_runtime107=__toESM(require_jsx_runtime());__name(ContextSuggestions,"ContextSuggestions")}});function CollapseStatus(){return null}function groupBySource(items){let groups=new Map;for(let item of items){let key=getSourceDisplayName(item.source),existing=groups.get(key)||[];existing.push(item),groups.set(key,existing)}for(let[key,group]of groups.entries())groups.set(key,group.sort((a2,b3)=>b3.tokens-a2.tokens));let orderedGroups=new Map;for(let source of SOURCE_DISPLAY_ORDER){let group=groups.get(source);group&&orderedGroups.set(source,group)}return orderedGroups}function localizeCategoryName(name){return CATEGORY_ZH_MAP[name]??name}function ContextVisualization({data}){let isZh7=resolveUiLocale()==="zh-CN",tokenWord=isZh7?"\u8BCD\u5143":"tokens",{categories,totalTokens,rawMaxTokens,percentage,gridRows,model,memoryFiles,mcpTools,deferredBuiltinTools=[],systemTools,systemPromptSections,agents:agents2,skills:skills2,messageBreakdown}=data,visibleCategories=categories.filter(cat2=>cat2.tokens>0&&cat2.name!=="Free space"&&cat2.name!==RESERVED_CATEGORY_NAME2&&!cat2.isDeferred),hasDeferredMcpTools=categories.some(cat2=>cat2.isDeferred&&cat2.name.includes("MCP")),hasDeferredBuiltinTools=deferredBuiltinTools.length>0,autocompactCategory=categories.find(cat2=>cat2.name===RESERVED_CATEGORY_NAME2);return(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",paddingLeft:1,children:[(0,import_jsx_runtime108.jsx)(ThemedText,{bold:!0,children:isZh7?"\u4E0A\u4E0B\u6587\u7528\u91CF":"Context Usage"}),(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"row",gap:2,children:[(0,import_jsx_runtime108.jsx)(ThemedBox_default,{flexDirection:"column",flexShrink:0,children:gridRows.map((row3,rowIndex)=>(0,import_jsx_runtime108.jsx)(ThemedBox_default,{flexDirection:"row",marginLeft:-1,children:row3.map((square,colIndex)=>square.categoryName==="Free space"?(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:"\u26F6 "},colIndex):square.categoryName===RESERVED_CATEGORY_NAME2?(0,import_jsx_runtime108.jsx)(ThemedText,{color:square.color,children:"\u26DD "},colIndex):(0,import_jsx_runtime108.jsx)(ThemedText,{color:square.color,children:square.squareFullness>=.7?"\u26C1 ":"\u26C0 "},colIndex))},rowIndex))}),(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",gap:0,flexShrink:0,children:[(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[model," \xB7 ",formatTokens(totalTokens),"/",formatTokens(rawMaxTokens)," ",tokenWord," (",percentage,"%)"]}),(0,import_jsx_runtime108.jsx)(CollapseStatus,{}),(0,import_jsx_runtime108.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,italic:!0,children:isZh7?"\u6309\u7C7B\u522B\u4F30\u7B97\u7684\u7528\u91CF":"Estimated usage by category"}),visibleCategories.map((cat2,index)=>{let tokenDisplay=formatTokens(cat2.tokens),percentDisplay=cat2.isDeferred?"N/A":`${(cat2.tokens/rawMaxTokens*100).toFixed(1)}%`,isReserved=cat2.name===RESERVED_CATEGORY_NAME2,displayName=isZh7?localizeCategoryName(cat2.name):cat2.name,symbol2=cat2.isDeferred?" ":isReserved?"\u26DD":"\u26C1";return(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsx)(ThemedText,{color:cat2.color,children:symbol2}),(0,import_jsx_runtime108.jsxs)(ThemedText,{children:[" ",displayName,": "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[tokenDisplay," ",tokenWord," (",percentDisplay,")"]})]},index)}),(categories.find(c4=>c4.name==="Free space")?.tokens??0)>0&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:"\u26F6"}),(0,import_jsx_runtime108.jsxs)(ThemedText,{children:[" ",isZh7?"\u7A7A\u95F2\u7A7A\u95F4":"Free space",": "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[formatTokens(categories.find(c4=>c4.name==="Free space")?.tokens||0)," ","(",((categories.find(c4=>c4.name==="Free space")?.tokens||0)/rawMaxTokens*100).toFixed(1),"%)"]})]}),autocompactCategory&&autocompactCategory.tokens>0&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsx)(ThemedText,{color:autocompactCategory.color,children:"\u26DD"}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[" ",isZh7?"\u81EA\u52A8\u538B\u7F29\u7F13\u51B2":autocompactCategory.name,":"," "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[formatTokens(autocompactCategory.tokens)," ",tokenWord," (",(autocompactCategory.tokens/rawMaxTokens*100).toFixed(1),"%)"]})]})]})]}),(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginLeft:-1,children:[mcpTools.length>0&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsx)(ThemedText,{bold:!0,children:isZh7?"MCP \u5DE5\u5177":"MCP tools"}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[" ","\xB7 /mcp",hasDeferredMcpTools?isZh7?"(\u6309\u9700\u52A0\u8F7D)":" (loaded on-demand)":""]})]}),mcpTools.some(t8=>t8.isLoaded)&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u5DF2\u52A0\u8F7D":"Loaded"}),mcpTools.filter(t8=>t8.isLoaded).map((tool,i3)=>(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsxs)(ThemedText,{children:["\u2514 ",tool.name,": "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[formatTokens(tool.tokens)," ",tokenWord]})]},i3))]}),hasDeferredMcpTools&&mcpTools.some(t8=>!t8.isLoaded)&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u53EF\u7528":"Available"}),mcpTools.filter(t8=>!t8.isLoaded).map((tool,i3)=>(0,import_jsx_runtime108.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:["\u2514 ",tool.name]})},i3))]}),!hasDeferredMcpTools&&mcpTools.map((tool,i3)=>(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsxs)(ThemedText,{children:["\u2514 ",tool.name,": "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[formatTokens(tool.tokens)," ",tokenWord]})]},i3))]}),(systemTools&&systemTools.length>0||hasDeferredBuiltinTools)&&!1,systemPromptSections&&systemPromptSections.length>0&&!1,agents2.length>0&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsx)(ThemedText,{bold:!0,children:isZh7?"\u81EA\u5B9A\u4E49 Agent":"Custom agents"}),(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:" \xB7 /agents"})]}),Array.from(groupBySource(agents2).entries()).map(([sourceDisplay,sourceAgents])=>(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:sourceDisplay}),sourceAgents.map((agent,i3)=>(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsxs)(ThemedText,{children:["\u2514 ",agent.agentType,": "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[formatTokens(agent.tokens)," ",tokenWord]})]},i3))]},sourceDisplay))]}),memoryFiles.length>0&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8BB0\u5FC6\u6587\u4EF6":"Memory files"}),(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:" \xB7 /memory"})]}),memoryFiles.map((file2,i3)=>(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsxs)(ThemedText,{children:["\u2514 ",getDisplayPath(file2.path),": "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[formatTokens(file2.tokens)," ",tokenWord]})]},i3))]}),skills2&&skills2.tokens>0&&(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6280\u80FD":"Skills"}),(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:" \xB7 /skills"})]}),Array.from(groupBySource(skills2.skillFrontmatter).entries()).map(([sourceDisplay,sourceSkills])=>(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime108.jsx)(ThemedText,{dimColor:!0,children:sourceDisplay}),sourceSkills.map((skill,i3)=>(0,import_jsx_runtime108.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime108.jsxs)(ThemedText,{children:["\u2514 ",skill.name,": "]}),(0,import_jsx_runtime108.jsxs)(ThemedText,{dimColor:!0,children:[formatTokens(skill.tokens)," ",tokenWord]})]},i3))]},sourceDisplay))]}),messageBreakdown&&!1]}),(0,import_jsx_runtime108.jsx)(ContextSuggestions,{suggestions:generateContextSuggestions(data)})]})}var import_jsx_runtime108,RESERVED_CATEGORY_NAME2,SOURCE_DISPLAY_ORDER,CATEGORY_ZH_MAP,init_ContextVisualization=__esm({"src/components/ContextVisualization.tsx"(){init_ink();init_contextSuggestions();init_file2();init_format();init_constants6();init_stringUtils();init_uiLocale();init_ContextSuggestions();import_jsx_runtime108=__toESM(require_jsx_runtime()),RESERVED_CATEGORY_NAME2="Autocompact buffer";__name(CollapseStatus,"CollapseStatus");SOURCE_DISPLAY_ORDER=["Project","User","Managed","Plugin","Built-in"];__name(groupBySource,"groupBySource");CATEGORY_ZH_MAP={"System prompt":"\u7CFB\u7EDF\u63D0\u793A","System tools":"\u7CFB\u7EDF\u5DE5\u5177","MCP tools":"MCP \u5DE5\u5177","Custom agents":"\u81EA\u5B9A\u4E49 Agent","Memory files":"\u8BB0\u5FC6\u6587\u4EF6",Messages:"\u6D88\u606F\u5386\u53F2","Tool results":"\u5DE5\u5177\u7ED3\u679C",Attachments:"\u9644\u4EF6",Skills:"\u6280\u80FD","Free space":"\u7A7A\u95F2\u7A7A\u95F4","Autocompact buffer":"\u81EA\u52A8\u538B\u7F29\u7F13\u51B2"};__name(localizeCategoryName,"localizeCategoryName");__name(ContextVisualization,"ContextVisualization")}});function reactNodeToPlainText(node){if(node==null||typeof node=="boolean")return"";if(typeof node=="string"||typeof node=="number")return String(node);if(Array.isArray(node))return node.map(reactNodeToPlainText).join("");if(React43.isValidElement(node)){let props=node.props;return reactNodeToPlainText(props?.children)}return""}function renderToAnsiString(node,_columns){return Promise.resolve(reactNodeToPlainText(node))}async function renderToString(node,columns){let output2=await renderToAnsiString(node,columns);return stripAnsi(output2)}var React43,init_staticRender=__esm({"src/utils/staticRender.tsx"(){React43=__toESM(require_react());init_strip_ansi();__name(reactNodeToPlainText,"reactNodeToPlainText");__name(renderToAnsiString,"renderToAnsiString");__name(renderToString,"renderToString")}});var context_exports={};__export(context_exports,{call:()=>call27});function toApiView(messages){return getMessagesAfterCompactBoundary(messages)}async function call27(onDone,context2){let{messages,getAppState,options:{mainLoopModel,tools}}=context2,apiView=toApiView(messages),{messages:compactedMessages}=await microcompactMessages(apiView),terminalWidth=process.stdout.columns||80,appState=getAppState(),data=await analyzeContextUsage(compactedMessages,mainLoopModel,async()=>appState.toolPermissionContext,tools,appState.agentDefinitions,terminalWidth,context2,void 0,apiView),output2=await renderToAnsiString((0,import_jsx_runtime109.jsx)(ContextVisualization,{data}));return onDone(output2),null}var import_jsx_runtime109,init_context2=__esm({"src/commands/context/context.tsx"(){init_ContextVisualization();init_microCompact();init_analyzeContext();init_messages4();init_staticRender();import_jsx_runtime109=__toESM(require_jsx_runtime());__name(toApiView,"toApiView");__name(call27,"call")}});var context_noninteractive_exports={};__export(context_noninteractive_exports,{call:()=>call28,collectContextData:()=>collectContextData});async function collectContextData(context2){let{messages,getAppState,options:{mainLoopModel,tools,agentDefinitions,customSystemPrompt,appendSystemPrompt}}=context2,apiView=getMessagesAfterCompactBoundary(messages),{messages:compactedMessages}=await microcompactMessages(apiView),appState=getAppState();return analyzeContextUsage(compactedMessages,mainLoopModel,async()=>appState.toolPermissionContext,tools,agentDefinitions,void 0,{options:{customSystemPrompt,appendSystemPrompt}},void 0,apiView)}async function call28(_args,context2){let data=await collectContextData(context2);return{type:"text",value:formatContextAsMarkdownTable(data)}}function formatContextAsMarkdownTable(data){let{categories,totalTokens,rawMaxTokens,percentage,model,memoryFiles,mcpTools,agents:agents2,skills:skills2,messageBreakdown,systemTools,systemPromptSections}=data,output2=`## Context Usage
@@ -6763,7 +6763,7 @@ ${editorHint}`,{display:"system"})}catch(error40){logError2(error40),onDone(`Err
6763
6763
  4. Report saved image/video paths and a one-line caption. Do not claim you cannot generate media.
6764
6764
 
6765
6765
  Description:
6766
- ${prompt.trim()}`}var imagineVideo,imagine_video_default,init_imagine_video=__esm({"src/commands/imagine-video/index.ts"(){init_prompt10();__name(imagineVideoInstruction,"imagineVideoInstruction");imagineVideo={type:"prompt",name:"imagine-video",description:"Generate a short video from a description (Grok /imagine-video)",aliases:["imagine_video","imaginevideo"],progressMessage:"planning video",contentLength:280,argNames:["description"],allowedTools:[IMAGE_GEN_TOOL_NAME],source:"builtin",argumentHint:"<description>",async getPromptForCommand(args){let prompt=args.trim();return prompt?[{type:"text",text:imagineVideoInstruction(prompt)}]:[{type:"text",text:"Usage: /imagine-video <description> \u2014 e.g. /imagine-video a cat playing piano in a jazz club"}]}},imagine_video_default=imagineVideo}});function Commands({commands,maxHeight,columns,title,onCancel,emptyMessage}){let{headerFocused,focusHeader}=useTabHeaderFocus(),maxWidth=Math.max(1,columns-10),visibleCount=Math.max(1,Math.floor((maxHeight-10)/2)),options=(0,import_react87.useMemo)(()=>{let seen=new Set;return commands.filter(cmd=>seen.has(cmd.name)?!1:(seen.add(cmd.name),!0)).sort((a2,b3)=>a2.name.localeCompare(b3.name)).map(cmd=>({label:`/${cmd.name}`,value:cmd.name,description:truncate2(formatDescriptionWithSource(cmd),maxWidth,!0)}))},[commands,maxWidth]);return(0,import_jsx_runtime117.jsx)(ThemedBox_default,{flexDirection:"column",paddingY:1,children:commands.length===0&&emptyMessage?(0,import_jsx_runtime117.jsx)(ThemedText,{dimColor:!0,children:emptyMessage}):(0,import_jsx_runtime117.jsxs)(import_jsx_runtime117.Fragment,{children:[(0,import_jsx_runtime117.jsx)(ThemedText,{children:title}),(0,import_jsx_runtime117.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime117.jsx)(Select,{options,visibleOptionCount:visibleCount,onCancel,disableSelection:!0,hideIndexes:!0,layout:"compact-vertical",onUpFromFirstItem:focusHeader,isDisabled:headerFocused})})]})})}var import_react87,import_jsx_runtime117,init_Commands=__esm({"src/components/HelpV2/Commands.tsx"(){import_react87=__toESM(require_react());init_commands2();init_ink();init_format();init_select();init_Tabs();import_jsx_runtime117=__toESM(require_jsx_runtime());__name(Commands,"Commands")}});function getNewlineInstructions(){return env4.terminal==="Apple_Terminal"&&process.platform==="darwin"||isShiftEnterKeyBindingInstalled()?"shift + \u23CE for newline":hasUsedBackslashReturn()?"\\\u23CE for newline":"backslash (\\) + return (\u23CE) for newline"}var init_utils11=__esm({"src/components/PromptInput/utils.ts"(){init_terminalSetup();init_config11();init_env2();__name(getNewlineInstructions,"getNewlineInstructions")}});function formatShortcut(shortcut){return shortcut.replace(/\+/g," + ")}function PromptInputHelpMenu(props){let{dimColor,fixedWidth,gap,paddingX}=props,isZh7=resolveUiLocale()==="zh-CN",transcriptShortcut=formatShortcut(useShortcutDisplay("app:toggleTranscript","Global","ctrl+o")),todosShortcut=formatShortcut(useShortcutDisplay("app:toggleTodos","Global","ctrl+t")),undoShortcut=formatShortcut(useShortcutDisplay("chat:undo","Chat","ctrl+_")),stashShortcut=formatShortcut(useShortcutDisplay("chat:stash","Chat","ctrl+s")),cycleModeShortcut=formatShortcut(useShortcutDisplay("chat:cycleMode","Chat","shift+tab")),modelPickerShortcut=formatShortcut(useShortcutDisplay("chat:modelPicker","Chat","alt+p")),fastModeShortcut=formatShortcut(useShortcutDisplay("chat:fastMode","Chat","alt+o")),externalEditorShortcut=formatShortcut(useShortcutDisplay("chat:externalEditor","Chat","ctrl+g")),terminalShortcut=formatShortcut(useShortcutDisplay("app:toggleTerminal","Global","meta+j")),imagePasteShortcut=formatShortcut(useShortcutDisplay("chat:imagePaste","Chat","ctrl+v"));return(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{paddingX,flexDirection:"row",gap,children:[(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{flexDirection:"column",width:fixedWidth?24:void 0,children:[(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["! ",isZh7?"\u8FDB\u5165 bash \u6A21\u5F0F":"for bash mode"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["/ ",isZh7?"\u89E6\u53D1\u547D\u4EE4":"for commands"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["@ ",isZh7?"\u63D2\u5165\u6587\u4EF6\u8DEF\u5F84":"for file paths"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["& ",isZh7?"\u540E\u53F0\u8FD0\u884C":"for background"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["/btw ",isZh7?"\u63D2\u5165\u5C0F\u95EE\u9898":"for side question"]})})]}),(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{flexDirection:"column",width:fixedWidth?35:void 0,children:[(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsx)(ThemedText,{dimColor,children:isZh7?"\u8FDE\u6309\u4E24\u6B21 esc \u6E05\u7A7A\u8F93\u5165":"double tap esc to clear input"})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[cycleModeShortcut," ",isZh7?"\u81EA\u52A8\u63A5\u53D7\u7F16\u8F91":"to auto-accept edits"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[transcriptShortcut," ",isZh7?"\u663E\u793A\u8BE6\u7EC6\u8F93\u51FA":"for verbose output"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[todosShortcut," ",isZh7?"\u5C55\u5F00/\u6298\u53E0\u4EFB\u52A1":"to toggle tasks"]})}),null,(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsx)(ThemedText,{dimColor,children:getNewlineInstructions()})})]}),(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[undoShortcut," ",isZh7?"\u64A4\u9500":"to undo"]})}),getPlatform()!=="windows"&&(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["ctrl + z ",isZh7?"\u6302\u8D77\u8FDB\u7A0B":"to suspend"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[imagePasteShortcut," ",isZh7?"\u7C98\u8D34\u56FE\u7247":"to paste images"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[modelPickerShortcut," ",isZh7?"\u5207\u6362\u6A21\u578B":"to switch model"]})}),isFastModeEnabled()&&isFastModeAvailable()&&(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[fastModeShortcut," ",isZh7?"\u5207\u6362\u6781\u901F\u6A21\u5F0F":"to toggle fast mode"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[stashShortcut," ",isZh7?"\u6682\u5B58\u63D0\u793A\u8BCD":"to stash prompt"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[externalEditorShortcut," ",isZh7?"\u7528 $EDITOR \u7F16\u8F91":"to edit in $EDITOR"]})}),isKeybindingCustomizationEnabled()&&(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["/keybindings ",isZh7?"\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E":"to customize"]})})]})]})}var import_jsx_runtime118,init_PromptInputHelpMenu=__esm({"src/components/PromptInput/PromptInputHelpMenu.tsx"(){init_ink();init_platform2();init_loadUserBindings();init_useShortcutDisplay();init_growthbook();init_fastMode();init_uiLocale();init_utils11();import_jsx_runtime118=__toESM(require_jsx_runtime());__name(formatShortcut,"formatShortcut");__name(PromptInputHelpMenu,"PromptInputHelpMenu")}});function General(){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime119.jsxs)(ThemedBox_default,{flexDirection:"column",paddingY:1,gap:1,children:[(0,import_jsx_runtime119.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime119.jsx)(ThemedText,{children:isZh7?HELP_GENERAL_ZH:HELP_GENERAL_EN})}),(0,import_jsx_runtime119.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime119.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime119.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5FEB\u6377\u952E":"Shortcuts"})}),(0,import_jsx_runtime119.jsx)(PromptInputHelpMenu,{gap:2,fixedWidth:!0})]})]})}var import_jsx_runtime119,HELP_GENERAL_EN,HELP_GENERAL_ZH,init_General=__esm({"src/components/HelpV2/General.tsx"(){init_ink();init_uiLocale();init_PromptInputHelpMenu();import_jsx_runtime119=__toESM(require_jsx_runtime()),HELP_GENERAL_EN="Clavue understands your codebase, makes edits with your permission, and executes commands \u2014 right from your terminal.",HELP_GENERAL_ZH="\u514B\u62C9\u7EF4 \u7406\u89E3\u4F60\u7684\u4EE3\u7801\u5E93,\u5728\u4F60\u6388\u6743\u540E\u4FEE\u6539\u6587\u4EF6,\u5E76\u76F4\u63A5\u5728\u7EC8\u7AEF\u4E2D\u6267\u884C\u547D\u4EE4\u3002";__name(General,"General")}});function HelpV2({onClose,commands}){let{rows,columns}=useTerminalSize(),maxHeight=Math.floor(rows/2),isZh7=resolveUiLocale()==="zh-CN",insideModal=useIsInsideModal(),close2=__name(()=>onClose("Help dialog dismissed",{display:"system"}),"close");useKeybinding("help:dismiss",close2,{context:"Help"});let exitState=useExitOnCtrlCDWithKeybindings(close2),dismissShortcut=useShortcutDisplay("help:dismiss","Help","esc"),builtinNames=builtInCommandNames(),builtinCommands=commands.filter(cmd=>{let classification=getCommandSurfaceClassification(cmd.name);return builtinNames.has(cmd.name)&&!cmd.isHidden&&isPublicCommandSurface(classification)}),antOnlyCommands=[],customCommands=commands.filter(cmd=>!builtinNames.has(cmd.name)&&!cmd.isHidden),tabs=[(0,import_jsx_runtime120.jsx)(Tab,{title:"general",children:(0,import_jsx_runtime120.jsx)(General,{})},"general")],builtinCommandsTitle=isZh7?"\u6D4F\u89C8\u516C\u5F00\u9ED8\u8BA4\u547D\u4EE4:":"Browse public default commands:";return tabs.push((0,import_jsx_runtime120.jsx)(Tab,{title:"commands",children:(0,import_jsx_runtime120.jsx)(Commands,{commands:builtinCommands,maxHeight,columns,title:builtinCommandsTitle,onCancel:close2})},"commands")),tabs.push((0,import_jsx_runtime120.jsx)(Tab,{title:"custom-commands",children:(0,import_jsx_runtime120.jsx)(Commands,{commands:customCommands,maxHeight,columns,title:isZh7?"\u6D4F\u89C8\u81EA\u5B9A\u4E49\u547D\u4EE4:":"Browse custom commands:",emptyMessage:isZh7?"\u6682\u65E0\u81EA\u5B9A\u4E49\u547D\u4EE4":"No custom commands found",onCancel:close2})},"custom")),(0,import_jsx_runtime120.jsx)(ThemedBox_default,{flexDirection:"column",height:insideModal?void 0:maxHeight,children:(0,import_jsx_runtime120.jsxs)(Pane,{color:"professionalBlue",children:[(0,import_jsx_runtime120.jsx)(Tabs,{title:"Clavue v11.3.12",color:"professionalBlue",defaultTab:"general",children:tabs}),(0,import_jsx_runtime120.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime120.jsxs)(ThemedText,{children:[isZh7?"\u66F4\u591A\u5E2E\u52A9: ":"For more help: ",(0,import_jsx_runtime120.jsx)(Link,{url:"https://www.clavue.com"})]})}),(0,import_jsx_runtime120.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime120.jsx)(ThemedText,{dimColor:!0,children:exitState.pending?(0,import_jsx_runtime120.jsx)(import_jsx_runtime120.Fragment,{children:isZh7?`\u518D\u6309\u4E00\u6B21 ${exitState.keyName} \u9000\u51FA`:`Press ${exitState.keyName} again to exit`}):(0,import_jsx_runtime120.jsx)(ThemedText,{italic:!0,children:isZh7?`${dismissShortcut} \u53D6\u6D88`:`${dismissShortcut} to cancel`})})})]})})}var import_jsx_runtime120,init_HelpV2=__esm({"src/components/HelpV2/HelpV2.tsx"(){init_useExitOnCtrlCDWithKeybindings();init_useShortcutDisplay();init_commands2();init_modalContext();init_useTerminalSize();init_ink();init_useKeybinding();init_uiLocale();init_Pane();init_Tabs();init_Commands();init_General();import_jsx_runtime120=__toESM(require_jsx_runtime());__name(HelpV2,"HelpV2")}});var help_exports={};__export(help_exports,{call:()=>call38});var import_jsx_runtime121,call38,init_help=__esm({"src/commands/help/help.tsx"(){init_HelpV2();import_jsx_runtime121=__toESM(require_jsx_runtime()),call38=__name(async(onDone,{options:{commands}})=>(0,import_jsx_runtime121.jsx)(HelpV2,{commands,onClose:onDone}),"call")}});var help,help_default,init_help2=__esm({"src/commands/help/index.ts"(){help={type:"local-jsx",name:"help",description:"Show help and available commands",load:__name(()=>Promise.resolve().then(()=>(init_help(),help_exports)),"load")},help_default=help}});function IdeAutoConnectDialog({onComplete}){let handleSelect=(0,import_react88.useCallback)(async value=>{let autoConnect=value==="yes";saveGlobalConfig(current=>({...current,autoConnectIde:autoConnect,hasIdeAutoConnectDialogBeenShown:!0})),onComplete()},[onComplete]),isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime122.jsxs)(Dialog,{title:isZh7?"\u662F\u5426\u542F\u7528 IDE \u81EA\u52A8\u8FDE\u63A5?":"Do you wish to enable auto-connect to IDE?",color:"ide",onCancel:onComplete,children:[(0,import_jsx_runtime122.jsx)(Select,{options:[{label:isZh7?"\u662F":"Yes",value:"yes"},{label:isZh7?"\u5426":"No",value:"no"}],onChange:handleSelect,defaultValue:"yes"}),(0,import_jsx_runtime122.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u4E5F\u53EF\u4EE5\u5728 /config \u4E2D\u914D\u7F6E,\u6216\u4F7F\u7528 --ide \u9009\u9879":"You can also configure this in /config or with the --ide flag"})]})}function shouldShowAutoConnectDialog(){let config3=getGlobalConfig();return!isSupportedTerminal()&&config3.autoConnectIde!==!0&&config3.hasIdeAutoConnectDialogBeenShown!==!0}function IdeDisableAutoConnectDialog({onComplete}){let handleSelect=(0,import_react88.useCallback)(value=>{let disableAutoConnect=value==="yes";disableAutoConnect&&saveGlobalConfig(current=>({...current,autoConnectIde:!1})),onComplete(disableAutoConnect)},[onComplete]),handleCancel=(0,import_react88.useCallback)(()=>{onComplete(!1)},[onComplete]),isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime122.jsx)(Dialog,{title:isZh7?"\u662F\u5426\u7981\u7528 IDE \u81EA\u52A8\u8FDE\u63A5?":"Do you wish to disable auto-connect to IDE?",subtitle:isZh7?"\u4E5F\u53EF\u4EE5\u5728 /config \u4E2D\u914D\u7F6E":"You can also configure this in /config",onCancel:handleCancel,color:"ide",children:(0,import_jsx_runtime122.jsx)(Select,{options:[{label:isZh7?"\u5426":"No",value:"no"},{label:isZh7?"\u662F":"Yes",value:"yes"}],onChange:handleSelect,defaultValue:"no"})})}function shouldShowDisableAutoConnectDialog(){let config3=getGlobalConfig();return!isSupportedTerminal()&&config3.autoConnectIde===!0}var import_react88,import_jsx_runtime122,init_IdeAutoConnectDialog=__esm({"src/components/IdeAutoConnectDialog.tsx"(){import_react88=__toESM(require_react());init_ink();init_config11();init_ide();init_uiLocale();init_CustomSelect();init_Dialog();import_jsx_runtime122=__toESM(require_jsx_runtime());__name(IdeAutoConnectDialog,"IdeAutoConnectDialog");__name(shouldShowAutoConnectDialog,"shouldShowAutoConnectDialog");__name(IdeDisableAutoConnectDialog,"IdeDisableAutoConnectDialog");__name(shouldShowDisableAutoConnectDialog,"shouldShowDisableAutoConnectDialog")}});var ide_exports={};__export(ide_exports,{call:()=>call39,formatWorkspaceFolders:()=>formatWorkspaceFolders});import*as path25 from"path";function IDEScreen({availableIDEs,unavailableIDEs,selectedIDE,onClose,onSelect}){let[selectedValue,setSelectedValue]=(0,import_react89.useState)(selectedIDE?.port?.toString()??"None"),[showAutoConnectDialog,setShowAutoConnectDialog]=(0,import_react89.useState)(!1),[showDisableAutoConnectDialog,setShowDisableAutoConnectDialog]=(0,import_react89.useState)(!1),handleSelectIDE=(0,import_react89.useCallback)(value=>{value!=="None"&&shouldShowAutoConnectDialog()?setShowAutoConnectDialog(!0):value==="None"&&shouldShowDisableAutoConnectDialog()?setShowDisableAutoConnectDialog(!0):onSelect(availableIDEs.find(ide2=>ide2.port===parseInt(value)))},[availableIDEs,onSelect]),ideCounts=availableIDEs.reduce((acc,ide2)=>(acc[ide2.name]=(acc[ide2.name]||0)+1,acc),{}),options=availableIDEs.map(ide2=>{let showWorkspace=(ideCounts[ide2.name]||0)>1&&ide2.workspaceFolders.length>0;return{label:ide2.name,value:ide2.port.toString(),description:showWorkspace?formatWorkspaceFolders(ide2.workspaceFolders):void 0}}).concat([{label:"None",value:"None",description:void 0}]);return showAutoConnectDialog?(0,import_jsx_runtime123.jsx)(IdeAutoConnectDialog,{onComplete:()=>handleSelectIDE(selectedValue)}):showDisableAutoConnectDialog?(0,import_jsx_runtime123.jsx)(IdeDisableAutoConnectDialog,{onComplete:()=>{onSelect(void 0)}}):(0,import_jsx_runtime123.jsx)(Dialog,{title:"Select IDE",subtitle:"Connect to an IDE for integrated development features.",onCancel:onClose,color:"ide",children:(0,import_jsx_runtime123.jsxs)(ThemedBox_default,{flexDirection:"column",children:[availableIDEs.length===0&&(0,import_jsx_runtime123.jsx)(ThemedText,{dimColor:!0,children:isSupportedJetBrainsTerminal()?`No available IDEs detected. Please install the plugin and restart your IDE:
6766
+ ${prompt.trim()}`}var imagineVideo,imagine_video_default,init_imagine_video=__esm({"src/commands/imagine-video/index.ts"(){init_prompt10();__name(imagineVideoInstruction,"imagineVideoInstruction");imagineVideo={type:"prompt",name:"imagine-video",description:"Generate a short video from a description (Grok /imagine-video)",aliases:["imagine_video","imaginevideo"],progressMessage:"planning video",contentLength:280,argNames:["description"],allowedTools:[IMAGE_GEN_TOOL_NAME],source:"builtin",argumentHint:"<description>",async getPromptForCommand(args){let prompt=args.trim();return prompt?[{type:"text",text:imagineVideoInstruction(prompt)}]:[{type:"text",text:"Usage: /imagine-video <description> \u2014 e.g. /imagine-video a cat playing piano in a jazz club"}]}},imagine_video_default=imagineVideo}});function Commands({commands,maxHeight,columns,title,onCancel,emptyMessage}){let{headerFocused,focusHeader}=useTabHeaderFocus(),maxWidth=Math.max(1,columns-10),visibleCount=Math.max(1,Math.floor((maxHeight-10)/2)),options=(0,import_react87.useMemo)(()=>{let seen=new Set;return commands.filter(cmd=>seen.has(cmd.name)?!1:(seen.add(cmd.name),!0)).sort((a2,b3)=>a2.name.localeCompare(b3.name)).map(cmd=>({label:`/${cmd.name}`,value:cmd.name,description:truncate2(formatDescriptionWithSource(cmd),maxWidth,!0)}))},[commands,maxWidth]);return(0,import_jsx_runtime117.jsx)(ThemedBox_default,{flexDirection:"column",paddingY:1,children:commands.length===0&&emptyMessage?(0,import_jsx_runtime117.jsx)(ThemedText,{dimColor:!0,children:emptyMessage}):(0,import_jsx_runtime117.jsxs)(import_jsx_runtime117.Fragment,{children:[(0,import_jsx_runtime117.jsx)(ThemedText,{children:title}),(0,import_jsx_runtime117.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime117.jsx)(Select,{options,visibleOptionCount:visibleCount,onCancel,disableSelection:!0,hideIndexes:!0,layout:"compact-vertical",onUpFromFirstItem:focusHeader,isDisabled:headerFocused})})]})})}var import_react87,import_jsx_runtime117,init_Commands=__esm({"src/components/HelpV2/Commands.tsx"(){import_react87=__toESM(require_react());init_commands2();init_ink();init_format();init_select();init_Tabs();import_jsx_runtime117=__toESM(require_jsx_runtime());__name(Commands,"Commands")}});function getNewlineInstructions(){return env4.terminal==="Apple_Terminal"&&process.platform==="darwin"||isShiftEnterKeyBindingInstalled()?"shift + \u23CE for newline":hasUsedBackslashReturn()?"\\\u23CE for newline":"backslash (\\) + return (\u23CE) for newline"}var init_utils11=__esm({"src/components/PromptInput/utils.ts"(){init_terminalSetup();init_config11();init_env2();__name(getNewlineInstructions,"getNewlineInstructions")}});function formatShortcut(shortcut){return shortcut.replace(/\+/g," + ")}function PromptInputHelpMenu(props){let{dimColor,fixedWidth,gap,paddingX}=props,isZh7=resolveUiLocale()==="zh-CN",transcriptShortcut=formatShortcut(useShortcutDisplay("app:toggleTranscript","Global","ctrl+o")),todosShortcut=formatShortcut(useShortcutDisplay("app:toggleTodos","Global","ctrl+t")),undoShortcut=formatShortcut(useShortcutDisplay("chat:undo","Chat","ctrl+_")),stashShortcut=formatShortcut(useShortcutDisplay("chat:stash","Chat","ctrl+s")),cycleModeShortcut=formatShortcut(useShortcutDisplay("chat:cycleMode","Chat","shift+tab")),modelPickerShortcut=formatShortcut(useShortcutDisplay("chat:modelPicker","Chat","alt+p")),fastModeShortcut=formatShortcut(useShortcutDisplay("chat:fastMode","Chat","alt+o")),externalEditorShortcut=formatShortcut(useShortcutDisplay("chat:externalEditor","Chat","ctrl+g")),terminalShortcut=formatShortcut(useShortcutDisplay("app:toggleTerminal","Global","meta+j")),imagePasteShortcut=formatShortcut(useShortcutDisplay("chat:imagePaste","Chat","ctrl+v"));return(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{paddingX,flexDirection:"row",gap,children:[(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{flexDirection:"column",width:fixedWidth?24:void 0,children:[(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["! ",isZh7?"\u8FDB\u5165 bash \u6A21\u5F0F":"for bash mode"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["/ ",isZh7?"\u89E6\u53D1\u547D\u4EE4":"for commands"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["@ ",isZh7?"\u63D2\u5165\u6587\u4EF6\u8DEF\u5F84":"for file paths"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["& ",isZh7?"\u540E\u53F0\u8FD0\u884C":"for background"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["/btw ",isZh7?"\u63D2\u5165\u5C0F\u95EE\u9898":"for side question"]})})]}),(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{flexDirection:"column",width:fixedWidth?35:void 0,children:[(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsx)(ThemedText,{dimColor,children:isZh7?"\u8FDE\u6309\u4E24\u6B21 esc \u6E05\u7A7A\u8F93\u5165":"double tap esc to clear input"})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[cycleModeShortcut," ",isZh7?"\u81EA\u52A8\u63A5\u53D7\u7F16\u8F91":"to auto-accept edits"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[transcriptShortcut," ",isZh7?"\u663E\u793A\u8BE6\u7EC6\u8F93\u51FA":"for verbose output"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[todosShortcut," ",isZh7?"\u5C55\u5F00/\u6298\u53E0\u4EFB\u52A1":"to toggle tasks"]})}),null,(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsx)(ThemedText,{dimColor,children:getNewlineInstructions()})})]}),(0,import_jsx_runtime118.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[undoShortcut," ",isZh7?"\u64A4\u9500":"to undo"]})}),getPlatform()!=="windows"&&(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["ctrl + z ",isZh7?"\u6302\u8D77\u8FDB\u7A0B":"to suspend"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[imagePasteShortcut," ",isZh7?"\u7C98\u8D34\u56FE\u7247":"to paste images"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[modelPickerShortcut," ",isZh7?"\u5207\u6362\u6A21\u578B":"to switch model"]})}),isFastModeEnabled()&&isFastModeAvailable()&&(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[fastModeShortcut," ",isZh7?"\u5207\u6362\u6781\u901F\u6A21\u5F0F":"to toggle fast mode"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[stashShortcut," ",isZh7?"\u6682\u5B58\u63D0\u793A\u8BCD":"to stash prompt"]})}),(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:[externalEditorShortcut," ",isZh7?"\u7528 $EDITOR \u7F16\u8F91":"to edit in $EDITOR"]})}),isKeybindingCustomizationEnabled()&&(0,import_jsx_runtime118.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime118.jsxs)(ThemedText,{dimColor,children:["/keybindings ",isZh7?"\u81EA\u5B9A\u4E49\u5FEB\u6377\u952E":"to customize"]})})]})]})}var import_jsx_runtime118,init_PromptInputHelpMenu=__esm({"src/components/PromptInput/PromptInputHelpMenu.tsx"(){init_ink();init_platform2();init_loadUserBindings();init_useShortcutDisplay();init_growthbook();init_fastMode();init_uiLocale();init_utils11();import_jsx_runtime118=__toESM(require_jsx_runtime());__name(formatShortcut,"formatShortcut");__name(PromptInputHelpMenu,"PromptInputHelpMenu")}});function General(){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime119.jsxs)(ThemedBox_default,{flexDirection:"column",paddingY:1,gap:1,children:[(0,import_jsx_runtime119.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime119.jsx)(ThemedText,{children:isZh7?HELP_GENERAL_ZH:HELP_GENERAL_EN})}),(0,import_jsx_runtime119.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime119.jsx)(ThemedBox_default,{children:(0,import_jsx_runtime119.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5FEB\u6377\u952E":"Shortcuts"})}),(0,import_jsx_runtime119.jsx)(PromptInputHelpMenu,{gap:2,fixedWidth:!0})]})]})}var import_jsx_runtime119,HELP_GENERAL_EN,HELP_GENERAL_ZH,init_General=__esm({"src/components/HelpV2/General.tsx"(){init_ink();init_uiLocale();init_PromptInputHelpMenu();import_jsx_runtime119=__toESM(require_jsx_runtime()),HELP_GENERAL_EN="Clavue understands your codebase, makes edits with your permission, and executes commands \u2014 right from your terminal.",HELP_GENERAL_ZH="\u514B\u62C9\u7EF4 \u7406\u89E3\u4F60\u7684\u4EE3\u7801\u5E93,\u5728\u4F60\u6388\u6743\u540E\u4FEE\u6539\u6587\u4EF6,\u5E76\u76F4\u63A5\u5728\u7EC8\u7AEF\u4E2D\u6267\u884C\u547D\u4EE4\u3002";__name(General,"General")}});function HelpV2({onClose,commands}){let{rows,columns}=useTerminalSize(),maxHeight=Math.floor(rows/2),isZh7=resolveUiLocale()==="zh-CN",insideModal=useIsInsideModal(),close2=__name(()=>onClose("Help dialog dismissed",{display:"system"}),"close");useKeybinding("help:dismiss",close2,{context:"Help"});let exitState=useExitOnCtrlCDWithKeybindings(close2),dismissShortcut=useShortcutDisplay("help:dismiss","Help","esc"),builtinNames=builtInCommandNames(),builtinCommands=commands.filter(cmd=>{let classification=getCommandSurfaceClassification(cmd.name);return builtinNames.has(cmd.name)&&!cmd.isHidden&&isPublicCommandSurface(classification)}),antOnlyCommands=[],customCommands=commands.filter(cmd=>!builtinNames.has(cmd.name)&&!cmd.isHidden),tabs=[(0,import_jsx_runtime120.jsx)(Tab,{title:"general",children:(0,import_jsx_runtime120.jsx)(General,{})},"general")],builtinCommandsTitle=isZh7?"\u6D4F\u89C8\u516C\u5F00\u9ED8\u8BA4\u547D\u4EE4:":"Browse public default commands:";return tabs.push((0,import_jsx_runtime120.jsx)(Tab,{title:"commands",children:(0,import_jsx_runtime120.jsx)(Commands,{commands:builtinCommands,maxHeight,columns,title:builtinCommandsTitle,onCancel:close2})},"commands")),tabs.push((0,import_jsx_runtime120.jsx)(Tab,{title:"custom-commands",children:(0,import_jsx_runtime120.jsx)(Commands,{commands:customCommands,maxHeight,columns,title:isZh7?"\u6D4F\u89C8\u81EA\u5B9A\u4E49\u547D\u4EE4:":"Browse custom commands:",emptyMessage:isZh7?"\u6682\u65E0\u81EA\u5B9A\u4E49\u547D\u4EE4":"No custom commands found",onCancel:close2})},"custom")),(0,import_jsx_runtime120.jsx)(ThemedBox_default,{flexDirection:"column",height:insideModal?void 0:maxHeight,children:(0,import_jsx_runtime120.jsxs)(Pane,{color:"professionalBlue",children:[(0,import_jsx_runtime120.jsx)(Tabs,{title:"Clavue v11.3.13",color:"professionalBlue",defaultTab:"general",children:tabs}),(0,import_jsx_runtime120.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime120.jsxs)(ThemedText,{children:[isZh7?"\u66F4\u591A\u5E2E\u52A9: ":"For more help: ",(0,import_jsx_runtime120.jsx)(Link,{url:"https://www.clavue.com"})]})}),(0,import_jsx_runtime120.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime120.jsx)(ThemedText,{dimColor:!0,children:exitState.pending?(0,import_jsx_runtime120.jsx)(import_jsx_runtime120.Fragment,{children:isZh7?`\u518D\u6309\u4E00\u6B21 ${exitState.keyName} \u9000\u51FA`:`Press ${exitState.keyName} again to exit`}):(0,import_jsx_runtime120.jsx)(ThemedText,{italic:!0,children:isZh7?`${dismissShortcut} \u53D6\u6D88`:`${dismissShortcut} to cancel`})})})]})})}var import_jsx_runtime120,init_HelpV2=__esm({"src/components/HelpV2/HelpV2.tsx"(){init_useExitOnCtrlCDWithKeybindings();init_useShortcutDisplay();init_commands2();init_modalContext();init_useTerminalSize();init_ink();init_useKeybinding();init_uiLocale();init_Pane();init_Tabs();init_Commands();init_General();import_jsx_runtime120=__toESM(require_jsx_runtime());__name(HelpV2,"HelpV2")}});var help_exports={};__export(help_exports,{call:()=>call38});var import_jsx_runtime121,call38,init_help=__esm({"src/commands/help/help.tsx"(){init_HelpV2();import_jsx_runtime121=__toESM(require_jsx_runtime()),call38=__name(async(onDone,{options:{commands}})=>(0,import_jsx_runtime121.jsx)(HelpV2,{commands,onClose:onDone}),"call")}});var help,help_default,init_help2=__esm({"src/commands/help/index.ts"(){help={type:"local-jsx",name:"help",description:"Show help and available commands",load:__name(()=>Promise.resolve().then(()=>(init_help(),help_exports)),"load")},help_default=help}});function IdeAutoConnectDialog({onComplete}){let handleSelect=(0,import_react88.useCallback)(async value=>{let autoConnect=value==="yes";saveGlobalConfig(current=>({...current,autoConnectIde:autoConnect,hasIdeAutoConnectDialogBeenShown:!0})),onComplete()},[onComplete]),isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime122.jsxs)(Dialog,{title:isZh7?"\u662F\u5426\u542F\u7528 IDE \u81EA\u52A8\u8FDE\u63A5?":"Do you wish to enable auto-connect to IDE?",color:"ide",onCancel:onComplete,children:[(0,import_jsx_runtime122.jsx)(Select,{options:[{label:isZh7?"\u662F":"Yes",value:"yes"},{label:isZh7?"\u5426":"No",value:"no"}],onChange:handleSelect,defaultValue:"yes"}),(0,import_jsx_runtime122.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u4E5F\u53EF\u4EE5\u5728 /config \u4E2D\u914D\u7F6E,\u6216\u4F7F\u7528 --ide \u9009\u9879":"You can also configure this in /config or with the --ide flag"})]})}function shouldShowAutoConnectDialog(){let config3=getGlobalConfig();return!isSupportedTerminal()&&config3.autoConnectIde!==!0&&config3.hasIdeAutoConnectDialogBeenShown!==!0}function IdeDisableAutoConnectDialog({onComplete}){let handleSelect=(0,import_react88.useCallback)(value=>{let disableAutoConnect=value==="yes";disableAutoConnect&&saveGlobalConfig(current=>({...current,autoConnectIde:!1})),onComplete(disableAutoConnect)},[onComplete]),handleCancel=(0,import_react88.useCallback)(()=>{onComplete(!1)},[onComplete]),isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime122.jsx)(Dialog,{title:isZh7?"\u662F\u5426\u7981\u7528 IDE \u81EA\u52A8\u8FDE\u63A5?":"Do you wish to disable auto-connect to IDE?",subtitle:isZh7?"\u4E5F\u53EF\u4EE5\u5728 /config \u4E2D\u914D\u7F6E":"You can also configure this in /config",onCancel:handleCancel,color:"ide",children:(0,import_jsx_runtime122.jsx)(Select,{options:[{label:isZh7?"\u5426":"No",value:"no"},{label:isZh7?"\u662F":"Yes",value:"yes"}],onChange:handleSelect,defaultValue:"no"})})}function shouldShowDisableAutoConnectDialog(){let config3=getGlobalConfig();return!isSupportedTerminal()&&config3.autoConnectIde===!0}var import_react88,import_jsx_runtime122,init_IdeAutoConnectDialog=__esm({"src/components/IdeAutoConnectDialog.tsx"(){import_react88=__toESM(require_react());init_ink();init_config11();init_ide();init_uiLocale();init_CustomSelect();init_Dialog();import_jsx_runtime122=__toESM(require_jsx_runtime());__name(IdeAutoConnectDialog,"IdeAutoConnectDialog");__name(shouldShowAutoConnectDialog,"shouldShowAutoConnectDialog");__name(IdeDisableAutoConnectDialog,"IdeDisableAutoConnectDialog");__name(shouldShowDisableAutoConnectDialog,"shouldShowDisableAutoConnectDialog")}});var ide_exports={};__export(ide_exports,{call:()=>call39,formatWorkspaceFolders:()=>formatWorkspaceFolders});import*as path25 from"path";function IDEScreen({availableIDEs,unavailableIDEs,selectedIDE,onClose,onSelect}){let[selectedValue,setSelectedValue]=(0,import_react89.useState)(selectedIDE?.port?.toString()??"None"),[showAutoConnectDialog,setShowAutoConnectDialog]=(0,import_react89.useState)(!1),[showDisableAutoConnectDialog,setShowDisableAutoConnectDialog]=(0,import_react89.useState)(!1),handleSelectIDE=(0,import_react89.useCallback)(value=>{value!=="None"&&shouldShowAutoConnectDialog()?setShowAutoConnectDialog(!0):value==="None"&&shouldShowDisableAutoConnectDialog()?setShowDisableAutoConnectDialog(!0):onSelect(availableIDEs.find(ide2=>ide2.port===parseInt(value)))},[availableIDEs,onSelect]),ideCounts=availableIDEs.reduce((acc,ide2)=>(acc[ide2.name]=(acc[ide2.name]||0)+1,acc),{}),options=availableIDEs.map(ide2=>{let showWorkspace=(ideCounts[ide2.name]||0)>1&&ide2.workspaceFolders.length>0;return{label:ide2.name,value:ide2.port.toString(),description:showWorkspace?formatWorkspaceFolders(ide2.workspaceFolders):void 0}}).concat([{label:"None",value:"None",description:void 0}]);return showAutoConnectDialog?(0,import_jsx_runtime123.jsx)(IdeAutoConnectDialog,{onComplete:()=>handleSelectIDE(selectedValue)}):showDisableAutoConnectDialog?(0,import_jsx_runtime123.jsx)(IdeDisableAutoConnectDialog,{onComplete:()=>{onSelect(void 0)}}):(0,import_jsx_runtime123.jsx)(Dialog,{title:"Select IDE",subtitle:"Connect to an IDE for integrated development features.",onCancel:onClose,color:"ide",children:(0,import_jsx_runtime123.jsxs)(ThemedBox_default,{flexDirection:"column",children:[availableIDEs.length===0&&(0,import_jsx_runtime123.jsx)(ThemedText,{dimColor:!0,children:isSupportedJetBrainsTerminal()?`No available IDEs detected. Please install the plugin and restart your IDE:
6767
6767
  https://docs.\u0063laude.com/s/claude-code-jetbrains`:"No available IDEs detected. Make sure your IDE has the Clavue extension or plugin installed and is running."}),availableIDEs.length!==0&&(0,import_jsx_runtime123.jsx)(Select,{defaultValue:selectedValue,defaultFocusValue:selectedValue,options,onChange:value=>{setSelectedValue(value),handleSelectIDE(value)}}),availableIDEs.length!==0&&availableIDEs.some(ide2=>ide2.name==="VS Code"||ide2.name==="Visual Studio Code")&&(0,import_jsx_runtime123.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime123.jsx)(ThemedText,{color:"warning",children:"Note: Only one Clavue instance can be connected to VS Code at a time."})}),availableIDEs.length!==0&&!isSupportedTerminal()&&(0,import_jsx_runtime123.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime123.jsx)(ThemedText,{dimColor:!0,children:"Tip: You can enable auto-connect to IDE in /config or with the --ide flag"})}),unavailableIDEs.length>0&&(0,import_jsx_runtime123.jsxs)(ThemedBox_default,{marginTop:1,flexDirection:"column",children:[(0,import_jsx_runtime123.jsxs)(ThemedText,{dimColor:!0,children:["Found ",unavailableIDEs.length," other running IDE(s). However, their workspace/project directories do not match the current cwd."]}),(0,import_jsx_runtime123.jsx)(ThemedBox_default,{marginTop:1,flexDirection:"column",children:unavailableIDEs.map((ide2,index)=>(0,import_jsx_runtime123.jsx)(ThemedBox_default,{paddingLeft:3,children:(0,import_jsx_runtime123.jsxs)(ThemedText,{dimColor:!0,children:["\u2022 ",ide2.name,": ",formatWorkspaceFolders(ide2.workspaceFolders)]})},index))})]})]})})}async function findCurrentIDE(availableIDEs,dynamicMcpConfig){let currentConfig=dynamicMcpConfig?.ide;if(!currentConfig||currentConfig.type!=="sse-ide"&&currentConfig.type!=="ws-ide")return null;for(let ide2 of availableIDEs)if(ide2.url===currentConfig.url)return ide2;return null}function IDEOpenSelection({availableIDEs,onSelectIDE,onDone}){let[selectedValue,setSelectedValue]=(0,import_react89.useState)(availableIDEs[0]?.port?.toString()??""),handleSelectIDE=(0,import_react89.useCallback)(value=>{let selectedIDE=availableIDEs.find(ide2=>ide2.port===parseInt(value));onSelectIDE(selectedIDE)},[availableIDEs,onSelectIDE]),options=availableIDEs.map(ide2=>({label:ide2.name,value:ide2.port.toString()}));function handleCancel(){onDone("IDE selection cancelled",{display:"system"})}return __name(handleCancel,"handleCancel"),(0,import_jsx_runtime123.jsx)(Dialog,{title:"Select an IDE to open the project",onCancel:handleCancel,color:"ide",children:(0,import_jsx_runtime123.jsx)(Select,{defaultValue:selectedValue,defaultFocusValue:selectedValue,options,onChange:value=>{setSelectedValue(value),handleSelectIDE(value)}})})}function RunningIDESelector({runningIDEs,onSelectIDE,onDone}){let[selectedValue,setSelectedValue]=(0,import_react89.useState)(runningIDEs[0]??""),handleSelectIDE=(0,import_react89.useCallback)(value=>{onSelectIDE(value)},[onSelectIDE]),options=runningIDEs.map(ide2=>({label:toIDEDisplayName(ide2),value:ide2}));function handleCancel(){onDone("IDE selection cancelled",{display:"system"})}return __name(handleCancel,"handleCancel"),(0,import_jsx_runtime123.jsx)(Dialog,{title:"Select IDE to install extension",onCancel:handleCancel,color:"ide",children:(0,import_jsx_runtime123.jsx)(Select,{defaultFocusValue:selectedValue,options,onChange:value=>{setSelectedValue(value),handleSelectIDE(value)}})})}function InstallOnMount({ide:ide2,onInstall}){return(0,import_react89.useEffect)(()=>{onInstall(ide2)},[ide2,onInstall]),null}async function call39(onDone,context2,args){logEvent("tengu_ext_ide_command",{});let{options:{dynamicMcpConfig},onChangeDynamicMcpConfig}=context2;if(args?.trim()==="open"){let worktreeSession=getCurrentWorktreeSession(),targetPath=worktreeSession?worktreeSession.worktreePath:getCwd(),availableIDEs2=(await detectIDEs(!0)).filter(ide2=>ide2.isValid);return availableIDEs2.length===0?(onDone("No IDEs with Clavue extension detected."),null):(0,import_jsx_runtime123.jsx)(IDEOpenSelection,{availableIDEs:availableIDEs2,onSelectIDE:async selectedIDE=>{if(!selectedIDE){onDone("No IDE selected.");return}if(selectedIDE.name.toLowerCase().includes("vscode")||selectedIDE.name.toLowerCase().includes("cursor")||selectedIDE.name.toLowerCase().includes("windsurf")){let{code}=await execFileNoThrow("code",[targetPath]);onDone(code===0?`Opened ${worktreeSession?"worktree":"project"} in ${source_default.bold(selectedIDE.name)}`:`Failed to open in ${selectedIDE.name}. Try opening manually: ${targetPath}`)}else isSupportedJetBrainsTerminal()?onDone(`Please open the ${worktreeSession?"worktree":"project"} manually in ${source_default.bold(selectedIDE.name)}: ${targetPath}`):onDone(`Please open the ${worktreeSession?"worktree":"project"} manually in ${source_default.bold(selectedIDE.name)}: ${targetPath}`)},onDone:()=>{onDone("Exited without opening IDE",{display:"system"})}})}let detectedIDEs=await detectIDEs(!0);if(detectedIDEs.length===0&&context2.onInstallIDEExtension&&!isSupportedTerminal()){let runningIDEs=await detectRunningIDEs(),onInstall=__name(ide2=>{context2.onInstallIDEExtension&&(context2.onInstallIDEExtension(ide2),isJetBrainsIde(ide2)?onDone(`Installed plugin to ${source_default.bold(toIDEDisplayName(ide2))}
6768
6768
  Please ${source_default.bold("restart your IDE")} completely for it to take effect`):onDone(`Installed extension to ${source_default.bold(toIDEDisplayName(ide2))}`))},"onInstall");if(runningIDEs.length>1)return(0,import_jsx_runtime123.jsx)(RunningIDESelector,{runningIDEs,onSelectIDE:onInstall,onDone:()=>{onDone("No IDE selected.",{display:"system"})}});if(runningIDEs.length===1)return(0,import_jsx_runtime123.jsx)(InstallOnMount,{ide:runningIDEs[0],onInstall})}let availableIDEs=detectedIDEs.filter(ide2=>ide2.isValid),unavailableIDEs=detectedIDEs.filter(ide2=>!ide2.isValid),currentIDE=await findCurrentIDE(availableIDEs,dynamicMcpConfig);return(0,import_jsx_runtime123.jsx)(IDECommandFlow,{availableIDEs,unavailableIDEs,currentIDE,dynamicMcpConfig,onChangeDynamicMcpConfig,onDone})}function IDECommandFlow({availableIDEs,unavailableIDEs,currentIDE,dynamicMcpConfig,onChangeDynamicMcpConfig,onDone}){let[connectingIDE,setConnectingIDE]=(0,import_react89.useState)(null),ideClient=useAppState(s2=>s2.mcp.clients.find(c4=>c4.name==="ide")),setAppState=useSetAppState(),isFirstCheckRef=(0,import_react89.useRef)(!0);(0,import_react89.useEffect)(()=>{if(connectingIDE){if(isFirstCheckRef.current){isFirstCheckRef.current=!1;return}!ideClient||ideClient.type==="pending"||(ideClient.type==="connected"?onDone(`Connected to ${connectingIDE.name}.`):ideClient.type==="failed"&&onDone(`Failed to connect to ${connectingIDE.name}.`))}},[ideClient,connectingIDE,onDone]),(0,import_react89.useEffect)(()=>{if(!connectingIDE)return;let timer2=setTimeout(onDone,IDE_CONNECTION_TIMEOUT_MS,`Connection to ${connectingIDE.name} timed out.`);return()=>clearTimeout(timer2)},[connectingIDE,onDone]);let handleSelectIDE=(0,import_react89.useCallback)(selectedIDE=>{if(!onChangeDynamicMcpConfig){onDone("Error connecting to IDE.");return}let newConfig={...dynamicMcpConfig||{}};if(currentIDE&&delete newConfig.ide,!selectedIDE){ideClient&&ideClient.type==="connected"&&currentIDE&&(ideClient.client.onclose=()=>{},clearServerCache("ide",ideClient.config),setAppState(prev=>({...prev,mcp:{...prev.mcp,clients:prev.mcp.clients.filter(c4=>c4.name!=="ide"),tools:prev.mcp.tools.filter(t8=>!t8.name?.startsWith("mcp__ide__")),commands:prev.mcp.commands.filter(c4=>!c4.name?.startsWith("mcp__ide__"))}}))),onChangeDynamicMcpConfig(newConfig),onDone(currentIDE?`Disconnected from ${currentIDE.name}.`:"No IDE selected.");return}let url3=selectedIDE.url;newConfig.ide={type:url3.startsWith("ws:")?"ws-ide":"sse-ide",url:url3,ideName:selectedIDE.name,authToken:selectedIDE.authToken,ideRunningInWindows:selectedIDE.ideRunningInWindows,scope:"dynamic"},isFirstCheckRef.current=!0,setConnectingIDE(selectedIDE),onChangeDynamicMcpConfig(newConfig)},[dynamicMcpConfig,currentIDE,ideClient,setAppState,onChangeDynamicMcpConfig,onDone]);return connectingIDE?(0,import_jsx_runtime123.jsxs)(ThemedText,{dimColor:!0,children:["Connecting to ",connectingIDE.name,"\u2026"]}):(0,import_jsx_runtime123.jsx)(IDEScreen,{availableIDEs,unavailableIDEs,selectedIDE:currentIDE,onClose:()=>onDone("IDE selection cancelled",{display:"system"}),onSelect:handleSelectIDE})}function formatWorkspaceFolders(folders,maxLength=100){if(folders.length===0)return"";let cwd6=getCwd(),foldersToShow=folders.slice(0,2),hasMore=folders.length>2,ellipsisOverhead=hasMore?3:0,separatorOverhead=(foldersToShow.length-1)*2,availableLength=maxLength-separatorOverhead-ellipsisOverhead,maxLengthPerPath=Math.floor(availableLength/foldersToShow.length),cwdNFC=cwd6.normalize("NFC"),result2=foldersToShow.map(folder=>{let folderNFC=folder.normalize("NFC");return folderNFC.startsWith(cwdNFC+path25.sep)&&(folder=folderNFC.slice(cwdNFC.length+1)),folder.length<=maxLengthPerPath?folder:"\u2026"+folder.slice(-(maxLengthPerPath-1))}).join(", ");return hasMore&&(result2+=", \u2026"),result2}var import_react89,import_jsx_runtime123,IDE_CONNECTION_TIMEOUT_MS,init_ide2=__esm({"src/commands/ide/ide.tsx"(){init_source();import_react89=__toESM(require_react());init_analytics();init_CustomSelect();init_Dialog();init_IdeAutoConnectDialog();init_ink();init_client7();init_AppState();init_cwd2();init_execFileNoThrow();init_ide();init_worktree();import_jsx_runtime123=__toESM(require_jsx_runtime());__name(IDEScreen,"IDEScreen");__name(findCurrentIDE,"findCurrentIDE");__name(IDEOpenSelection,"IDEOpenSelection");__name(RunningIDESelector,"RunningIDESelector");__name(InstallOnMount,"InstallOnMount");__name(call39,"call");IDE_CONNECTION_TIMEOUT_MS=35e3;__name(IDECommandFlow,"IDECommandFlow");__name(formatWorkspaceFolders,"formatWorkspaceFolders")}});var ide,ide_default,init_ide3=__esm({"src/commands/ide/index.ts"(){ide={type:"local-jsx",name:"ide",description:"Manage IDE integrations and show status",argumentHint:"[open]",load:__name(()=>Promise.resolve().then(()=>(init_ide2(),ide_exports)),"load")},ide_default=ide}});import{existsSync as existsSync34,readFileSync as readFileSync34,readdirSync as readdirSync13,statSync as statSync13}from"node:fs";import{join as join155}from"node:path";function normalizeRunTag(raw){return String(raw||"").trim().replace(/[^\w.-]+/g,"-").replace(/^-+|-+$/g,"")}function countLines3(text3){return text3?text3.replace(/\s+$/,"").split(/\r?\n/).length:0}function readIfExists(path36){try{return existsSync34(path36)?readFileSync34(path36,"utf8"):null}catch{return null}}function findClavueMd(cwd6){let candidates=[join155(cwd6,"clavue.md"),join155(cwd6,".clavue","clavue.md")];for(let p of candidates)if(existsSync34(p))return p;return null}function findAgentsMd(cwd6){for(let name of["AGENTS.md","Agents.md"]){let p=join155(cwd6,name);if(existsSync34(p))return p}return null}function countRules(cwd6){let dir=join155(cwd6,".clavue","rules");try{return readdirSync13(dir).filter(n4=>n4.endsWith(".md")).length}catch{return 0}}function scoreInitLedger(cwd6,runTag,mode="default"){let tag2=normalizeRunTag(runTag),m3=mode==="full"?"full":mode==="diagnose"?"diagnose":"default",reasons=[];if(m3==="diagnose")return{runTag:tag2,mode:m3,clavuePath:findClavueMd(cwd6),agentsPath:findAgentsMd(cwd6),clavueLines:0,agentsLines:0,rulesCount:countRules(cwd6),hasClavueHeader:!1,hasAgentsHeader:!1,claudeMdTouchedRisk:!1,complete:!0,reasons:[]};tag2||reasons.push("run_tag is empty");let clavuePath=findClavueMd(cwd6),agentsPath=findAgentsMd(cwd6),clavueRaw=clavuePath?readIfExists(clavuePath):null,agentsRaw=agentsPath?readIfExists(agentsPath):null,clavueLines=clavueRaw?countLines3(clavueRaw):0,agentsLines=agentsRaw?countLines3(agentsRaw):0,hasClavueHeader=!!clavueRaw&&/^#\s*clavue\.md\b/im.test(clavueRaw),hasAgentsHeader=!!agentsRaw&&(/^#\s*Repository Guidelines\b/im.test(agentsRaw)||/^#\s*AGENTS\.md\b/im.test(agentsRaw)),rulesCount=countRules(cwd6),claudeMdTouchedRisk=!1,claudePath=join155(cwd6,"\u0043LAUDE.md");if(existsSync34(claudePath)&&clavuePath)try{let claudeM=statSync13(claudePath).mtimeMs,clavueM=statSync13(clavuePath).mtimeMs;claudeM>=clavueM-2e3&&(claudeMdTouchedRisk=!0)}catch{}!clavuePath||!clavueRaw?reasons.push("missing clavue.md (L1 runtime briefing)"):(hasClavueHeader||reasons.push("clavue.md missing required `# clavue.md` header"),clavueLines>CLAVUE_MD_HARD_CEILING_LINES&&reasons.push(`clavue.md has ${clavueLines} lines (hard ceiling ${CLAVUE_MD_HARD_CEILING_LINES}; move bulk to .clavue/rules/)`),clavueLines<8&&reasons.push("clavue.md suspiciously short (<8 lines) \u2014 likely incomplete")),!agentsPath||!agentsRaw?reasons.push("missing AGENTS.md portable export"):hasAgentsHeader?agentsLines<8&&reasons.push("AGENTS.md suspiciously short (<8 lines)"):reasons.push("AGENTS.md missing Repository Guidelines / AGENTS.md header"),m3==="full"&&rulesCount<1&&reasons.push("full mode expects \u22651 topic file under .clavue/rules/ (architecture / build-and-test / \u2026)");let complete=reasons.length===0;return{runTag:tag2,mode:m3,clavuePath,agentsPath,clavueLines,agentsLines,rulesCount,hasClavueHeader,hasAgentsHeader,claudeMdTouchedRisk,complete,reasons:complete?claudeMdTouchedRisk?["advisory: \u0043LAUDE.md mtime near clavue.md \u2014 ensure /init did not Write \u0043LAUDE.md"]:[]:reasons}}function formatInitLedgerScore(score){return score.mode==="diagnose"?`init diagnose COMPLETE for run_tag=${score.runTag||"(none)"} \xB7 read-only`:score.complete?[`init ledger COMPLETE for run_tag=${score.runTag}`,`mode=${score.mode}`,`clavue_lines=${score.clavueLines}/${CLAVUE_MD_HARD_CEILING_LINES}`,`agents_lines=${score.agentsLines}`,`rules=${score.rulesCount}`,score.\u0063laudeMdTouchedRisk?"claude_md_risk=1":null].filter(Boolean).join(" \xB7 "):[`init ledger INCOMPLETE for run_tag=${score.runTag||"(empty)"}`,...score.reasons.map(r2=>`- ${r2}`)].join(`
6769
6769
  `)}var CLAVUE_MD_HARD_CEILING_LINES,CLAVUE_MD_TARGET_LINES,init_initLedger=__esm({"src/commands/init/initLedger.ts"(){CLAVUE_MD_HARD_CEILING_LINES=120,CLAVUE_MD_TARGET_LINES=80;__name(normalizeRunTag,"normalizeRunTag");__name(countLines3,"countLines");__name(readIfExists,"readIfExists");__name(findClavueMd,"findClavueMd");__name(findAgentsMd,"findAgentsMd");__name(countRules,"countRules");__name(scoreInitLedger,"scoreInitLedger");__name(formatInitLedgerScore,"formatInitLedgerScore")}});function stampBlocks(options){let runTag=String(options.runTag||"").trim(),mode=options.mode??"default",card=String(options.operatorCard||"").trim(),cardBlock=card?`
@@ -7939,7 +7939,7 @@ ${displayString}`)))},[writeRaw]),notifyKitty=(0,import_react119.useCallback)(({
7939
7939
  `)}function toolResultSearchText(r2){if(!r2||typeof r2!="object")return typeof r2=="string"?r2:"";let o2=r2;if(typeof o2.stdout=="string"){let err2=typeof o2.stderr=="string"?o2.stderr:"";return o2.stdout+(err2?`
7940
7940
  `+err2:"")}if(o2.file&&typeof o2.file=="object"&&typeof o2.file.content=="string")return o2.file.content;let parts=[];for(let k2 of["content","output","result","text","message"]){let v2=o2[k2];typeof v2=="string"&&parts.push(v2)}for(let k2 of["filenames","lines","results"]){let v2=o2[k2];Array.isArray(v2)&&v2.every(x3=>typeof x3=="string")&&parts.push(v2.join(`
7941
7941
  `))}return parts.join(`
7942
- `)}var SYSTEM_REMINDER_CLOSE,RENDERED_AS_SENTINEL,searchTextCache,init_transcriptSearch=__esm({"src/utils/transcriptSearch.ts"(){init_messages4();SYSTEM_REMINDER_CLOSE="</system-reminder>",RENDERED_AS_SENTINEL=new Set([INTERRUPT_MESSAGE,INTERRUPT_MESSAGE_FOR_TOOL_USE]),searchTextCache=new WeakMap;__name(renderableSearchText,"renderableSearchText");__name(computeSearchText,"computeSearchText");__name(toolUseSearchText,"toolUseSearchText");__name(toolResultSearchText,"toolResultSearchText")}});function getRemoteAwareDisplayPath(appState){let displayBase=process.env.DEMO_VERSION?"/code/claude":getDisplayPath(appState?.isRemoteMode&&appState.remoteCwd?appState.remoteCwd:getCwd()),serverUrl=getDirectConnectServerUrl();return serverUrl?`${displayBase} in ${serverUrl.replace(/^https?:\/\//,"")}`:displayBase}function getLayoutMode(columns){return columns>=70?"horizontal":"compact"}function calculateLayoutDimensions(columns,layoutMode,optimalLeftWidth){if(layoutMode==="horizontal"){let leftWidth=optimalLeftWidth,usedSpace=BORDER_PADDING+CONTENT_PADDING+DIVIDER_WIDTH+leftWidth,availableForRight=columns-usedSpace,rightWidth=Math.max(30,availableForRight),totalWidth2=Math.min(leftWidth+rightWidth+DIVIDER_WIDTH+CONTENT_PADDING,columns-BORDER_PADDING);return totalWidth2<leftWidth+rightWidth+DIVIDER_WIDTH+CONTENT_PADDING&&(rightWidth=totalWidth2-leftWidth-DIVIDER_WIDTH-CONTENT_PADDING),{leftWidth,rightWidth,totalWidth:totalWidth2}}let totalWidth=Math.min(columns-BORDER_PADDING,MAX_LEFT_WIDTH+20);return{leftWidth:totalWidth,rightWidth:totalWidth,totalWidth}}function calculateOptimalLeftWidth(welcomeMessage,truncatedCwd,modelLine){let contentWidth=Math.max(stringWidth(welcomeMessage),stringWidth(APP_BRAND_SUBTITLE),stringWidth(truncatedCwd),stringWidth(modelLine),20);return Math.min(contentWidth+4,MAX_LEFT_WIDTH)}function formatWelcomeMessage(username){return!username||username.length>MAX_USERNAME_LENGTH?"\u51C6\u5907\u597D\u4E86\u5C31\u5F00\u59CB\u3002":`\u6B22\u8FCE\u56DE\u6765\uFF0C${username}\u3002`}function truncatePath(path36,maxLength){if(stringWidth(path36)<=maxLength)return path36;let separator="/",ellipsis="\u2026",ellipsisWidth=1,separatorWidth=1,parts=path36.split(separator),first=parts[0]||"",last2=parts[parts.length-1]||"",firstWidth=stringWidth(first),lastWidth=stringWidth(last2);if(parts.length===1)return truncateToWidth(path36,maxLength);if(first===""&&ellipsisWidth+separatorWidth+lastWidth>=maxLength)return`${separator}${truncateToWidth(last2,Math.max(1,maxLength-separatorWidth))}`;if(first!==""&&ellipsisWidth*2+separatorWidth+lastWidth>=maxLength)return`${ellipsis}${separator}${truncateToWidth(last2,Math.max(1,maxLength-ellipsisWidth-separatorWidth))}`;if(parts.length===2){let availableForFirst=maxLength-ellipsisWidth-separatorWidth-lastWidth;return`${truncateToWidthNoEllipsis(first,availableForFirst)}${ellipsis}${separator}${last2}`}let available=maxLength-firstWidth-lastWidth-ellipsisWidth-2*separatorWidth;if(available<=0){let availableForFirst=Math.max(0,maxLength-lastWidth-ellipsisWidth-2*separatorWidth);return`${truncateToWidthNoEllipsis(first,availableForFirst)}${separator}${ellipsis}${separator}${last2}`}let middleParts=[];for(let i3=parts.length-2;i3>0;i3--){let part=parts[i3];if(part&&stringWidth(part)+separatorWidth<=available)middleParts.unshift(part),available-=stringWidth(part)+separatorWidth;else break}return middleParts.length===0?`${first}${separator}${ellipsis}${separator}${last2}`:`${first}${separator}${ellipsis}${separator}${middleParts.join(separator)}${separator}${last2}`}async function getRecentActivity(){if(cachePromise)return cachePromise;let currentSessionId=getSessionId();return cachePromise=loadMessageLogs(10).then(logs2=>(cachedActivity=logs2.filter(log4=>{if(log4.isSidechain||log4.sessionId===currentSessionId||log4.summary?.includes("I apologize"))return!1;let hasSummary=log4.summary&&log4.summary!=="No prompt",hasFirstPrompt=log4.firstPrompt&&log4.firstPrompt!=="No prompt";return hasSummary||hasFirstPrompt}).slice(0,3),cachedActivity)).catch(()=>(cachedActivity=[],cachedActivity)),cachePromise}function getRecentActivitySync(){return cachedActivity}function getLogoDisplayData(appState){let version3=process.env.DEMO_VERSION??APP_VERSION,cwd6=getRemoteAwareDisplayPath(appState),billingType=isClaudeAISubscriber()?getSubscriptionName():"Usage-based API billing",agentName=getInitialSettings().agent;return{version:version3,cwd:cwd6,billingType,agentName}}function formatModelAndBilling(modelName,billingType,availableWidth){return stringWidth(modelName)+3+stringWidth(billingType)>availableWidth?{shouldSplit:!0,truncatedModel:truncate2(modelName,availableWidth),truncatedBilling:truncate2(billingType,availableWidth)}:{shouldSplit:!1,truncatedModel:truncate2(modelName,Math.max(availableWidth-stringWidth(billingType)-3,10)),truncatedBilling:billingType}}function getRecentReleaseNotesSync(maxItems){if(process.env.USER_TYPE==="ant")return[];let changelog=getStoredChangelogFromMemory();if(!changelog)return[];let parsed;try{parsed=parseChangelog(changelog)}catch{return[]}let allNotes=[],versions=Object.keys(parsed).sort((a2,b3)=>gt2(a2,b3)?-1:1).slice(0,3);for(let version3 of versions){let notes=parsed[version3];notes&&allNotes.push(...notes)}return allNotes.slice(0,maxItems)}var MAX_LEFT_WIDTH,MAX_USERNAME_LENGTH,BORDER_PADDING,DIVIDER_WIDTH,CONTENT_PADDING,cachedActivity,cachePromise,init_logoV2Utils=__esm({"src/utils/logoV2Utils.ts"(){init_state();init_branding();init_stringWidth();init_auth6();init_cwd2();init_file2();init_format();init_releaseNotes();init_semver();init_sessionStorage();init_settings2();MAX_LEFT_WIDTH=50,MAX_USERNAME_LENGTH=20,BORDER_PADDING=4,DIVIDER_WIDTH=1,CONTENT_PADDING=2;__name(getRemoteAwareDisplayPath,"getRemoteAwareDisplayPath");__name(getLayoutMode,"getLayoutMode");__name(calculateLayoutDimensions,"calculateLayoutDimensions");__name(calculateOptimalLeftWidth,"calculateOptimalLeftWidth");__name(formatWelcomeMessage,"formatWelcomeMessage");__name(truncatePath,"truncatePath");cachedActivity=[],cachePromise=null;__name(getRecentActivity,"getRecentActivity");__name(getRecentActivitySync,"getRecentActivitySync");__name(getLogoDisplayData,"getLogoDisplayData");__name(formatModelAndBilling,"formatModelAndBilling");__name(getRecentReleaseNotesSync,"getRecentReleaseNotesSync")}});function Clawd({pose="default"}={}){let frame=POSE_FRAMES[pose];return(0,import_jsx_runtime163.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime163.jsx)(ThemedText,{color:"mascot_body",children:frame.top}),(0,import_jsx_runtime163.jsx)(ThemedText,{color:"mascot_body",children:frame.middle}),(0,import_jsx_runtime163.jsx)(ThemedText,{color:"mascot_body",children:frame.bottom})]})}var import_jsx_runtime163,POSE_FRAMES,init_Clawd=__esm({"src/components/LogoV2/Clawd.tsx"(){init_ink();import_jsx_runtime163=__toESM(require_jsx_runtime()),POSE_FRAMES={default:{top:" \u256D\u2500\u2500\u256E ",middle:" \u2502 \u9F8D \u2502 ",bottom:" \u2570\u2500\u2500\u256F "},"look-left":{top:" \u256D\u2500\u2500\u256E ",middle:" \u2502\u9F8D \u2502 ",bottom:" \u2570\u2500\u2500\u256F "},"look-right":{top:" \u256D\u2500\u2500\u256E ",middle:" \u2502 \u9F8D\u2502 ",bottom:" \u2570\u2500\u2500\u256F "},"arms-up":{top:" \u2571\u256D\u2500\u2500\u256E\u2572 ",middle:" \u2502 \u9F8D \u2502 ",bottom:" \u2570\u2500\u2500\u256F "}};__name(Clawd,"Clawd")}});function calculateFeedWidth(config3){let{title,lines,footer,emptyMessage,customContent}=config3,maxWidth=stringWidth(title);if(customContent!==void 0)maxWidth=Math.max(maxWidth,customContent.width);else if(lines.length===0&&emptyMessage)maxWidth=Math.max(maxWidth,stringWidth(emptyMessage));else{let maxTimestampWidth=Math.max(0,...lines.map(line=>line.timestamp?stringWidth(line.timestamp):0));for(let line of lines){let timestampWidth=maxTimestampWidth>0?maxTimestampWidth:0,lineWidth=stringWidth(line.text)+(timestampWidth>0?timestampWidth+2:0);maxWidth=Math.max(maxWidth,lineWidth)}}return footer&&(maxWidth=Math.max(maxWidth,stringWidth(footer))),maxWidth}function Feed({config:config3,actualWidth}){let{title,lines,footer,emptyMessage,customContent}=config3,gap=" ",maxTimestampWidth=Math.max(0,...lines.map(line=>line.timestamp?stringWidth(line.timestamp):0));return(0,import_jsx_runtime164.jsxs)(ThemedBox_default,{flexDirection:"column",width:actualWidth,children:[(0,import_jsx_runtime164.jsx)(ThemedText,{bold:!0,color:"brand",children:title}),customContent?(0,import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment,{children:[customContent.content,footer&&(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,italic:!0,children:truncate2(footer,actualWidth)})]}):lines.length===0&&emptyMessage?(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,children:truncate2(emptyMessage,actualWidth)}):(0,import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment,{children:[lines.map((line,index)=>{let textWidth=Math.max(10,actualWidth-(maxTimestampWidth>0?maxTimestampWidth+gap.length:0));return(0,import_jsx_runtime164.jsxs)(ThemedText,{children:[maxTimestampWidth>0&&(0,import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment,{children:[(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,children:(line.timestamp||"").padEnd(maxTimestampWidth)}),gap]}),(0,import_jsx_runtime164.jsx)(ThemedText,{children:truncate2(line.text,textWidth)})]},index)}),footer&&(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,italic:!0,children:truncate2(footer,actualWidth)})]})]})}var import_jsx_runtime164,init_Feed=__esm({"src/components/LogoV2/Feed.tsx"(){init_stringWidth2();init_ink();init_format();import_jsx_runtime164=__toESM(require_jsx_runtime());__name(calculateFeedWidth,"calculateFeedWidth");__name(Feed,"Feed")}});function FeedColumn({feeds,maxWidth}){let feedWidths=feeds.map(feed=>calculateFeedWidth(feed)),maxOfAllFeeds=Math.max(...feedWidths),actualWidth=Math.min(maxOfAllFeeds,maxWidth);return(0,import_jsx_runtime165.jsx)(ThemedBox_default,{flexDirection:"column",children:feeds.map((feed,index)=>(0,import_jsx_runtime165.jsxs)(React73.Fragment,{children:[(0,import_jsx_runtime165.jsx)(Feed,{config:feed,actualWidth}),index<feeds.length-1&&(0,import_jsx_runtime165.jsx)(Divider,{color:"brand",width:actualWidth})]},index))})}var React73,import_jsx_runtime165,init_FeedColumn=__esm({"src/components/LogoV2/FeedColumn.tsx"(){React73=__toESM(require_react());init_ink();init_Divider();init_Feed();import_jsx_runtime165=__toESM(require_jsx_runtime());__name(FeedColumn,"FeedColumn")}});async function fetchReferralEligibility(campaign="claude_code_guest_pass"){let{accessToken,orgUUID}=await prepareApiRequest(),headers={...getOAuthHeaders(accessToken),"x-organization-uuid":orgUUID},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/referral/eligibility`;return(await axios_default.get(url3,{headers,params:{campaign},timeout:5e3})).data}async function fetchReferralRedemptions(campaign="claude_code_guest_pass"){let{accessToken,orgUUID}=await prepareApiRequest(),headers={...getOAuthHeaders(accessToken),"x-organization-uuid":orgUUID},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/referral/redemptions`;return(await axios_default.get(url3,{headers,params:{campaign},timeout:1e4})).data}function shouldCheckForPasses(){return!!(getOauthAccountInfo()?.organizationUuid&&isClaudeAISubscriber()&&getSubscriptionType()==="max")}function checkCachedPassesEligibility(){if(!shouldCheckForPasses())return{eligible:!1,needsRefresh:!1,hasCache:!1};let orgId=getOauthAccountInfo()?.organizationUuid;if(!orgId)return{eligible:!1,needsRefresh:!1,hasCache:!1};let cachedEntry=getGlobalConfig().passesEligibilityCache?.[orgId];if(!cachedEntry)return{eligible:!1,needsRefresh:!0,hasCache:!1};let{eligible:eligible2,timestamp}=cachedEntry,needsRefresh=Date.now()-timestamp>CACHE_EXPIRATION_MS;return{eligible:eligible2,needsRefresh,hasCache:!0}}function formatCreditAmount(reward){let symbol2=CURRENCY_SYMBOLS[reward.currency]??`${reward.currency} `,amount=reward.amount_minor_units/100,formatted=amount%1===0?amount.toString():amount.toFixed(2);return`${symbol2}${formatted}`}function getCachedReferrerReward(){let orgId=getOauthAccountInfo()?.organizationUuid;return orgId?getGlobalConfig().passesEligibilityCache?.[orgId]?.referrer_reward??null:null}function getCachedRemainingPasses(){let orgId=getOauthAccountInfo()?.organizationUuid;return orgId?getGlobalConfig().passesEligibilityCache?.[orgId]?.remaining_passes??null:null}async function fetchAndStorePassesEligibility(){if(fetchInProgress)return logForDebugging("Passes: Reusing in-flight eligibility fetch"),fetchInProgress;let orgId=getOauthAccountInfo()?.organizationUuid;return orgId?(fetchInProgress=(async()=>{try{let response=await fetchReferralEligibility(),cacheEntry={...response,timestamp:Date.now()};return saveGlobalConfig(current=>({...current,passesEligibilityCache:{...current.passesEligibilityCache,[orgId]:cacheEntry}})),logForDebugging(`Passes eligibility cached for org ${orgId}: ${response.eligible}`),response}catch(error40){return logForDebugging("Failed to fetch and cache passes eligibility"),logError2(error40),null}finally{fetchInProgress=null}})(),fetchInProgress):null}async function getCachedOrFetchPassesEligibility(){if(!shouldCheckForPasses())return null;let orgId=getOauthAccountInfo()?.organizationUuid;if(!orgId)return null;let cachedEntry=getGlobalConfig().passesEligibilityCache?.[orgId],now3=Date.now();if(!cachedEntry)return logForDebugging("Passes: No cache, fetching eligibility in background (command unavailable this session)"),fetchAndStorePassesEligibility(),null;if(now3-cachedEntry.timestamp>CACHE_EXPIRATION_MS){logForDebugging("Passes: Cache stale, returning cached data and refreshing in background"),fetchAndStorePassesEligibility();let{timestamp:timestamp2,...response2}=cachedEntry;return response2}logForDebugging("Passes: Using fresh cached eligibility data");let{timestamp,...response}=cachedEntry;return response}async function prefetchPassesEligibility(){isEssentialTrafficOnly()||getCachedOrFetchPassesEligibility()}var CACHE_EXPIRATION_MS,fetchInProgress,CURRENCY_SYMBOLS,init_referral=__esm({"src/services/api/referral.ts"(){init_axios2();init_oauth();init_auth6();init_config11();init_debug();init_log3();init_privacyLevel();init_api2();CACHE_EXPIRATION_MS=1440*60*1e3,fetchInProgress=null;__name(fetchReferralEligibility,"fetchReferralEligibility");__name(fetchReferralRedemptions,"fetchReferralRedemptions");__name(shouldCheckForPasses,"shouldCheckForPasses");__name(checkCachedPassesEligibility,"checkCachedPassesEligibility");CURRENCY_SYMBOLS={USD:"$",EUR:"\u20AC",GBP:"\xA3",BRL:"R$",CAD:"CA$",AUD:"A$",NZD:"NZ$",SGD:"S$"};__name(formatCreditAmount,"formatCreditAmount");__name(getCachedReferrerReward,"getCachedReferrerReward");__name(getCachedRemainingPasses,"getCachedRemainingPasses");__name(fetchAndStorePassesEligibility,"fetchAndStorePassesEligibility");__name(getCachedOrFetchPassesEligibility,"getCachedOrFetchPassesEligibility");__name(prefetchPassesEligibility,"prefetchPassesEligibility")}});import{homedir as homedir35}from"os";function createRecentActivityFeed(activities){let lines=activities.map(log4=>{let time3=formatRelativeTimeAgo(log4.modified);return{text:(log4.summary&&log4.summary!=="No prompt"?log4.summary:log4.firstPrompt)||"",timestamp:time3}});return{title:"Recent activity",lines,footer:lines.length>0?"/resume for more":void 0,emptyMessage:"No recent activity"}}function createWhatsNewFeed(releaseNotes2){let lines=releaseNotes2.map(note=>({text:note}));return{title:"What's new",lines,footer:lines.length>0?"/release-notes for more":void 0,emptyMessage:"Check the Clavue changelog for updates"}}function createProjectOnboardingFeed(steps){let lines=steps.filter(({isEnabled:isEnabled2})=>isEnabled2).sort((a2,b3)=>Number(a2.isComplete)-Number(b3.isComplete)).map(({text:text3,isComplete})=>({text:`${isComplete?`${figures_default.tick} `:""}${text3}`})),warningText=getCwd()===homedir35()?"Note: You have launched Clavue in your home directory. For the best experience, launch it in a project directory instead.":void 0;return warningText&&lines.push({text:warningText}),{title:"Tips for getting started",lines}}function createGuestPassesFeed(){let reward=getCachedReferrerReward(),subtitle=reward?`Share Clavue and earn ${formatCreditAmount(reward)} of extra usage`:"Share Clavue with friends";return{title:"3 guest passes",lines:[],customContent:{content:(0,import_jsx_runtime166.jsxs)(import_jsx_runtime166.Fragment,{children:[(0,import_jsx_runtime166.jsx)(ThemedBox_default,{marginY:1,children:(0,import_jsx_runtime166.jsx)(ThemedText,{color:"brand",children:"[\u25C6] [\u25C6] [\u25C6]"})}),(0,import_jsx_runtime166.jsx)(ThemedText,{dimColor:!0,children:subtitle})]}),width:48},footer:"/passes"}}var import_jsx_runtime166,init_feedConfigs=__esm({"src/components/LogoV2/feedConfigs.tsx"(){init_figures();init_ink();init_referral();init_cwd2();init_format();import_jsx_runtime166=__toESM(require_jsx_runtime());__name(createRecentActivityFeed,"createRecentActivityFeed");__name(createWhatsNewFeed,"createWhatsNewFeed");__name(createProjectOnboardingFeed,"createProjectOnboardingFeed");__name(createGuestPassesFeed,"createGuestPassesFeed")}});function OffscreenFreeze({children}){"use no memo";let inVirtualList=(0,import_react120.useContext)(InVirtualListContext),[ref,{isVisible}]=useTerminalViewport(),cached3=(0,import_react120.useRef)(children);return(isVisible||inVirtualList)&&(cached3.current=children),(0,import_jsx_runtime167.jsx)(ThemedBox_default,{ref,children:cached3.current})}var import_react120,import_jsx_runtime167,init_OffscreenFreeze=__esm({"src/components/OffscreenFreeze.tsx"(){import_react120=__toESM(require_react());init_use_terminal_viewport();init_ink();init_messageActions();import_jsx_runtime167=__toESM(require_jsx_runtime());__name(OffscreenFreeze,"OffscreenFreeze")}});function hold(pose,offset,frames){return Array.from({length:frames},()=>({pose,offset}))}function AnimatedClawd(){let{pose,bounceOffset,onClick}=useClawdAnimation();return(0,import_jsx_runtime168.jsx)(ThemedBox_default,{height:CLAWD_HEIGHT,flexDirection:"column",onClick,children:(0,import_jsx_runtime168.jsx)(ThemedBox_default,{marginTop:bounceOffset,flexShrink:0,children:(0,import_jsx_runtime168.jsx)(Clawd,{pose})})})}function useClawdAnimation(){let[reducedMotion]=(0,import_react121.useState)(()=>getInitialSettings().prefersReducedMotion??!1),[frameIndex,setFrameIndex]=(0,import_react121.useState)(-1),sequenceRef=(0,import_react121.useRef)(JUMP_WAVE),onClick=__name(()=>{reducedMotion||frameIndex!==-1||(sequenceRef.current=CLICK_ANIMATIONS[Math.floor(Math.random()*CLICK_ANIMATIONS.length)],setFrameIndex(0))},"onClick");(0,import_react121.useEffect)(()=>{if(frameIndex===-1)return;if(frameIndex>=sequenceRef.current.length){setFrameIndex(-1);return}let timer2=setTimeout(setFrameIndex,FRAME_MS,incrementFrame);return()=>clearTimeout(timer2)},[frameIndex]);let seq=sequenceRef.current,current=frameIndex>=0&&frameIndex<seq.length?seq[frameIndex]:IDLE;return{pose:current.pose,bounceOffset:current.offset,onClick}}var import_react121,import_jsx_runtime168,JUMP_WAVE,LOOK_AROUND,CLICK_ANIMATIONS,IDLE,FRAME_MS,incrementFrame,CLAWD_HEIGHT,init_AnimatedClawd=__esm({"src/components/LogoV2/AnimatedClawd.tsx"(){import_react121=__toESM(require_react());init_ink();init_settings2();init_Clawd();import_jsx_runtime168=__toESM(require_jsx_runtime());__name(hold,"hold");JUMP_WAVE=[...hold("default",1,2),...hold("arms-up",0,3),...hold("default",0,1),...hold("default",1,2),...hold("arms-up",0,3),...hold("default",0,1)],LOOK_AROUND=[...hold("look-right",0,5),...hold("look-left",0,5),...hold("default",0,1)],CLICK_ANIMATIONS=[JUMP_WAVE,LOOK_AROUND],IDLE={pose:"default",offset:0},FRAME_MS=60,incrementFrame=__name(i3=>i3+1,"incrementFrame"),CLAWD_HEIGHT=3;__name(AnimatedClawd,"AnimatedClawd");__name(useClawdAnimation,"useClawdAnimation")}});function BrandWordmark({version:version3,welcomeMessage,align="left",showVersion=!0}){return(0,import_jsx_runtime169.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:align==="center"?"center":"flex-start",children:[(0,import_jsx_runtime169.jsxs)(ThemedText,{children:[(0,import_jsx_runtime169.jsx)(ThemedText,{color:"inactive",children:"/"}),(0,import_jsx_runtime169.jsx)(ThemedText,{color:"brand",bold:!0,children:APP_NAME}),showVersion&&version3?(0,import_jsx_runtime169.jsx)(ThemedText,{dimColor:!0,children:` v${version3}`}):null]}),(0,import_jsx_runtime169.jsx)(ThemedText,{color:"brand",children:APP_BRAND_SUBTITLE}),welcomeMessage?(0,import_jsx_runtime169.jsx)(ThemedText,{dimColor:!0,children:welcomeMessage}):null]})}var import_jsx_runtime169,init_BrandWordmark=__esm({"src/components/LogoV2/BrandWordmark.tsx"(){init_ink();init_branding();import_jsx_runtime169=__toESM(require_jsx_runtime());__name(BrandWordmark,"BrandWordmark")}});function resetIfPassesRefreshed(){let remaining=getCachedRemainingPasses();if(remaining==null||remaining<=0)return;let lastSeen=getGlobalConfig().passesLastSeenRemaining??0;remaining>lastSeen&&saveGlobalConfig(prev=>({...prev,passesUpsellSeenCount:0,hasVisitedPasses:!1,passesLastSeenRemaining:remaining}))}function shouldShowGuestPassesUpsell(){let{eligible:eligible2,hasCache}=checkCachedPassesEligibility();if(!eligible2||!hasCache)return!1;resetIfPassesRefreshed();let config3=getGlobalConfig();return!((config3.passesUpsellSeenCount??0)>=3||config3.hasVisitedPasses)}function useShowGuestPassesUpsell(){let[show]=(0,import_react122.useState)(()=>shouldShowGuestPassesUpsell());return show}function incrementGuestPassesSeenCount(){let newCount=0;saveGlobalConfig(prev=>(newCount=(prev.passesUpsellSeenCount??0)+1,{...prev,passesUpsellSeenCount:newCount})),logEvent("tengu_guest_passes_upsell_shown",{seen_count:newCount})}function GuestPassesUpsell(){let reward=getCachedReferrerReward();return(0,import_jsx_runtime170.jsxs)(ThemedText,{dimColor:!0,children:[(0,import_jsx_runtime170.jsx)(ThemedText,{color:"brand",children:"[\u25C6]"})," ",(0,import_jsx_runtime170.jsx)(ThemedText,{color:"brand",children:"[\u25C6]"})," ",(0,import_jsx_runtime170.jsx)(ThemedText,{color:"brand",children:"[\u25C6]"})," \xB7"," ",reward?`Share Clavue and earn ${formatCreditAmount(reward)} of extra usage \xB7 /passes`:"3 guest passes at /passes"]})}var import_react122,import_jsx_runtime170,init_GuestPassesUpsell=__esm({"src/components/LogoV2/GuestPassesUpsell.tsx"(){import_react122=__toESM(require_react());init_ink();init_analytics();init_referral();init_config11();import_jsx_runtime170=__toESM(require_jsx_runtime());__name(resetIfPassesRefreshed,"resetIfPassesRefreshed");__name(shouldShowGuestPassesUpsell,"shouldShowGuestPassesUpsell");__name(useShowGuestPassesUpsell,"useShowGuestPassesUpsell");__name(incrementGuestPassesSeenCount,"incrementGuestPassesSeenCount");__name(GuestPassesUpsell,"GuestPassesUpsell")}});function CondensedLogo(){let{columns}=useTerminalSize(),agent=useAppState(s2=>s2.agent),effortValue=useAppState(s2=>s2.effortValue),remoteCwd=useAppState(s2=>s2.remoteCwd),model=useMainLoopModel(),modelDisplayName=renderModelSetting(model),{version:version3,cwd:cwd6,billingType,agentName:agentNameFromSettings}=getLogoDisplayData({isRemoteMode:getIsRemoteMode(),remoteCwd}),agentName=agent??agentNameFromSettings,showGuestPassesUpsell=useShowGuestPassesUpsell(),showOverageCreditUpsell=useShowOverageCreditUpsell();(0,import_react123.useEffect)(()=>{showGuestPassesUpsell&&incrementGuestPassesSeenCount()},[showGuestPassesUpsell]),(0,import_react123.useEffect)(()=>{showOverageCreditUpsell&&!showGuestPassesUpsell&&incrementOverageCreditUpsellSeenCount()},[showOverageCreditUpsell,showGuestPassesUpsell]);let textWidth=Math.max(columns-15,20),truncatedVersion=truncate2(version3,Math.max(textWidth-13,6)),effortSuffix=getEffortSuffix(model,effortValue),{shouldSplit,truncatedModel,truncatedBilling}=formatModelAndBilling(modelDisplayName+effortSuffix,billingType,textWidth),cwdAvailableWidth=agentName?textWidth-1-stringWidth(agentName)-3:textWidth,truncatedCwd=truncatePath(cwd6,Math.max(cwdAvailableWidth,10)),locationLine=agentName?`@${agentName} \xB7 ${truncatedCwd}`:truncatedCwd;return(0,import_jsx_runtime171.jsx)(OffscreenFreeze,{children:(0,import_jsx_runtime171.jsxs)(ThemedBox_default,{flexDirection:"row",gap:2,alignItems:"center",children:[isFullscreenEnvEnabled()?(0,import_jsx_runtime171.jsx)(AnimatedClawd,{}):(0,import_jsx_runtime171.jsx)(Clawd,{}),(0,import_jsx_runtime171.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime171.jsx)(BrandWordmark,{version:truncatedVersion}),shouldSplit?(0,import_jsx_runtime171.jsxs)(import_jsx_runtime171.Fragment,{children:[(0,import_jsx_runtime171.jsx)(ThemedText,{dimColor:!0,children:truncatedModel}),(0,import_jsx_runtime171.jsx)(ThemedText,{dimColor:!0,children:truncatedBilling})]}):(0,import_jsx_runtime171.jsxs)(ThemedText,{dimColor:!0,children:[truncatedModel," \xB7 ",truncatedBilling]}),(0,import_jsx_runtime171.jsx)(ThemedText,{dimColor:!0,children:locationLine}),showGuestPassesUpsell&&(0,import_jsx_runtime171.jsx)(GuestPassesUpsell,{}),!showGuestPassesUpsell&&showOverageCreditUpsell&&(0,import_jsx_runtime171.jsx)(OverageCreditUpsell,{maxWidth:textWidth,twoLine:!0})]})]})})}var import_react123,import_jsx_runtime171,init_CondensedLogo=__esm({"src/components/LogoV2/CondensedLogo.tsx"(){import_react123=__toESM(require_react());init_state();init_useMainLoopModel();init_useTerminalSize();init_stringWidth2();init_ink();init_AppState();init_effort4();init_format();init_fullscreen();init_logoV2Utils();init_model3();init_OffscreenFreeze();init_AnimatedClawd();init_BrandWordmark();init_Clawd();init_GuestPassesUpsell();init_OverageCreditUpsell();import_jsx_runtime171=__toESM(require_jsx_runtime());__name(CondensedLogo,"CondensedLogo")}});function EmergencyTip(){let tip=(0,import_react124.useMemo)(getTipOfFeed,[]),lastShownTip=(0,import_react124.useMemo)(()=>getGlobalConfig().lastShownEmergencyTip,[]),shouldShow=tip.tip&&tip.tip!==lastShownTip;return(0,import_react124.useEffect)(()=>{shouldShow&&saveGlobalConfig(current=>current.lastShownEmergencyTip===tip.tip?current:{...current,lastShownEmergencyTip:tip.tip})},[shouldShow,tip.tip]),shouldShow?(0,import_jsx_runtime172.jsx)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:(0,import_jsx_runtime172.jsx)(ThemedText,{...tip.color==="warning"?{color:"warning"}:tip.color==="error"?{color:"error"}:{dimColor:!0},children:tip.tip})}):null}function getTipOfFeed(){return getDynamicConfig_CACHED_MAY_BE_STALE(CONFIG_NAME,DEFAULT_TIP)}var import_react124,import_jsx_runtime172,CONFIG_NAME,DEFAULT_TIP,init_EmergencyTip=__esm({"src/components/LogoV2/EmergencyTip.tsx"(){import_react124=__toESM(require_react());init_ink();init_growthbook();init_config11();import_jsx_runtime172=__toESM(require_jsx_runtime()),CONFIG_NAME="tengu-top-of-feed-tip";__name(EmergencyTip,"EmergencyTip");DEFAULT_TIP={tip:"",color:"dim"};__name(getTipOfFeed,"getTipOfFeed")}});function AnimatedAsterisk({char=TEARDROP_ASTERISK}){let[reducedMotion]=(0,import_react125.useState)(()=>getInitialSettings().prefersReducedMotion??!1),[done,setDone]=(0,import_react125.useState)(reducedMotion),startTimeRef=(0,import_react125.useRef)(null),[ref,time3]=useAnimationFrame(done?null:50);if((0,import_react125.useEffect)(()=>{if(done)return;let t8=setTimeout(setDone,TOTAL_ANIMATION_MS,!0);return()=>clearTimeout(t8)},[done]),done)return(0,import_jsx_runtime173.jsx)(ThemedBox_default,{ref,children:(0,import_jsx_runtime173.jsx)(ThemedText,{color:SETTLED_GREY,children:char})});startTimeRef.current===null&&(startTimeRef.current=time3);let hue=(time3-startTimeRef.current)/SWEEP_DURATION_MS*360%360;return(0,import_jsx_runtime173.jsx)(ThemedBox_default,{ref,children:(0,import_jsx_runtime173.jsx)(ThemedText,{color:toRGBColor(hueToRgb(hue)),children:char})})}var import_react125,import_jsx_runtime173,SWEEP_DURATION_MS,SWEEP_COUNT,TOTAL_ANIMATION_MS,SETTLED_GREY,init_AnimatedAsterisk=__esm({"src/components/LogoV2/AnimatedAsterisk.tsx"(){import_react125=__toESM(require_react());init_figures2();init_ink();init_settings2();init_utils7();import_jsx_runtime173=__toESM(require_jsx_runtime()),SWEEP_DURATION_MS=1500,SWEEP_COUNT=2,TOTAL_ANIMATION_MS=SWEEP_DURATION_MS*SWEEP_COUNT,SETTLED_GREY=toRGBColor({r:153,g:153,b:153});__name(AnimatedAsterisk,"AnimatedAsterisk")}});function shouldShowOpus1mMergeNotice(){return isOpus1mMergeEnabled()&&(getGlobalConfig().opus1mMergeNoticeSeenCount??0)<MAX_SHOW_COUNT}function Opus1mMergeNotice(){let[show]=(0,import_react126.useState)(shouldShowOpus1mMergeNotice);return(0,import_react126.useEffect)(()=>{if(!show)return;let newCount=(getGlobalConfig().opus1mMergeNoticeSeenCount??0)+1;saveGlobalConfig(prev=>(prev.opus1mMergeNoticeSeenCount??0)>=newCount?prev:{...prev,opus1mMergeNoticeSeenCount:newCount})},[show]),show?(0,import_jsx_runtime174.jsxs)(ThemedBox_default,{paddingLeft:2,children:[(0,import_jsx_runtime174.jsx)(AnimatedAsterisk,{char:UP_ARROW}),(0,import_jsx_runtime174.jsxs)(ThemedText,{dimColor:!0,children:[" ","Clavue Opus now includes a 1M context window"]})]}):null}var import_react126,import_jsx_runtime174,MAX_SHOW_COUNT,init_Opus1mMergeNotice=__esm({"src/components/LogoV2/Opus1mMergeNotice.tsx"(){import_react126=__toESM(require_react());init_figures2();init_ink();init_config11();init_model3();init_AnimatedAsterisk();import_jsx_runtime174=__toESM(require_jsx_runtime()),MAX_SHOW_COUNT=6;__name(shouldShowOpus1mMergeNotice,"shouldShowOpus1mMergeNotice");__name(Opus1mMergeNotice,"Opus1mMergeNotice")}});function VoiceModeNotice(){return null}var import_react127,import_jsx_runtime175,init_VoiceModeNotice=__esm({"src/components/LogoV2/VoiceModeNotice.tsx"(){import_react127=__toESM(require_react());init_ink();init_config11();init_settings2();init_uiLocale();init_voiceModeEnabled();init_AnimatedAsterisk();init_Opus1mMergeNotice();import_jsx_runtime175=__toESM(require_jsx_runtime());__name(VoiceModeNotice,"VoiceModeNotice")}});function LogoV2(){let activities=getRecentActivitySync(),username=getGlobalConfig().oauthAccount?.displayName??"",{columns}=useTerminalSize(),showOnboarding=shouldShowProjectOnboarding(),showSandboxStatus=SandboxManager.isSandboxingEnabled(),showGuestPassesUpsell=useShowGuestPassesUpsell(),showOverageCreditUpsell=useShowOverageCreditUpsell(),agent=useAppState(s2=>s2.agent),effortValue=useAppState(s2=>s2.effortValue),remoteCwd=useAppState(s2=>s2.remoteCwd),remoteSessionUrl=useAppState(s2=>s2.remoteSessionUrl),config3=getGlobalConfig(),changelog;try{changelog=getRecentReleaseNotesSync(3)}catch{changelog=[]}let[announcement]=(0,import_react128.useState)(()=>{let announcements=getInitialSettings().companyAnnouncements;if(!(!announcements||announcements.length===0))return config3.numStartups===1?announcements[0]:announcements[Math.floor(Math.random()*announcements.length)]}),{hasReleaseNotes}=checkForReleaseNotesSync(config3.lastReleaseNotesSeen);(0,import_react128.useEffect)(()=>{getGlobalConfig().lastReleaseNotesSeen!=="11.3.12"&&(saveGlobalConfig(current=>current.lastReleaseNotesSeen==="11.3.12"?current:{...current,lastReleaseNotesSeen:"11.3.12"}),showOnboarding&&incrementProjectOnboardingSeenCount())},[config3,showOnboarding]);let isCondensedMode=!hasReleaseNotes&&!showOnboarding&&!isEnvTruthy2(process.env.CLAUDE_CODE_FORCE_FULL_LOGO);(0,import_react128.useEffect)(()=>{showGuestPassesUpsell&&!showOnboarding&&!isCondensedMode&&incrementGuestPassesSeenCount()},[showGuestPassesUpsell,showOnboarding,isCondensedMode]),(0,import_react128.useEffect)(()=>{showOverageCreditUpsell&&!showOnboarding&&!showGuestPassesUpsell&&!isCondensedMode&&incrementOverageCreditUpsellSeenCount()},[showOverageCreditUpsell,showOnboarding,showGuestPassesUpsell,isCondensedMode]);let model=useMainLoopModel(),fullModelDisplayName=renderModelSetting(model),{version:version3,cwd:cwd6,billingType,agentName:agentNameFromSettings}=getLogoDisplayData({isRemoteMode:getIsRemoteMode(),remoteCwd}),agentName=agent??agentNameFromSettings,effortSuffix=getEffortSuffix(model,effortValue),modelDisplayName=truncate2(fullModelDisplayName+effortSuffix,LEFT_PANEL_MAX_WIDTH-20);if(!hasReleaseNotes&&!showOnboarding&&!isEnvTruthy2(process.env.CLAUDE_CODE_FORCE_FULL_LOGO))return(0,import_jsx_runtime176.jsxs)(import_jsx_runtime176.Fragment,{children:[(0,import_jsx_runtime176.jsx)(CondensedLogo,{}),(0,import_jsx_runtime176.jsx)(VoiceModeNotice,{}),(0,import_jsx_runtime176.jsx)(Opus1mMergeNotice,{}),ChannelsNoticeModule&&(0,import_jsx_runtime176.jsx)(ChannelsNoticeModule.ChannelsNotice,{}),isDebugMode()&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Debug mode enabled"}),(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Logging to: ",isDebugToStdErr()?"stderr":getDebugLogPath()]})]}),(0,import_jsx_runtime176.jsx)(EmergencyTip,{}),process.env.CLAUDE_CODE_TMUX_SESSION&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["tmux session: ",process.env.CLAUDE_CODE_TMUX_SESSION]}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:process.env.CLAUDE_CODE_TMUX_PREFIX_CONFLICTS?`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} ${process.env.CLAUDE_CODE_TMUX_PREFIX} d (press prefix twice - ${APP_NAME} uses ${process.env.CLAUDE_CODE_TMUX_PREFIX})`:`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} d`})]}),announcement&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[!process.env.IS_DEMO&&config3.oauthAccount?.organizationName&&(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Message from ",config3.oauthAccount.organizationName,":"]}),(0,import_jsx_runtime176.jsx)(ThemedText,{children:announcement})]}),!1,!1]});let layoutMode=getLayoutMode(columns),userTheme=resolveThemeSetting(getGlobalConfig().theme),borderTitle=` ${color("brand",userTheme)(APP_NAME)} ${color("inactive",userTheme)(`v${version3}`)} `,compactBorderTitle=color("brand",userTheme)(` ${APP_NAME} `);if(layoutMode==="compact"){let welcomeMessage2=formatWelcomeMessage(username);stringWidth(welcomeMessage2)>columns-4&&(welcomeMessage2=formatWelcomeMessage(null));let cwdAvailableWidth2=agentName?columns-4-"@".length-stringWidth(agentName)-" \xB7 ".length:columns-4,truncatedCwd2=truncatePath(cwd6,Math.max(cwdAvailableWidth2,10));return(0,import_jsx_runtime176.jsxs)(import_jsx_runtime176.Fragment,{children:[(0,import_jsx_runtime176.jsx)(OffscreenFreeze,{children:(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:"claude",borderText:{content:compactBorderTitle,position:"top",align:"start",offset:1},paddingX:1,paddingY:1,alignItems:"center",width:columns,children:[(0,import_jsx_runtime176.jsx)(ThemedText,{bold:!0,children:welcomeMessage2}),(0,import_jsx_runtime176.jsx)(ThemedBox_default,{marginY:1,children:(0,import_jsx_runtime176.jsx)(Clawd,{})}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:modelDisplayName}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:billingType}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:agentName?`@${agentName} \xB7 ${truncatedCwd2}`:truncatedCwd2})]})}),(0,import_jsx_runtime176.jsx)(VoiceModeNotice,{}),(0,import_jsx_runtime176.jsx)(Opus1mMergeNotice,{}),ChannelsNoticeModule&&(0,import_jsx_runtime176.jsx)(ChannelsNoticeModule.ChannelsNotice,{}),showSandboxStatus&&(0,import_jsx_runtime176.jsx)(ThemedBox_default,{marginTop:1,flexDirection:"column",children:(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Your bash commands will be sandboxed. Disable with /sandbox."})})]})}let welcomeMessage=formatWelcomeMessage(username),modelKnown=isKnownModel(model),modelLine=!process.env.IS_DEMO&&config3.oauthAccount?.organizationName?`${modelDisplayName}${modelKnown?"":" (unknown \u2014 passthrough)"} \xB7 ${billingType} \xB7 ${config3.oauthAccount.organizationName}`:`${modelDisplayName}${modelKnown?"":" (unknown \u2014 passthrough)"} \xB7 ${billingType}`,cwdAvailableWidth=agentName?LEFT_PANEL_MAX_WIDTH-"@".length-stringWidth(agentName)-" \xB7 ".length:LEFT_PANEL_MAX_WIDTH,truncatedCwd=truncatePath(cwd6,Math.max(cwdAvailableWidth,10)),cwdLine=agentName?`@${agentName} \xB7 ${truncatedCwd}`:truncatedCwd,optimalLeftWidth=calculateOptimalLeftWidth(welcomeMessage,cwdLine,modelLine),{leftWidth,rightWidth}=calculateLayoutDimensions(columns,layoutMode,optimalLeftWidth);return(0,import_jsx_runtime176.jsxs)(import_jsx_runtime176.Fragment,{children:[(0,import_jsx_runtime176.jsx)(OffscreenFreeze,{children:(0,import_jsx_runtime176.jsx)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:"claude",borderText:{content:borderTitle,position:"top",align:"start",offset:3},children:(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:layoutMode==="horizontal"?"row":"column",paddingX:1,gap:1,children:[(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:"column",width:leftWidth,justifyContent:"space-between",alignItems:"center",minHeight:9,children:[(0,import_jsx_runtime176.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime176.jsx)(ThemedText,{bold:!0,children:welcomeMessage})}),(0,import_jsx_runtime176.jsx)(Clawd,{}),(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:"center",children:[(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:modelLine}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:cwdLine})]})]}),layoutMode==="horizontal"&&(0,import_jsx_runtime176.jsx)(ThemedBox_default,{height:"100%",borderStyle:"single",borderColor:"claude",borderDimColor:!0,borderTop:!1,borderBottom:!1,borderLeft:!1}),layoutMode==="horizontal"&&(0,import_jsx_runtime176.jsx)(FeedColumn,{feeds:showOnboarding?[createProjectOnboardingFeed(getSteps()),createRecentActivityFeed(activities)]:showGuestPassesUpsell?[createRecentActivityFeed(activities),createGuestPassesFeed()]:showOverageCreditUpsell?[createRecentActivityFeed(activities),createOverageCreditFeed()]:[createRecentActivityFeed(activities),createWhatsNewFeed(changelog)],maxWidth:rightWidth})]})})}),(0,import_jsx_runtime176.jsx)(VoiceModeNotice,{}),(0,import_jsx_runtime176.jsx)(Opus1mMergeNotice,{}),ChannelsNoticeModule&&(0,import_jsx_runtime176.jsx)(ChannelsNoticeModule.ChannelsNotice,{}),isDebugMode()&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Debug mode enabled"}),(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Logging to: ",isDebugToStdErr()?"stderr":getDebugLogPath()]})]}),(0,import_jsx_runtime176.jsx)(EmergencyTip,{}),process.env.CLAUDE_CODE_TMUX_SESSION&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["tmux session: ",process.env.CLAUDE_CODE_TMUX_SESSION]}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:process.env.CLAUDE_CODE_TMUX_PREFIX_CONFLICTS?`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} ${process.env.CLAUDE_CODE_TMUX_PREFIX} d (press prefix twice - ${APP_NAME} uses ${process.env.CLAUDE_CODE_TMUX_PREFIX})`:`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} d`})]}),announcement&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[!process.env.IS_DEMO&&config3.oauthAccount?.organizationName&&(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Message from ",config3.oauthAccount.organizationName,":"]}),(0,import_jsx_runtime176.jsx)(ThemedText,{children:announcement})]}),showSandboxStatus&&(0,import_jsx_runtime176.jsx)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Your bash commands will be sandboxed. Disable with /sandbox."})}),!1,!1]})}var import_react128,import_jsx_runtime176,ChannelsNoticeModule,LEFT_PANEL_MAX_WIDTH,init_LogoV2=__esm({"src/components/LogoV2/LogoV2.tsx"(){init_branding();init_ink();init_useTerminalSize();init_stringWidth2();init_logoV2Utils();init_format();init_file2();init_Clawd();init_FeedColumn();init_feedConfigs();init_config11();init_systemTheme();init_settings2();init_debug();import_react128=__toESM(require_react());init_projectOnboardingState();init_CondensedLogo();init_OffscreenFreeze();init_releaseNotes();init_dumpPrompts();init_envUtils();init_startupProfiler();init_EmergencyTip();init_VoiceModeNotice();init_Opus1mMergeNotice();init_state();init_sandbox_adapter();init_GuestPassesUpsell();init_OverageCreditUpsell();init_AppState();init_effort4();init_useMainLoopModel();init_model3();import_jsx_runtime176=__toESM(require_jsx_runtime()),ChannelsNoticeModule=null,LEFT_PANEL_MAX_WIDTH=50;__name(LogoV2,"LogoV2")}});function CompactSummary({message,screen}){let isZh7=resolveUiLocale()==="zh-CN",isTranscriptMode=screen==="transcript",textContent=getUserMessageText(message)||"",metadata=message.summarizeMetadata;return metadata?(0,import_jsx_runtime177.jsx)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime177.jsx)(ThemedBox_default,{minWidth:2,children:(0,import_jsx_runtime177.jsx)(ThemedText,{color:"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime177.jsx)(ThemedText,{bold:!0,children:isZh7?"\u4F1A\u8BDD\u6458\u8981":"Summarized conversation"}),!isTranscriptMode&&(0,import_jsx_runtime177.jsx)(MessageResponse,{children:(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime177.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u5DF2\u6458\u8981 ${metadata.messagesSummarized} \u6761\u6D88\u606F${metadata.direction==="up_to"?"(\u6B64\u5904\u4E4B\u524D)":"(\u6B64\u5904\u4E4B\u540E)"}`:`Summarized ${metadata.messagesSummarized} messages ${metadata.direction==="up_to"?"up to this point":"from this point"}`}),metadata.userContext&&(0,import_jsx_runtime177.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u4E0A\u4E0B\u6587:":"Context:"," ","\u201C",metadata.userContext,"\u201D"]}),(0,import_jsx_runtime177.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime177.jsx)(ConfigurableShortcutHint,{action:"app:toggleTranscript",context:"Global",fallback:"ctrl+o",description:isZh7?"\u5C55\u5F00\u5386\u53F2":"expand history",parens:!0})})]})}),isTranscriptMode&&(0,import_jsx_runtime177.jsx)(MessageResponse,{children:(0,import_jsx_runtime177.jsx)(ThemedText,{children:textContent})})]})]})}):(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime177.jsx)(ThemedBox_default,{minWidth:2,children:(0,import_jsx_runtime177.jsx)(ThemedText,{color:"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime177.jsx)(ThemedBox_default,{flexDirection:"column",children:(0,import_jsx_runtime177.jsxs)(ThemedText,{bold:!0,children:[isZh7?"\u538B\u7F29\u6458\u8981":"Compact summary",!isTranscriptMode&&(0,import_jsx_runtime177.jsxs)(ThemedText,{dimColor:!0,children:[" ",(0,import_jsx_runtime177.jsx)(ConfigurableShortcutHint,{action:"app:toggleTranscript",context:"Global",fallback:"ctrl+o",description:isZh7?"\u5C55\u5F00":"expand",parens:!0})]})]})})]}),isTranscriptMode&&(0,import_jsx_runtime177.jsx)(MessageResponse,{children:(0,import_jsx_runtime177.jsx)(ThemedText,{children:textContent})})]})}var import_jsx_runtime177,init_CompactSummary=__esm({"src/components/CompactSummary.tsx"(){init_figures2();init_ink();init_messages4();init_uiLocale();init_ConfigurableShortcutHint();init_MessageResponse();import_jsx_runtime177=__toESM(require_jsx_runtime());__name(CompactSummary,"CompactSummary")}});function useBlink(enabled,intervalMs=BLINK_INTERVAL_MS){let focused=useTerminalFocus(),[ref,time3]=useAnimationFrame(enabled&&focused?intervalMs:null);if(!enabled||!focused)return[ref,!0];let isVisible=Math.floor(time3/intervalMs)%2===0;return[ref,isVisible]}var BLINK_INTERVAL_MS,init_useBlink=__esm({"src/hooks/useBlink.ts"(){init_ink();BLINK_INTERVAL_MS=600;__name(useBlink,"useBlink")}});function ToolUseLoader({isError:isError2,isUnresolved,shouldAnimate}){let[ref,isBlinking]=useBlink(shouldAnimate);return(0,import_jsx_runtime178.jsx)(ThemedBox_default,{ref,minWidth:2,children:(0,import_jsx_runtime178.jsx)(ThemedText,{color:isUnresolved?void 0:isError2?"error":"success",dimColor:isUnresolved,children:!shouldAnimate||isBlinking||isError2||!isUnresolved?BLACK_CIRCLE:" "})})}var import_jsx_runtime178,init_ToolUseLoader=__esm({"src/components/ToolUseLoader.tsx"(){init_figures2();init_useBlink();init_ink();import_jsx_runtime178=__toESM(require_jsx_runtime());__name(ToolUseLoader,"ToolUseLoader")}});function AdvisorMessage({block,addMargin,resolvedToolUseIDs,erroredToolUseIDs,shouldAnimate,verbose,advisorModel}){if(block.type==="server_tool_use"){let input2=block.input&&Object.keys(block.input).length>0?jsonStringify(block.input):null;return(0,import_jsx_runtime179.jsxs)(ThemedBox_default,{marginTop:addMargin?1:0,paddingRight:2,flexDirection:"row",children:[(0,import_jsx_runtime179.jsx)(ToolUseLoader,{shouldAnimate,isUnresolved:!resolvedToolUseIDs.has(block.id),isError:erroredToolUseIDs.has(block.id)}),(0,import_jsx_runtime179.jsx)(ThemedText,{bold:!0,children:"Advising"}),advisorModel?(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[" using ",renderModelName(advisorModel)]}):null,input2?(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[" \xB7 ",input2]}):null]})}let body;switch(block.content.type){case"advisor_tool_result_error":body=(0,import_jsx_runtime179.jsxs)(ThemedText,{color:"error",children:["Advisor unavailable (",block.content.error_code,")"]});break;case"advisor_result":body=verbose?(0,import_jsx_runtime179.jsx)(ThemedText,{dimColor:!0,children:block.content.text}):(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.tick," Advisor has reviewed the conversation and will apply the feedback ",(0,import_jsx_runtime179.jsx)(CtrlOToExpand,{})]});break;case"advisor_redacted_result":body=(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.tick," Advisor has reviewed the conversation and will apply the feedback"]});break}return(0,import_jsx_runtime179.jsx)(ThemedBox_default,{paddingRight:2,children:(0,import_jsx_runtime179.jsx)(MessageResponse,{children:body})})}var import_jsx_runtime179,init_AdvisorMessage=__esm({"src/components/messages/AdvisorMessage.tsx"(){init_figures();init_ink();init_model3();init_slowOperations();init_CtrlOToExpand();init_MessageResponse();init_ToolUseLoader();import_jsx_runtime179=__toESM(require_jsx_runtime());__name(AdvisorMessage,"AdvisorMessage")}});function AssistantRedactedThinkingMessage({addMargin=!1}){return(0,import_jsx_runtime180.jsx)(ThemedBox_default,{marginTop:addMargin?1:0,children:(0,import_jsx_runtime180.jsx)(ThemedText,{dimColor:!0,italic:!0,children:"\u25C7 Thinking\u2026"})})}var import_jsx_runtime180,init_AssistantRedactedThinkingMessage=__esm({"src/components/messages/AssistantRedactedThinkingMessage.tsx"(){init_ink();import_jsx_runtime180=__toESM(require_jsx_runtime());__name(AssistantRedactedThinkingMessage,"AssistantRedactedThinkingMessage")}});function useClaudeAiLimits(){let[limits,setLimits]=(0,import_react129.useState)({...currentLimits});return(0,import_react129.useEffect)(()=>{let listener2=__name(newLimits=>{setLimits({...newLimits})},"listener");return statusListeners.add(listener2),()=>{statusListeners.delete(listener2)}},[]),limits}var import_react129,init_claudeAiLimitsHook=__esm({"src/services/claudeAiLimitsHook.ts"(){import_react129=__toESM(require_react());init_claudeAiLimits();__name(useClaudeAiLimits,"useClaudeAiLimits")}});function getUpsellMessage({shouldShowUpsell,isMax20x,isExtraUsageCommandEnabled,shouldAutoOpenRateLimitOptionsMenu,isTeamOrEnterprise,hasBillingAccess}){return shouldShowUpsell?isMax20x?isExtraUsageCommandEnabled?"/extra-usage to finish what you\u2019re working on.":"/login to switch to an API usage-billed account.":shouldAutoOpenRateLimitOptionsMenu?"Opening your options\u2026":!isTeamOrEnterprise&&!isExtraUsageCommandEnabled?"/upgrade to increase your usage limit.":isTeamOrEnterprise?isExtraUsageCommandEnabled?hasBillingAccess?"/extra-usage to finish what you\u2019re working on.":"/extra-usage to request more usage from your admin.":null:"/upgrade or /extra-usage to finish what you\u2019re working on.":null}function RateLimitMessage({text:text3,onOpenRateLimitOptions}){let subscriptionType=getSubscriptionType(),rateLimitTier=getRateLimitTier(),isTeamOrEnterprise=subscriptionType==="team"||subscriptionType==="enterprise",isMax20x=rateLimitTier==="default_claude_max_20x",shouldShowUpsell=shouldProcessMockLimits()||isClaudeAISubscriber(),canSeeRateLimitOptionsUpsell=shouldShowUpsell&&!isMax20x,[hasOpenedInteractiveMenu,setHasOpenedInteractiveMenu]=(0,import_react130.useState)(!1),claudeAiLimits=useClaudeAiLimits(),isCurrentlyRateLimited=claudeAiLimits.status==="rejected"&&claudeAiLimits.resetsAt!==void 0&&!claudeAiLimits.isUsingOverage,shouldAutoOpenRateLimitOptionsMenu=canSeeRateLimitOptionsUpsell&&!hasOpenedInteractiveMenu&&isCurrentlyRateLimited&&onOpenRateLimitOptions;(0,import_react130.useEffect)(()=>{shouldAutoOpenRateLimitOptionsMenu&&(setHasOpenedInteractiveMenu(!0),onOpenRateLimitOptions())},[shouldAutoOpenRateLimitOptionsMenu,onOpenRateLimitOptions]);let upsell=(0,import_react130.useMemo)(()=>{let message=getUpsellMessage({shouldShowUpsell,isMax20x,isExtraUsageCommandEnabled:extraUsage.isEnabled(),shouldAutoOpenRateLimitOptionsMenu:!!shouldAutoOpenRateLimitOptionsMenu,isTeamOrEnterprise,hasBillingAccess:hasClaudeAiBillingAccess()});return message?(0,import_jsx_runtime181.jsx)(ThemedText,{dimColor:!0,children:message}):null},[shouldShowUpsell,isMax20x,isTeamOrEnterprise,shouldAutoOpenRateLimitOptionsMenu]);return(0,import_jsx_runtime181.jsx)(MessageResponse,{children:(0,import_jsx_runtime181.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime181.jsx)(ThemedText,{color:"error",children:text3}),hasOpenedInteractiveMenu?null:upsell]})})}var import_react130,import_jsx_runtime181,init_RateLimitMessage=__esm({"src/components/messages/RateLimitMessage.tsx"(){import_react130=__toESM(require_react());init_extra_usage2();init_ink();init_claudeAiLimitsHook();init_rateLimitMocking();init_auth6();init_billing();init_MessageResponse();import_jsx_runtime181=__toESM(require_jsx_runtime());__name(getUpsellMessage,"getUpsellMessage");__name(RateLimitMessage,"RateLimitMessage")}});function InvalidApiKeyMessage(){let isKeychainLocked=isMacOsKeychainLocked();return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getInvalidApiKeyErrorMessage()}),isKeychainLocked&&(0,import_jsx_runtime182.jsx)(ThemedText,{dimColor:!0,children:"\xB7 Run in another terminal: security unlock-keychain"})]})})}function AssistantTextMessage({param:{text:text3},addMargin,shouldShowDot,verbose,onOpenRateLimitOptions}){let isSelected=(0,import_react131.useContext)(MessageActionsSelectedContext);if(isEmptyMessageText(text3))return null;if(isRateLimitErrorMessage(text3))return(0,import_jsx_runtime182.jsx)(RateLimitMessage,{text:text3,onOpenRateLimitOptions});switch(text3){case NO_RESPONSE_REQUESTED:return null;case PROMPT_TOO_LONG_ERROR_MESSAGE:{let upgradeHint=getUpgradeMessage("warning");return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsxs)(ThemedText,{color:"error",children:["Context limit reached \xB7 /compact or /clear to continue",upgradeHint?` \xB7 ${upgradeHint}`:""]})})}case CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE:return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:"Credit balance too low \xB7 Add funds: https://platform.\u0063laude.com/settings/billing"})});case getInvalidApiKeyErrorMessage():return(0,import_jsx_runtime182.jsx)(InvalidApiKeyMessage,{});case getInvalidApiKeyErrorMessageExternal():return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getInvalidApiKeyErrorMessageExternal()})});case getOrgDisabledErrorMessageEnvKey():case getOrgDisabledErrorMessageEnvKeyWithOauth():return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:text3})});case getTokenRevokedErrorMessage():return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getTokenRevokedErrorMessage()})});case getApiTimeoutErrorMessage():return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsxs)(ThemedText,{color:"error",children:[getApiTimeoutErrorMessage(),process.env.API_TIMEOUT_MS&&(0,import_jsx_runtime182.jsxs)(import_jsx_runtime182.Fragment,{children:[" ","(API_TIMEOUT_MS=",process.env.API_TIMEOUT_MS,"ms, try increasing it)"]})]})});case getCustomOffSwitchMessage():return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getCustomOffSwitchMessage()}),(0,import_jsx_runtime182.jsxs)(ThemedText,{children:["To continue immediately, use /model to switch to"," ",renderModelName(getDefaultSonnetModel())," and continue coding."]})]})});case ERROR_MESSAGE_USER_ABORT:return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(InterruptedByUser,{})});default:if(startsWithApiErrorPrefix(text3)){let truncated=!verbose&&text3.length>MAX_API_ERROR_CHARS;return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:text3===API_ERROR_MESSAGE_PREFIX?`${API_ERROR_MESSAGE_PREFIX}: Please wait a moment and try again.`:truncated?text3.slice(0,MAX_API_ERROR_CHARS)+"\u2026":text3}),truncated&&(0,import_jsx_runtime182.jsx)(CtrlOToExpand,{})]})})}return(0,import_jsx_runtime182.jsx)(ThemedBox_default,{alignItems:"flex-start",flexDirection:"row",justifyContent:"space-between",marginTop:addMargin?1:0,width:"100%",backgroundColor:isSelected?"messageActionsBackground":void 0,children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"row",children:[shouldShowDot&&(0,import_jsx_runtime182.jsx)(NoSelect,{fromLeftEdge:!0,minWidth:2,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:isSelected?"suggestion":"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime182.jsx)(ThemedBox_default,{flexDirection:"column",children:(0,import_jsx_runtime182.jsx)(Markdown,{children:text3})})]})})}}var import_react131,import_jsx_runtime182,MAX_API_ERROR_CHARS,init_AssistantTextMessage=__esm({"src/components/messages/AssistantTextMessage.tsx"(){import_react131=__toESM(require_react());init_compact2();init_rateLimitMessages();init_figures2();init_ink();init_errors7();init_messages4();init_contextWindowUpgradeCheck();init_model3();init_macOsKeychainStorage();init_CtrlOToExpand();init_InterruptedByUser();init_Markdown();init_MessageResponse();init_messageActions();init_RateLimitMessage();import_jsx_runtime182=__toESM(require_jsx_runtime()),MAX_API_ERROR_CHARS=1e3;__name(InvalidApiKeyMessage,"InvalidApiKeyMessage");__name(AssistantTextMessage,"AssistantTextMessage")}});function AssistantThinkingMessage({param,addMargin=!1,isTranscriptMode,verbose,hideInTranscript=!1}){let thinking=param?.thinking||"";if(!thinking||hideInTranscript)return null;let shouldShowFullThinking=isTranscriptMode||verbose,label2="\u25C7 Thought",durationMs=param?.durationMs,tokenEstimate=thinking?Math.max(1,Math.floor(thinking.length/4)):0,durationLabel=durationMs?`Thought for ${(durationMs/1e3).toFixed(1)}s (${tokenEstimate} tokens)`:label2;if(!shouldShowFullThinking){let preview2="";if(thinking){let firstLine3=thinking.split(`
7942
+ `)}var SYSTEM_REMINDER_CLOSE,RENDERED_AS_SENTINEL,searchTextCache,init_transcriptSearch=__esm({"src/utils/transcriptSearch.ts"(){init_messages4();SYSTEM_REMINDER_CLOSE="</system-reminder>",RENDERED_AS_SENTINEL=new Set([INTERRUPT_MESSAGE,INTERRUPT_MESSAGE_FOR_TOOL_USE]),searchTextCache=new WeakMap;__name(renderableSearchText,"renderableSearchText");__name(computeSearchText,"computeSearchText");__name(toolUseSearchText,"toolUseSearchText");__name(toolResultSearchText,"toolResultSearchText")}});function getRemoteAwareDisplayPath(appState){let displayBase=process.env.DEMO_VERSION?"/code/claude":getDisplayPath(appState?.isRemoteMode&&appState.remoteCwd?appState.remoteCwd:getCwd()),serverUrl=getDirectConnectServerUrl();return serverUrl?`${displayBase} in ${serverUrl.replace(/^https?:\/\//,"")}`:displayBase}function getLayoutMode(columns){return columns>=70?"horizontal":"compact"}function calculateLayoutDimensions(columns,layoutMode,optimalLeftWidth){if(layoutMode==="horizontal"){let leftWidth=optimalLeftWidth,usedSpace=BORDER_PADDING+CONTENT_PADDING+DIVIDER_WIDTH+leftWidth,availableForRight=columns-usedSpace,rightWidth=Math.max(30,availableForRight),totalWidth2=Math.min(leftWidth+rightWidth+DIVIDER_WIDTH+CONTENT_PADDING,columns-BORDER_PADDING);return totalWidth2<leftWidth+rightWidth+DIVIDER_WIDTH+CONTENT_PADDING&&(rightWidth=totalWidth2-leftWidth-DIVIDER_WIDTH-CONTENT_PADDING),{leftWidth,rightWidth,totalWidth:totalWidth2}}let totalWidth=Math.min(columns-BORDER_PADDING,MAX_LEFT_WIDTH+20);return{leftWidth:totalWidth,rightWidth:totalWidth,totalWidth}}function calculateOptimalLeftWidth(welcomeMessage,truncatedCwd,modelLine){let contentWidth=Math.max(stringWidth(welcomeMessage),stringWidth(APP_BRAND_SUBTITLE),stringWidth(truncatedCwd),stringWidth(modelLine),20);return Math.min(contentWidth+4,MAX_LEFT_WIDTH)}function formatWelcomeMessage(username){return!username||username.length>MAX_USERNAME_LENGTH?"\u51C6\u5907\u597D\u4E86\u5C31\u5F00\u59CB\u3002":`\u6B22\u8FCE\u56DE\u6765\uFF0C${username}\u3002`}function truncatePath(path36,maxLength){if(stringWidth(path36)<=maxLength)return path36;let separator="/",ellipsis="\u2026",ellipsisWidth=1,separatorWidth=1,parts=path36.split(separator),first=parts[0]||"",last2=parts[parts.length-1]||"",firstWidth=stringWidth(first),lastWidth=stringWidth(last2);if(parts.length===1)return truncateToWidth(path36,maxLength);if(first===""&&ellipsisWidth+separatorWidth+lastWidth>=maxLength)return`${separator}${truncateToWidth(last2,Math.max(1,maxLength-separatorWidth))}`;if(first!==""&&ellipsisWidth*2+separatorWidth+lastWidth>=maxLength)return`${ellipsis}${separator}${truncateToWidth(last2,Math.max(1,maxLength-ellipsisWidth-separatorWidth))}`;if(parts.length===2){let availableForFirst=maxLength-ellipsisWidth-separatorWidth-lastWidth;return`${truncateToWidthNoEllipsis(first,availableForFirst)}${ellipsis}${separator}${last2}`}let available=maxLength-firstWidth-lastWidth-ellipsisWidth-2*separatorWidth;if(available<=0){let availableForFirst=Math.max(0,maxLength-lastWidth-ellipsisWidth-2*separatorWidth);return`${truncateToWidthNoEllipsis(first,availableForFirst)}${separator}${ellipsis}${separator}${last2}`}let middleParts=[];for(let i3=parts.length-2;i3>0;i3--){let part=parts[i3];if(part&&stringWidth(part)+separatorWidth<=available)middleParts.unshift(part),available-=stringWidth(part)+separatorWidth;else break}return middleParts.length===0?`${first}${separator}${ellipsis}${separator}${last2}`:`${first}${separator}${ellipsis}${separator}${middleParts.join(separator)}${separator}${last2}`}async function getRecentActivity(){if(cachePromise)return cachePromise;let currentSessionId=getSessionId();return cachePromise=loadMessageLogs(10).then(logs2=>(cachedActivity=logs2.filter(log4=>{if(log4.isSidechain||log4.sessionId===currentSessionId||log4.summary?.includes("I apologize"))return!1;let hasSummary=log4.summary&&log4.summary!=="No prompt",hasFirstPrompt=log4.firstPrompt&&log4.firstPrompt!=="No prompt";return hasSummary||hasFirstPrompt}).slice(0,3),cachedActivity)).catch(()=>(cachedActivity=[],cachedActivity)),cachePromise}function getRecentActivitySync(){return cachedActivity}function getLogoDisplayData(appState){let version3=process.env.DEMO_VERSION??APP_VERSION,cwd6=getRemoteAwareDisplayPath(appState),billingType=isClaudeAISubscriber()?getSubscriptionName():"Usage-based API billing",agentName=getInitialSettings().agent;return{version:version3,cwd:cwd6,billingType,agentName}}function formatModelAndBilling(modelName,billingType,availableWidth){return stringWidth(modelName)+3+stringWidth(billingType)>availableWidth?{shouldSplit:!0,truncatedModel:truncate2(modelName,availableWidth),truncatedBilling:truncate2(billingType,availableWidth)}:{shouldSplit:!1,truncatedModel:truncate2(modelName,Math.max(availableWidth-stringWidth(billingType)-3,10)),truncatedBilling:billingType}}function getRecentReleaseNotesSync(maxItems){if(process.env.USER_TYPE==="ant")return[];let changelog=getStoredChangelogFromMemory();if(!changelog)return[];let parsed;try{parsed=parseChangelog(changelog)}catch{return[]}let allNotes=[],versions=Object.keys(parsed).sort((a2,b3)=>gt2(a2,b3)?-1:1).slice(0,3);for(let version3 of versions){let notes=parsed[version3];notes&&allNotes.push(...notes)}return allNotes.slice(0,maxItems)}var MAX_LEFT_WIDTH,MAX_USERNAME_LENGTH,BORDER_PADDING,DIVIDER_WIDTH,CONTENT_PADDING,cachedActivity,cachePromise,init_logoV2Utils=__esm({"src/utils/logoV2Utils.ts"(){init_state();init_branding();init_stringWidth();init_auth6();init_cwd2();init_file2();init_format();init_releaseNotes();init_semver();init_sessionStorage();init_settings2();MAX_LEFT_WIDTH=50,MAX_USERNAME_LENGTH=20,BORDER_PADDING=4,DIVIDER_WIDTH=1,CONTENT_PADDING=2;__name(getRemoteAwareDisplayPath,"getRemoteAwareDisplayPath");__name(getLayoutMode,"getLayoutMode");__name(calculateLayoutDimensions,"calculateLayoutDimensions");__name(calculateOptimalLeftWidth,"calculateOptimalLeftWidth");__name(formatWelcomeMessage,"formatWelcomeMessage");__name(truncatePath,"truncatePath");cachedActivity=[],cachePromise=null;__name(getRecentActivity,"getRecentActivity");__name(getRecentActivitySync,"getRecentActivitySync");__name(getLogoDisplayData,"getLogoDisplayData");__name(formatModelAndBilling,"formatModelAndBilling");__name(getRecentReleaseNotesSync,"getRecentReleaseNotesSync")}});function Clawd({pose="default"}={}){let frame=POSE_FRAMES[pose];return(0,import_jsx_runtime163.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime163.jsx)(ThemedText,{color:"mascot_body",children:frame.top}),(0,import_jsx_runtime163.jsx)(ThemedText,{color:"mascot_body",children:frame.middle}),(0,import_jsx_runtime163.jsx)(ThemedText,{color:"mascot_body",children:frame.bottom})]})}var import_jsx_runtime163,POSE_FRAMES,init_Clawd=__esm({"src/components/LogoV2/Clawd.tsx"(){init_ink();import_jsx_runtime163=__toESM(require_jsx_runtime()),POSE_FRAMES={default:{top:" \u256D\u2500\u2500\u256E ",middle:" \u2502 \u9F8D \u2502 ",bottom:" \u2570\u2500\u2500\u256F "},"look-left":{top:" \u256D\u2500\u2500\u256E ",middle:" \u2502\u9F8D \u2502 ",bottom:" \u2570\u2500\u2500\u256F "},"look-right":{top:" \u256D\u2500\u2500\u256E ",middle:" \u2502 \u9F8D\u2502 ",bottom:" \u2570\u2500\u2500\u256F "},"arms-up":{top:" \u2571\u256D\u2500\u2500\u256E\u2572 ",middle:" \u2502 \u9F8D \u2502 ",bottom:" \u2570\u2500\u2500\u256F "}};__name(Clawd,"Clawd")}});function calculateFeedWidth(config3){let{title,lines,footer,emptyMessage,customContent}=config3,maxWidth=stringWidth(title);if(customContent!==void 0)maxWidth=Math.max(maxWidth,customContent.width);else if(lines.length===0&&emptyMessage)maxWidth=Math.max(maxWidth,stringWidth(emptyMessage));else{let maxTimestampWidth=Math.max(0,...lines.map(line=>line.timestamp?stringWidth(line.timestamp):0));for(let line of lines){let timestampWidth=maxTimestampWidth>0?maxTimestampWidth:0,lineWidth=stringWidth(line.text)+(timestampWidth>0?timestampWidth+2:0);maxWidth=Math.max(maxWidth,lineWidth)}}return footer&&(maxWidth=Math.max(maxWidth,stringWidth(footer))),maxWidth}function Feed({config:config3,actualWidth}){let{title,lines,footer,emptyMessage,customContent}=config3,gap=" ",maxTimestampWidth=Math.max(0,...lines.map(line=>line.timestamp?stringWidth(line.timestamp):0));return(0,import_jsx_runtime164.jsxs)(ThemedBox_default,{flexDirection:"column",width:actualWidth,children:[(0,import_jsx_runtime164.jsx)(ThemedText,{bold:!0,color:"brand",children:title}),customContent?(0,import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment,{children:[customContent.content,footer&&(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,italic:!0,children:truncate2(footer,actualWidth)})]}):lines.length===0&&emptyMessage?(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,children:truncate2(emptyMessage,actualWidth)}):(0,import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment,{children:[lines.map((line,index)=>{let textWidth=Math.max(10,actualWidth-(maxTimestampWidth>0?maxTimestampWidth+gap.length:0));return(0,import_jsx_runtime164.jsxs)(ThemedText,{children:[maxTimestampWidth>0&&(0,import_jsx_runtime164.jsxs)(import_jsx_runtime164.Fragment,{children:[(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,children:(line.timestamp||"").padEnd(maxTimestampWidth)}),gap]}),(0,import_jsx_runtime164.jsx)(ThemedText,{children:truncate2(line.text,textWidth)})]},index)}),footer&&(0,import_jsx_runtime164.jsx)(ThemedText,{dimColor:!0,italic:!0,children:truncate2(footer,actualWidth)})]})]})}var import_jsx_runtime164,init_Feed=__esm({"src/components/LogoV2/Feed.tsx"(){init_stringWidth2();init_ink();init_format();import_jsx_runtime164=__toESM(require_jsx_runtime());__name(calculateFeedWidth,"calculateFeedWidth");__name(Feed,"Feed")}});function FeedColumn({feeds,maxWidth}){let feedWidths=feeds.map(feed=>calculateFeedWidth(feed)),maxOfAllFeeds=Math.max(...feedWidths),actualWidth=Math.min(maxOfAllFeeds,maxWidth);return(0,import_jsx_runtime165.jsx)(ThemedBox_default,{flexDirection:"column",children:feeds.map((feed,index)=>(0,import_jsx_runtime165.jsxs)(React73.Fragment,{children:[(0,import_jsx_runtime165.jsx)(Feed,{config:feed,actualWidth}),index<feeds.length-1&&(0,import_jsx_runtime165.jsx)(Divider,{color:"brand",width:actualWidth})]},index))})}var React73,import_jsx_runtime165,init_FeedColumn=__esm({"src/components/LogoV2/FeedColumn.tsx"(){React73=__toESM(require_react());init_ink();init_Divider();init_Feed();import_jsx_runtime165=__toESM(require_jsx_runtime());__name(FeedColumn,"FeedColumn")}});async function fetchReferralEligibility(campaign="claude_code_guest_pass"){let{accessToken,orgUUID}=await prepareApiRequest(),headers={...getOAuthHeaders(accessToken),"x-organization-uuid":orgUUID},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/referral/eligibility`;return(await axios_default.get(url3,{headers,params:{campaign},timeout:5e3})).data}async function fetchReferralRedemptions(campaign="claude_code_guest_pass"){let{accessToken,orgUUID}=await prepareApiRequest(),headers={...getOAuthHeaders(accessToken),"x-organization-uuid":orgUUID},url3=`${getOauthConfig().BASE_API_URL}/api/oauth/organizations/${orgUUID}/referral/redemptions`;return(await axios_default.get(url3,{headers,params:{campaign},timeout:1e4})).data}function shouldCheckForPasses(){return!!(getOauthAccountInfo()?.organizationUuid&&isClaudeAISubscriber()&&getSubscriptionType()==="max")}function checkCachedPassesEligibility(){if(!shouldCheckForPasses())return{eligible:!1,needsRefresh:!1,hasCache:!1};let orgId=getOauthAccountInfo()?.organizationUuid;if(!orgId)return{eligible:!1,needsRefresh:!1,hasCache:!1};let cachedEntry=getGlobalConfig().passesEligibilityCache?.[orgId];if(!cachedEntry)return{eligible:!1,needsRefresh:!0,hasCache:!1};let{eligible:eligible2,timestamp}=cachedEntry,needsRefresh=Date.now()-timestamp>CACHE_EXPIRATION_MS;return{eligible:eligible2,needsRefresh,hasCache:!0}}function formatCreditAmount(reward){let symbol2=CURRENCY_SYMBOLS[reward.currency]??`${reward.currency} `,amount=reward.amount_minor_units/100,formatted=amount%1===0?amount.toString():amount.toFixed(2);return`${symbol2}${formatted}`}function getCachedReferrerReward(){let orgId=getOauthAccountInfo()?.organizationUuid;return orgId?getGlobalConfig().passesEligibilityCache?.[orgId]?.referrer_reward??null:null}function getCachedRemainingPasses(){let orgId=getOauthAccountInfo()?.organizationUuid;return orgId?getGlobalConfig().passesEligibilityCache?.[orgId]?.remaining_passes??null:null}async function fetchAndStorePassesEligibility(){if(fetchInProgress)return logForDebugging("Passes: Reusing in-flight eligibility fetch"),fetchInProgress;let orgId=getOauthAccountInfo()?.organizationUuid;return orgId?(fetchInProgress=(async()=>{try{let response=await fetchReferralEligibility(),cacheEntry={...response,timestamp:Date.now()};return saveGlobalConfig(current=>({...current,passesEligibilityCache:{...current.passesEligibilityCache,[orgId]:cacheEntry}})),logForDebugging(`Passes eligibility cached for org ${orgId}: ${response.eligible}`),response}catch(error40){return logForDebugging("Failed to fetch and cache passes eligibility"),logError2(error40),null}finally{fetchInProgress=null}})(),fetchInProgress):null}async function getCachedOrFetchPassesEligibility(){if(!shouldCheckForPasses())return null;let orgId=getOauthAccountInfo()?.organizationUuid;if(!orgId)return null;let cachedEntry=getGlobalConfig().passesEligibilityCache?.[orgId],now3=Date.now();if(!cachedEntry)return logForDebugging("Passes: No cache, fetching eligibility in background (command unavailable this session)"),fetchAndStorePassesEligibility(),null;if(now3-cachedEntry.timestamp>CACHE_EXPIRATION_MS){logForDebugging("Passes: Cache stale, returning cached data and refreshing in background"),fetchAndStorePassesEligibility();let{timestamp:timestamp2,...response2}=cachedEntry;return response2}logForDebugging("Passes: Using fresh cached eligibility data");let{timestamp,...response}=cachedEntry;return response}async function prefetchPassesEligibility(){isEssentialTrafficOnly()||getCachedOrFetchPassesEligibility()}var CACHE_EXPIRATION_MS,fetchInProgress,CURRENCY_SYMBOLS,init_referral=__esm({"src/services/api/referral.ts"(){init_axios2();init_oauth();init_auth6();init_config11();init_debug();init_log3();init_privacyLevel();init_api2();CACHE_EXPIRATION_MS=1440*60*1e3,fetchInProgress=null;__name(fetchReferralEligibility,"fetchReferralEligibility");__name(fetchReferralRedemptions,"fetchReferralRedemptions");__name(shouldCheckForPasses,"shouldCheckForPasses");__name(checkCachedPassesEligibility,"checkCachedPassesEligibility");CURRENCY_SYMBOLS={USD:"$",EUR:"\u20AC",GBP:"\xA3",BRL:"R$",CAD:"CA$",AUD:"A$",NZD:"NZ$",SGD:"S$"};__name(formatCreditAmount,"formatCreditAmount");__name(getCachedReferrerReward,"getCachedReferrerReward");__name(getCachedRemainingPasses,"getCachedRemainingPasses");__name(fetchAndStorePassesEligibility,"fetchAndStorePassesEligibility");__name(getCachedOrFetchPassesEligibility,"getCachedOrFetchPassesEligibility");__name(prefetchPassesEligibility,"prefetchPassesEligibility")}});import{homedir as homedir35}from"os";function createRecentActivityFeed(activities){let lines=activities.map(log4=>{let time3=formatRelativeTimeAgo(log4.modified);return{text:(log4.summary&&log4.summary!=="No prompt"?log4.summary:log4.firstPrompt)||"",timestamp:time3}});return{title:"Recent activity",lines,footer:lines.length>0?"/resume for more":void 0,emptyMessage:"No recent activity"}}function createWhatsNewFeed(releaseNotes2){let lines=releaseNotes2.map(note=>({text:note}));return{title:"What's new",lines,footer:lines.length>0?"/release-notes for more":void 0,emptyMessage:"Check the Clavue changelog for updates"}}function createProjectOnboardingFeed(steps){let lines=steps.filter(({isEnabled:isEnabled2})=>isEnabled2).sort((a2,b3)=>Number(a2.isComplete)-Number(b3.isComplete)).map(({text:text3,isComplete})=>({text:`${isComplete?`${figures_default.tick} `:""}${text3}`})),warningText=getCwd()===homedir35()?"Note: You have launched Clavue in your home directory. For the best experience, launch it in a project directory instead.":void 0;return warningText&&lines.push({text:warningText}),{title:"Tips for getting started",lines}}function createGuestPassesFeed(){let reward=getCachedReferrerReward(),subtitle=reward?`Share Clavue and earn ${formatCreditAmount(reward)} of extra usage`:"Share Clavue with friends";return{title:"3 guest passes",lines:[],customContent:{content:(0,import_jsx_runtime166.jsxs)(import_jsx_runtime166.Fragment,{children:[(0,import_jsx_runtime166.jsx)(ThemedBox_default,{marginY:1,children:(0,import_jsx_runtime166.jsx)(ThemedText,{color:"brand",children:"[\u25C6] [\u25C6] [\u25C6]"})}),(0,import_jsx_runtime166.jsx)(ThemedText,{dimColor:!0,children:subtitle})]}),width:48},footer:"/passes"}}var import_jsx_runtime166,init_feedConfigs=__esm({"src/components/LogoV2/feedConfigs.tsx"(){init_figures();init_ink();init_referral();init_cwd2();init_format();import_jsx_runtime166=__toESM(require_jsx_runtime());__name(createRecentActivityFeed,"createRecentActivityFeed");__name(createWhatsNewFeed,"createWhatsNewFeed");__name(createProjectOnboardingFeed,"createProjectOnboardingFeed");__name(createGuestPassesFeed,"createGuestPassesFeed")}});function OffscreenFreeze({children}){"use no memo";let inVirtualList=(0,import_react120.useContext)(InVirtualListContext),[ref,{isVisible}]=useTerminalViewport(),cached3=(0,import_react120.useRef)(children);return(isVisible||inVirtualList)&&(cached3.current=children),(0,import_jsx_runtime167.jsx)(ThemedBox_default,{ref,children:cached3.current})}var import_react120,import_jsx_runtime167,init_OffscreenFreeze=__esm({"src/components/OffscreenFreeze.tsx"(){import_react120=__toESM(require_react());init_use_terminal_viewport();init_ink();init_messageActions();import_jsx_runtime167=__toESM(require_jsx_runtime());__name(OffscreenFreeze,"OffscreenFreeze")}});function hold(pose,offset,frames){return Array.from({length:frames},()=>({pose,offset}))}function AnimatedClawd(){let{pose,bounceOffset,onClick}=useClawdAnimation();return(0,import_jsx_runtime168.jsx)(ThemedBox_default,{height:CLAWD_HEIGHT,flexDirection:"column",onClick,children:(0,import_jsx_runtime168.jsx)(ThemedBox_default,{marginTop:bounceOffset,flexShrink:0,children:(0,import_jsx_runtime168.jsx)(Clawd,{pose})})})}function useClawdAnimation(){let[reducedMotion]=(0,import_react121.useState)(()=>getInitialSettings().prefersReducedMotion??!1),[frameIndex,setFrameIndex]=(0,import_react121.useState)(-1),sequenceRef=(0,import_react121.useRef)(JUMP_WAVE),onClick=__name(()=>{reducedMotion||frameIndex!==-1||(sequenceRef.current=CLICK_ANIMATIONS[Math.floor(Math.random()*CLICK_ANIMATIONS.length)],setFrameIndex(0))},"onClick");(0,import_react121.useEffect)(()=>{if(frameIndex===-1)return;if(frameIndex>=sequenceRef.current.length){setFrameIndex(-1);return}let timer2=setTimeout(setFrameIndex,FRAME_MS,incrementFrame);return()=>clearTimeout(timer2)},[frameIndex]);let seq=sequenceRef.current,current=frameIndex>=0&&frameIndex<seq.length?seq[frameIndex]:IDLE;return{pose:current.pose,bounceOffset:current.offset,onClick}}var import_react121,import_jsx_runtime168,JUMP_WAVE,LOOK_AROUND,CLICK_ANIMATIONS,IDLE,FRAME_MS,incrementFrame,CLAWD_HEIGHT,init_AnimatedClawd=__esm({"src/components/LogoV2/AnimatedClawd.tsx"(){import_react121=__toESM(require_react());init_ink();init_settings2();init_Clawd();import_jsx_runtime168=__toESM(require_jsx_runtime());__name(hold,"hold");JUMP_WAVE=[...hold("default",1,2),...hold("arms-up",0,3),...hold("default",0,1),...hold("default",1,2),...hold("arms-up",0,3),...hold("default",0,1)],LOOK_AROUND=[...hold("look-right",0,5),...hold("look-left",0,5),...hold("default",0,1)],CLICK_ANIMATIONS=[JUMP_WAVE,LOOK_AROUND],IDLE={pose:"default",offset:0},FRAME_MS=60,incrementFrame=__name(i3=>i3+1,"incrementFrame"),CLAWD_HEIGHT=3;__name(AnimatedClawd,"AnimatedClawd");__name(useClawdAnimation,"useClawdAnimation")}});function BrandWordmark({version:version3,welcomeMessage,align="left",showVersion=!0}){return(0,import_jsx_runtime169.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:align==="center"?"center":"flex-start",children:[(0,import_jsx_runtime169.jsxs)(ThemedText,{children:[(0,import_jsx_runtime169.jsx)(ThemedText,{color:"inactive",children:"/"}),(0,import_jsx_runtime169.jsx)(ThemedText,{color:"brand",bold:!0,children:APP_NAME}),showVersion&&version3?(0,import_jsx_runtime169.jsx)(ThemedText,{dimColor:!0,children:` v${version3}`}):null]}),(0,import_jsx_runtime169.jsx)(ThemedText,{color:"brand",children:APP_BRAND_SUBTITLE}),welcomeMessage?(0,import_jsx_runtime169.jsx)(ThemedText,{dimColor:!0,children:welcomeMessage}):null]})}var import_jsx_runtime169,init_BrandWordmark=__esm({"src/components/LogoV2/BrandWordmark.tsx"(){init_ink();init_branding();import_jsx_runtime169=__toESM(require_jsx_runtime());__name(BrandWordmark,"BrandWordmark")}});function resetIfPassesRefreshed(){let remaining=getCachedRemainingPasses();if(remaining==null||remaining<=0)return;let lastSeen=getGlobalConfig().passesLastSeenRemaining??0;remaining>lastSeen&&saveGlobalConfig(prev=>({...prev,passesUpsellSeenCount:0,hasVisitedPasses:!1,passesLastSeenRemaining:remaining}))}function shouldShowGuestPassesUpsell(){let{eligible:eligible2,hasCache}=checkCachedPassesEligibility();if(!eligible2||!hasCache)return!1;resetIfPassesRefreshed();let config3=getGlobalConfig();return!((config3.passesUpsellSeenCount??0)>=3||config3.hasVisitedPasses)}function useShowGuestPassesUpsell(){let[show]=(0,import_react122.useState)(()=>shouldShowGuestPassesUpsell());return show}function incrementGuestPassesSeenCount(){let newCount=0;saveGlobalConfig(prev=>(newCount=(prev.passesUpsellSeenCount??0)+1,{...prev,passesUpsellSeenCount:newCount})),logEvent("tengu_guest_passes_upsell_shown",{seen_count:newCount})}function GuestPassesUpsell(){let reward=getCachedReferrerReward();return(0,import_jsx_runtime170.jsxs)(ThemedText,{dimColor:!0,children:[(0,import_jsx_runtime170.jsx)(ThemedText,{color:"brand",children:"[\u25C6]"})," ",(0,import_jsx_runtime170.jsx)(ThemedText,{color:"brand",children:"[\u25C6]"})," ",(0,import_jsx_runtime170.jsx)(ThemedText,{color:"brand",children:"[\u25C6]"})," \xB7"," ",reward?`Share Clavue and earn ${formatCreditAmount(reward)} of extra usage \xB7 /passes`:"3 guest passes at /passes"]})}var import_react122,import_jsx_runtime170,init_GuestPassesUpsell=__esm({"src/components/LogoV2/GuestPassesUpsell.tsx"(){import_react122=__toESM(require_react());init_ink();init_analytics();init_referral();init_config11();import_jsx_runtime170=__toESM(require_jsx_runtime());__name(resetIfPassesRefreshed,"resetIfPassesRefreshed");__name(shouldShowGuestPassesUpsell,"shouldShowGuestPassesUpsell");__name(useShowGuestPassesUpsell,"useShowGuestPassesUpsell");__name(incrementGuestPassesSeenCount,"incrementGuestPassesSeenCount");__name(GuestPassesUpsell,"GuestPassesUpsell")}});function CondensedLogo(){let{columns}=useTerminalSize(),agent=useAppState(s2=>s2.agent),effortValue=useAppState(s2=>s2.effortValue),remoteCwd=useAppState(s2=>s2.remoteCwd),model=useMainLoopModel(),modelDisplayName=renderModelSetting(model),{version:version3,cwd:cwd6,billingType,agentName:agentNameFromSettings}=getLogoDisplayData({isRemoteMode:getIsRemoteMode(),remoteCwd}),agentName=agent??agentNameFromSettings,showGuestPassesUpsell=useShowGuestPassesUpsell(),showOverageCreditUpsell=useShowOverageCreditUpsell();(0,import_react123.useEffect)(()=>{showGuestPassesUpsell&&incrementGuestPassesSeenCount()},[showGuestPassesUpsell]),(0,import_react123.useEffect)(()=>{showOverageCreditUpsell&&!showGuestPassesUpsell&&incrementOverageCreditUpsellSeenCount()},[showOverageCreditUpsell,showGuestPassesUpsell]);let textWidth=Math.max(columns-15,20),truncatedVersion=truncate2(version3,Math.max(textWidth-13,6)),effortSuffix=getEffortSuffix(model,effortValue),{shouldSplit,truncatedModel,truncatedBilling}=formatModelAndBilling(modelDisplayName+effortSuffix,billingType,textWidth),cwdAvailableWidth=agentName?textWidth-1-stringWidth(agentName)-3:textWidth,truncatedCwd=truncatePath(cwd6,Math.max(cwdAvailableWidth,10)),locationLine=agentName?`@${agentName} \xB7 ${truncatedCwd}`:truncatedCwd;return(0,import_jsx_runtime171.jsx)(OffscreenFreeze,{children:(0,import_jsx_runtime171.jsxs)(ThemedBox_default,{flexDirection:"row",gap:2,alignItems:"center",children:[isFullscreenEnvEnabled()?(0,import_jsx_runtime171.jsx)(AnimatedClawd,{}):(0,import_jsx_runtime171.jsx)(Clawd,{}),(0,import_jsx_runtime171.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime171.jsx)(BrandWordmark,{version:truncatedVersion}),shouldSplit?(0,import_jsx_runtime171.jsxs)(import_jsx_runtime171.Fragment,{children:[(0,import_jsx_runtime171.jsx)(ThemedText,{dimColor:!0,children:truncatedModel}),(0,import_jsx_runtime171.jsx)(ThemedText,{dimColor:!0,children:truncatedBilling})]}):(0,import_jsx_runtime171.jsxs)(ThemedText,{dimColor:!0,children:[truncatedModel," \xB7 ",truncatedBilling]}),(0,import_jsx_runtime171.jsx)(ThemedText,{dimColor:!0,children:locationLine}),showGuestPassesUpsell&&(0,import_jsx_runtime171.jsx)(GuestPassesUpsell,{}),!showGuestPassesUpsell&&showOverageCreditUpsell&&(0,import_jsx_runtime171.jsx)(OverageCreditUpsell,{maxWidth:textWidth,twoLine:!0})]})]})})}var import_react123,import_jsx_runtime171,init_CondensedLogo=__esm({"src/components/LogoV2/CondensedLogo.tsx"(){import_react123=__toESM(require_react());init_state();init_useMainLoopModel();init_useTerminalSize();init_stringWidth2();init_ink();init_AppState();init_effort4();init_format();init_fullscreen();init_logoV2Utils();init_model3();init_OffscreenFreeze();init_AnimatedClawd();init_BrandWordmark();init_Clawd();init_GuestPassesUpsell();init_OverageCreditUpsell();import_jsx_runtime171=__toESM(require_jsx_runtime());__name(CondensedLogo,"CondensedLogo")}});function EmergencyTip(){let tip=(0,import_react124.useMemo)(getTipOfFeed,[]),lastShownTip=(0,import_react124.useMemo)(()=>getGlobalConfig().lastShownEmergencyTip,[]),shouldShow=tip.tip&&tip.tip!==lastShownTip;return(0,import_react124.useEffect)(()=>{shouldShow&&saveGlobalConfig(current=>current.lastShownEmergencyTip===tip.tip?current:{...current,lastShownEmergencyTip:tip.tip})},[shouldShow,tip.tip]),shouldShow?(0,import_jsx_runtime172.jsx)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:(0,import_jsx_runtime172.jsx)(ThemedText,{...tip.color==="warning"?{color:"warning"}:tip.color==="error"?{color:"error"}:{dimColor:!0},children:tip.tip})}):null}function getTipOfFeed(){return getDynamicConfig_CACHED_MAY_BE_STALE(CONFIG_NAME,DEFAULT_TIP)}var import_react124,import_jsx_runtime172,CONFIG_NAME,DEFAULT_TIP,init_EmergencyTip=__esm({"src/components/LogoV2/EmergencyTip.tsx"(){import_react124=__toESM(require_react());init_ink();init_growthbook();init_config11();import_jsx_runtime172=__toESM(require_jsx_runtime()),CONFIG_NAME="tengu-top-of-feed-tip";__name(EmergencyTip,"EmergencyTip");DEFAULT_TIP={tip:"",color:"dim"};__name(getTipOfFeed,"getTipOfFeed")}});function AnimatedAsterisk({char=TEARDROP_ASTERISK}){let[reducedMotion]=(0,import_react125.useState)(()=>getInitialSettings().prefersReducedMotion??!1),[done,setDone]=(0,import_react125.useState)(reducedMotion),startTimeRef=(0,import_react125.useRef)(null),[ref,time3]=useAnimationFrame(done?null:50);if((0,import_react125.useEffect)(()=>{if(done)return;let t8=setTimeout(setDone,TOTAL_ANIMATION_MS,!0);return()=>clearTimeout(t8)},[done]),done)return(0,import_jsx_runtime173.jsx)(ThemedBox_default,{ref,children:(0,import_jsx_runtime173.jsx)(ThemedText,{color:SETTLED_GREY,children:char})});startTimeRef.current===null&&(startTimeRef.current=time3);let hue=(time3-startTimeRef.current)/SWEEP_DURATION_MS*360%360;return(0,import_jsx_runtime173.jsx)(ThemedBox_default,{ref,children:(0,import_jsx_runtime173.jsx)(ThemedText,{color:toRGBColor(hueToRgb(hue)),children:char})})}var import_react125,import_jsx_runtime173,SWEEP_DURATION_MS,SWEEP_COUNT,TOTAL_ANIMATION_MS,SETTLED_GREY,init_AnimatedAsterisk=__esm({"src/components/LogoV2/AnimatedAsterisk.tsx"(){import_react125=__toESM(require_react());init_figures2();init_ink();init_settings2();init_utils7();import_jsx_runtime173=__toESM(require_jsx_runtime()),SWEEP_DURATION_MS=1500,SWEEP_COUNT=2,TOTAL_ANIMATION_MS=SWEEP_DURATION_MS*SWEEP_COUNT,SETTLED_GREY=toRGBColor({r:153,g:153,b:153});__name(AnimatedAsterisk,"AnimatedAsterisk")}});function shouldShowOpus1mMergeNotice(){return isOpus1mMergeEnabled()&&(getGlobalConfig().opus1mMergeNoticeSeenCount??0)<MAX_SHOW_COUNT}function Opus1mMergeNotice(){let[show]=(0,import_react126.useState)(shouldShowOpus1mMergeNotice);return(0,import_react126.useEffect)(()=>{if(!show)return;let newCount=(getGlobalConfig().opus1mMergeNoticeSeenCount??0)+1;saveGlobalConfig(prev=>(prev.opus1mMergeNoticeSeenCount??0)>=newCount?prev:{...prev,opus1mMergeNoticeSeenCount:newCount})},[show]),show?(0,import_jsx_runtime174.jsxs)(ThemedBox_default,{paddingLeft:2,children:[(0,import_jsx_runtime174.jsx)(AnimatedAsterisk,{char:UP_ARROW}),(0,import_jsx_runtime174.jsxs)(ThemedText,{dimColor:!0,children:[" ","Clavue Opus now includes a 1M context window"]})]}):null}var import_react126,import_jsx_runtime174,MAX_SHOW_COUNT,init_Opus1mMergeNotice=__esm({"src/components/LogoV2/Opus1mMergeNotice.tsx"(){import_react126=__toESM(require_react());init_figures2();init_ink();init_config11();init_model3();init_AnimatedAsterisk();import_jsx_runtime174=__toESM(require_jsx_runtime()),MAX_SHOW_COUNT=6;__name(shouldShowOpus1mMergeNotice,"shouldShowOpus1mMergeNotice");__name(Opus1mMergeNotice,"Opus1mMergeNotice")}});function VoiceModeNotice(){return null}var import_react127,import_jsx_runtime175,init_VoiceModeNotice=__esm({"src/components/LogoV2/VoiceModeNotice.tsx"(){import_react127=__toESM(require_react());init_ink();init_config11();init_settings2();init_uiLocale();init_voiceModeEnabled();init_AnimatedAsterisk();init_Opus1mMergeNotice();import_jsx_runtime175=__toESM(require_jsx_runtime());__name(VoiceModeNotice,"VoiceModeNotice")}});function LogoV2(){let activities=getRecentActivitySync(),username=getGlobalConfig().oauthAccount?.displayName??"",{columns}=useTerminalSize(),showOnboarding=shouldShowProjectOnboarding(),showSandboxStatus=SandboxManager.isSandboxingEnabled(),showGuestPassesUpsell=useShowGuestPassesUpsell(),showOverageCreditUpsell=useShowOverageCreditUpsell(),agent=useAppState(s2=>s2.agent),effortValue=useAppState(s2=>s2.effortValue),remoteCwd=useAppState(s2=>s2.remoteCwd),remoteSessionUrl=useAppState(s2=>s2.remoteSessionUrl),config3=getGlobalConfig(),changelog;try{changelog=getRecentReleaseNotesSync(3)}catch{changelog=[]}let[announcement]=(0,import_react128.useState)(()=>{let announcements=getInitialSettings().companyAnnouncements;if(!(!announcements||announcements.length===0))return config3.numStartups===1?announcements[0]:announcements[Math.floor(Math.random()*announcements.length)]}),{hasReleaseNotes}=checkForReleaseNotesSync(config3.lastReleaseNotesSeen);(0,import_react128.useEffect)(()=>{getGlobalConfig().lastReleaseNotesSeen!=="11.3.13"&&(saveGlobalConfig(current=>current.lastReleaseNotesSeen==="11.3.13"?current:{...current,lastReleaseNotesSeen:"11.3.13"}),showOnboarding&&incrementProjectOnboardingSeenCount())},[config3,showOnboarding]);let isCondensedMode=!hasReleaseNotes&&!showOnboarding&&!isEnvTruthy2(process.env.CLAUDE_CODE_FORCE_FULL_LOGO);(0,import_react128.useEffect)(()=>{showGuestPassesUpsell&&!showOnboarding&&!isCondensedMode&&incrementGuestPassesSeenCount()},[showGuestPassesUpsell,showOnboarding,isCondensedMode]),(0,import_react128.useEffect)(()=>{showOverageCreditUpsell&&!showOnboarding&&!showGuestPassesUpsell&&!isCondensedMode&&incrementOverageCreditUpsellSeenCount()},[showOverageCreditUpsell,showOnboarding,showGuestPassesUpsell,isCondensedMode]);let model=useMainLoopModel(),fullModelDisplayName=renderModelSetting(model),{version:version3,cwd:cwd6,billingType,agentName:agentNameFromSettings}=getLogoDisplayData({isRemoteMode:getIsRemoteMode(),remoteCwd}),agentName=agent??agentNameFromSettings,effortSuffix=getEffortSuffix(model,effortValue),modelDisplayName=truncate2(fullModelDisplayName+effortSuffix,LEFT_PANEL_MAX_WIDTH-20);if(!hasReleaseNotes&&!showOnboarding&&!isEnvTruthy2(process.env.CLAUDE_CODE_FORCE_FULL_LOGO))return(0,import_jsx_runtime176.jsxs)(import_jsx_runtime176.Fragment,{children:[(0,import_jsx_runtime176.jsx)(CondensedLogo,{}),(0,import_jsx_runtime176.jsx)(VoiceModeNotice,{}),(0,import_jsx_runtime176.jsx)(Opus1mMergeNotice,{}),ChannelsNoticeModule&&(0,import_jsx_runtime176.jsx)(ChannelsNoticeModule.ChannelsNotice,{}),isDebugMode()&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Debug mode enabled"}),(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Logging to: ",isDebugToStdErr()?"stderr":getDebugLogPath()]})]}),(0,import_jsx_runtime176.jsx)(EmergencyTip,{}),process.env.CLAUDE_CODE_TMUX_SESSION&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["tmux session: ",process.env.CLAUDE_CODE_TMUX_SESSION]}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:process.env.CLAUDE_CODE_TMUX_PREFIX_CONFLICTS?`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} ${process.env.CLAUDE_CODE_TMUX_PREFIX} d (press prefix twice - ${APP_NAME} uses ${process.env.CLAUDE_CODE_TMUX_PREFIX})`:`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} d`})]}),announcement&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[!process.env.IS_DEMO&&config3.oauthAccount?.organizationName&&(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Message from ",config3.oauthAccount.organizationName,":"]}),(0,import_jsx_runtime176.jsx)(ThemedText,{children:announcement})]}),!1,!1]});let layoutMode=getLayoutMode(columns),userTheme=resolveThemeSetting(getGlobalConfig().theme),borderTitle=` ${color("brand",userTheme)(APP_NAME)} ${color("inactive",userTheme)(`v${version3}`)} `,compactBorderTitle=color("brand",userTheme)(` ${APP_NAME} `);if(layoutMode==="compact"){let welcomeMessage2=formatWelcomeMessage(username);stringWidth(welcomeMessage2)>columns-4&&(welcomeMessage2=formatWelcomeMessage(null));let cwdAvailableWidth2=agentName?columns-4-"@".length-stringWidth(agentName)-" \xB7 ".length:columns-4,truncatedCwd2=truncatePath(cwd6,Math.max(cwdAvailableWidth2,10));return(0,import_jsx_runtime176.jsxs)(import_jsx_runtime176.Fragment,{children:[(0,import_jsx_runtime176.jsx)(OffscreenFreeze,{children:(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:"claude",borderText:{content:compactBorderTitle,position:"top",align:"start",offset:1},paddingX:1,paddingY:1,alignItems:"center",width:columns,children:[(0,import_jsx_runtime176.jsx)(ThemedText,{bold:!0,children:welcomeMessage2}),(0,import_jsx_runtime176.jsx)(ThemedBox_default,{marginY:1,children:(0,import_jsx_runtime176.jsx)(Clawd,{})}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:modelDisplayName}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:billingType}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:agentName?`@${agentName} \xB7 ${truncatedCwd2}`:truncatedCwd2})]})}),(0,import_jsx_runtime176.jsx)(VoiceModeNotice,{}),(0,import_jsx_runtime176.jsx)(Opus1mMergeNotice,{}),ChannelsNoticeModule&&(0,import_jsx_runtime176.jsx)(ChannelsNoticeModule.ChannelsNotice,{}),showSandboxStatus&&(0,import_jsx_runtime176.jsx)(ThemedBox_default,{marginTop:1,flexDirection:"column",children:(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Your bash commands will be sandboxed. Disable with /sandbox."})})]})}let welcomeMessage=formatWelcomeMessage(username),modelKnown=isKnownModel(model),modelLine=!process.env.IS_DEMO&&config3.oauthAccount?.organizationName?`${modelDisplayName}${modelKnown?"":" (unknown \u2014 passthrough)"} \xB7 ${billingType} \xB7 ${config3.oauthAccount.organizationName}`:`${modelDisplayName}${modelKnown?"":" (unknown \u2014 passthrough)"} \xB7 ${billingType}`,cwdAvailableWidth=agentName?LEFT_PANEL_MAX_WIDTH-"@".length-stringWidth(agentName)-" \xB7 ".length:LEFT_PANEL_MAX_WIDTH,truncatedCwd=truncatePath(cwd6,Math.max(cwdAvailableWidth,10)),cwdLine=agentName?`@${agentName} \xB7 ${truncatedCwd}`:truncatedCwd,optimalLeftWidth=calculateOptimalLeftWidth(welcomeMessage,cwdLine,modelLine),{leftWidth,rightWidth}=calculateLayoutDimensions(columns,layoutMode,optimalLeftWidth);return(0,import_jsx_runtime176.jsxs)(import_jsx_runtime176.Fragment,{children:[(0,import_jsx_runtime176.jsx)(OffscreenFreeze,{children:(0,import_jsx_runtime176.jsx)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:"claude",borderText:{content:borderTitle,position:"top",align:"start",offset:3},children:(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:layoutMode==="horizontal"?"row":"column",paddingX:1,gap:1,children:[(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:"column",width:leftWidth,justifyContent:"space-between",alignItems:"center",minHeight:9,children:[(0,import_jsx_runtime176.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime176.jsx)(ThemedText,{bold:!0,children:welcomeMessage})}),(0,import_jsx_runtime176.jsx)(Clawd,{}),(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:"center",children:[(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:modelLine}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:cwdLine})]})]}),layoutMode==="horizontal"&&(0,import_jsx_runtime176.jsx)(ThemedBox_default,{height:"100%",borderStyle:"single",borderColor:"claude",borderDimColor:!0,borderTop:!1,borderBottom:!1,borderLeft:!1}),layoutMode==="horizontal"&&(0,import_jsx_runtime176.jsx)(FeedColumn,{feeds:showOnboarding?[createProjectOnboardingFeed(getSteps()),createRecentActivityFeed(activities)]:showGuestPassesUpsell?[createRecentActivityFeed(activities),createGuestPassesFeed()]:showOverageCreditUpsell?[createRecentActivityFeed(activities),createOverageCreditFeed()]:[createRecentActivityFeed(activities),createWhatsNewFeed(changelog)],maxWidth:rightWidth})]})})}),(0,import_jsx_runtime176.jsx)(VoiceModeNotice,{}),(0,import_jsx_runtime176.jsx)(Opus1mMergeNotice,{}),ChannelsNoticeModule&&(0,import_jsx_runtime176.jsx)(ChannelsNoticeModule.ChannelsNotice,{}),isDebugMode()&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Debug mode enabled"}),(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Logging to: ",isDebugToStdErr()?"stderr":getDebugLogPath()]})]}),(0,import_jsx_runtime176.jsx)(EmergencyTip,{}),process.env.CLAUDE_CODE_TMUX_SESSION&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["tmux session: ",process.env.CLAUDE_CODE_TMUX_SESSION]}),(0,import_jsx_runtime176.jsx)(ThemedText,{dimColor:!0,children:process.env.CLAUDE_CODE_TMUX_PREFIX_CONFLICTS?`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} ${process.env.CLAUDE_CODE_TMUX_PREFIX} d (press prefix twice - ${APP_NAME} uses ${process.env.CLAUDE_CODE_TMUX_PREFIX})`:`Detach: ${process.env.CLAUDE_CODE_TMUX_PREFIX} d`})]}),announcement&&(0,import_jsx_runtime176.jsxs)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:[!process.env.IS_DEMO&&config3.oauthAccount?.organizationName&&(0,import_jsx_runtime176.jsxs)(ThemedText,{dimColor:!0,children:["Message from ",config3.oauthAccount.organizationName,":"]}),(0,import_jsx_runtime176.jsx)(ThemedText,{children:announcement})]}),showSandboxStatus&&(0,import_jsx_runtime176.jsx)(ThemedBox_default,{paddingLeft:2,flexDirection:"column",children:(0,import_jsx_runtime176.jsx)(ThemedText,{color:"warning",children:"Your bash commands will be sandboxed. Disable with /sandbox."})}),!1,!1]})}var import_react128,import_jsx_runtime176,ChannelsNoticeModule,LEFT_PANEL_MAX_WIDTH,init_LogoV2=__esm({"src/components/LogoV2/LogoV2.tsx"(){init_branding();init_ink();init_useTerminalSize();init_stringWidth2();init_logoV2Utils();init_format();init_file2();init_Clawd();init_FeedColumn();init_feedConfigs();init_config11();init_systemTheme();init_settings2();init_debug();import_react128=__toESM(require_react());init_projectOnboardingState();init_CondensedLogo();init_OffscreenFreeze();init_releaseNotes();init_dumpPrompts();init_envUtils();init_startupProfiler();init_EmergencyTip();init_VoiceModeNotice();init_Opus1mMergeNotice();init_state();init_sandbox_adapter();init_GuestPassesUpsell();init_OverageCreditUpsell();init_AppState();init_effort4();init_useMainLoopModel();init_model3();import_jsx_runtime176=__toESM(require_jsx_runtime()),ChannelsNoticeModule=null,LEFT_PANEL_MAX_WIDTH=50;__name(LogoV2,"LogoV2")}});function CompactSummary({message,screen}){let isZh7=resolveUiLocale()==="zh-CN",isTranscriptMode=screen==="transcript",textContent=getUserMessageText(message)||"",metadata=message.summarizeMetadata;return metadata?(0,import_jsx_runtime177.jsx)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime177.jsx)(ThemedBox_default,{minWidth:2,children:(0,import_jsx_runtime177.jsx)(ThemedText,{color:"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime177.jsx)(ThemedText,{bold:!0,children:isZh7?"\u4F1A\u8BDD\u6458\u8981":"Summarized conversation"}),!isTranscriptMode&&(0,import_jsx_runtime177.jsx)(MessageResponse,{children:(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime177.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u5DF2\u6458\u8981 ${metadata.messagesSummarized} \u6761\u6D88\u606F${metadata.direction==="up_to"?"(\u6B64\u5904\u4E4B\u524D)":"(\u6B64\u5904\u4E4B\u540E)"}`:`Summarized ${metadata.messagesSummarized} messages ${metadata.direction==="up_to"?"up to this point":"from this point"}`}),metadata.userContext&&(0,import_jsx_runtime177.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u4E0A\u4E0B\u6587:":"Context:"," ","\u201C",metadata.userContext,"\u201D"]}),(0,import_jsx_runtime177.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime177.jsx)(ConfigurableShortcutHint,{action:"app:toggleTranscript",context:"Global",fallback:"ctrl+o",description:isZh7?"\u5C55\u5F00\u5386\u53F2":"expand history",parens:!0})})]})}),isTranscriptMode&&(0,import_jsx_runtime177.jsx)(MessageResponse,{children:(0,import_jsx_runtime177.jsx)(ThemedText,{children:textContent})})]})]})}):(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:[(0,import_jsx_runtime177.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime177.jsx)(ThemedBox_default,{minWidth:2,children:(0,import_jsx_runtime177.jsx)(ThemedText,{color:"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime177.jsx)(ThemedBox_default,{flexDirection:"column",children:(0,import_jsx_runtime177.jsxs)(ThemedText,{bold:!0,children:[isZh7?"\u538B\u7F29\u6458\u8981":"Compact summary",!isTranscriptMode&&(0,import_jsx_runtime177.jsxs)(ThemedText,{dimColor:!0,children:[" ",(0,import_jsx_runtime177.jsx)(ConfigurableShortcutHint,{action:"app:toggleTranscript",context:"Global",fallback:"ctrl+o",description:isZh7?"\u5C55\u5F00":"expand",parens:!0})]})]})})]}),isTranscriptMode&&(0,import_jsx_runtime177.jsx)(MessageResponse,{children:(0,import_jsx_runtime177.jsx)(ThemedText,{children:textContent})})]})}var import_jsx_runtime177,init_CompactSummary=__esm({"src/components/CompactSummary.tsx"(){init_figures2();init_ink();init_messages4();init_uiLocale();init_ConfigurableShortcutHint();init_MessageResponse();import_jsx_runtime177=__toESM(require_jsx_runtime());__name(CompactSummary,"CompactSummary")}});function useBlink(enabled,intervalMs=BLINK_INTERVAL_MS){let focused=useTerminalFocus(),[ref,time3]=useAnimationFrame(enabled&&focused?intervalMs:null);if(!enabled||!focused)return[ref,!0];let isVisible=Math.floor(time3/intervalMs)%2===0;return[ref,isVisible]}var BLINK_INTERVAL_MS,init_useBlink=__esm({"src/hooks/useBlink.ts"(){init_ink();BLINK_INTERVAL_MS=600;__name(useBlink,"useBlink")}});function ToolUseLoader({isError:isError2,isUnresolved,shouldAnimate}){let[ref,isBlinking]=useBlink(shouldAnimate);return(0,import_jsx_runtime178.jsx)(ThemedBox_default,{ref,minWidth:2,children:(0,import_jsx_runtime178.jsx)(ThemedText,{color:isUnresolved?void 0:isError2?"error":"success",dimColor:isUnresolved,children:!shouldAnimate||isBlinking||isError2||!isUnresolved?BLACK_CIRCLE:" "})})}var import_jsx_runtime178,init_ToolUseLoader=__esm({"src/components/ToolUseLoader.tsx"(){init_figures2();init_useBlink();init_ink();import_jsx_runtime178=__toESM(require_jsx_runtime());__name(ToolUseLoader,"ToolUseLoader")}});function AdvisorMessage({block,addMargin,resolvedToolUseIDs,erroredToolUseIDs,shouldAnimate,verbose,advisorModel}){if(block.type==="server_tool_use"){let input2=block.input&&Object.keys(block.input).length>0?jsonStringify(block.input):null;return(0,import_jsx_runtime179.jsxs)(ThemedBox_default,{marginTop:addMargin?1:0,paddingRight:2,flexDirection:"row",children:[(0,import_jsx_runtime179.jsx)(ToolUseLoader,{shouldAnimate,isUnresolved:!resolvedToolUseIDs.has(block.id),isError:erroredToolUseIDs.has(block.id)}),(0,import_jsx_runtime179.jsx)(ThemedText,{bold:!0,children:"Advising"}),advisorModel?(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[" using ",renderModelName(advisorModel)]}):null,input2?(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[" \xB7 ",input2]}):null]})}let body;switch(block.content.type){case"advisor_tool_result_error":body=(0,import_jsx_runtime179.jsxs)(ThemedText,{color:"error",children:["Advisor unavailable (",block.content.error_code,")"]});break;case"advisor_result":body=verbose?(0,import_jsx_runtime179.jsx)(ThemedText,{dimColor:!0,children:block.content.text}):(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.tick," Advisor has reviewed the conversation and will apply the feedback ",(0,import_jsx_runtime179.jsx)(CtrlOToExpand,{})]});break;case"advisor_redacted_result":body=(0,import_jsx_runtime179.jsxs)(ThemedText,{dimColor:!0,children:[figures_default.tick," Advisor has reviewed the conversation and will apply the feedback"]});break}return(0,import_jsx_runtime179.jsx)(ThemedBox_default,{paddingRight:2,children:(0,import_jsx_runtime179.jsx)(MessageResponse,{children:body})})}var import_jsx_runtime179,init_AdvisorMessage=__esm({"src/components/messages/AdvisorMessage.tsx"(){init_figures();init_ink();init_model3();init_slowOperations();init_CtrlOToExpand();init_MessageResponse();init_ToolUseLoader();import_jsx_runtime179=__toESM(require_jsx_runtime());__name(AdvisorMessage,"AdvisorMessage")}});function AssistantRedactedThinkingMessage({addMargin=!1}){return(0,import_jsx_runtime180.jsx)(ThemedBox_default,{marginTop:addMargin?1:0,children:(0,import_jsx_runtime180.jsx)(ThemedText,{dimColor:!0,italic:!0,children:"\u25C7 Thinking\u2026"})})}var import_jsx_runtime180,init_AssistantRedactedThinkingMessage=__esm({"src/components/messages/AssistantRedactedThinkingMessage.tsx"(){init_ink();import_jsx_runtime180=__toESM(require_jsx_runtime());__name(AssistantRedactedThinkingMessage,"AssistantRedactedThinkingMessage")}});function useClaudeAiLimits(){let[limits,setLimits]=(0,import_react129.useState)({...currentLimits});return(0,import_react129.useEffect)(()=>{let listener2=__name(newLimits=>{setLimits({...newLimits})},"listener");return statusListeners.add(listener2),()=>{statusListeners.delete(listener2)}},[]),limits}var import_react129,init_claudeAiLimitsHook=__esm({"src/services/claudeAiLimitsHook.ts"(){import_react129=__toESM(require_react());init_claudeAiLimits();__name(useClaudeAiLimits,"useClaudeAiLimits")}});function getUpsellMessage({shouldShowUpsell,isMax20x,isExtraUsageCommandEnabled,shouldAutoOpenRateLimitOptionsMenu,isTeamOrEnterprise,hasBillingAccess}){return shouldShowUpsell?isMax20x?isExtraUsageCommandEnabled?"/extra-usage to finish what you\u2019re working on.":"/login to switch to an API usage-billed account.":shouldAutoOpenRateLimitOptionsMenu?"Opening your options\u2026":!isTeamOrEnterprise&&!isExtraUsageCommandEnabled?"/upgrade to increase your usage limit.":isTeamOrEnterprise?isExtraUsageCommandEnabled?hasBillingAccess?"/extra-usage to finish what you\u2019re working on.":"/extra-usage to request more usage from your admin.":null:"/upgrade or /extra-usage to finish what you\u2019re working on.":null}function RateLimitMessage({text:text3,onOpenRateLimitOptions}){let subscriptionType=getSubscriptionType(),rateLimitTier=getRateLimitTier(),isTeamOrEnterprise=subscriptionType==="team"||subscriptionType==="enterprise",isMax20x=rateLimitTier==="default_claude_max_20x",shouldShowUpsell=shouldProcessMockLimits()||isClaudeAISubscriber(),canSeeRateLimitOptionsUpsell=shouldShowUpsell&&!isMax20x,[hasOpenedInteractiveMenu,setHasOpenedInteractiveMenu]=(0,import_react130.useState)(!1),claudeAiLimits=useClaudeAiLimits(),isCurrentlyRateLimited=claudeAiLimits.status==="rejected"&&claudeAiLimits.resetsAt!==void 0&&!claudeAiLimits.isUsingOverage,shouldAutoOpenRateLimitOptionsMenu=canSeeRateLimitOptionsUpsell&&!hasOpenedInteractiveMenu&&isCurrentlyRateLimited&&onOpenRateLimitOptions;(0,import_react130.useEffect)(()=>{shouldAutoOpenRateLimitOptionsMenu&&(setHasOpenedInteractiveMenu(!0),onOpenRateLimitOptions())},[shouldAutoOpenRateLimitOptionsMenu,onOpenRateLimitOptions]);let upsell=(0,import_react130.useMemo)(()=>{let message=getUpsellMessage({shouldShowUpsell,isMax20x,isExtraUsageCommandEnabled:extraUsage.isEnabled(),shouldAutoOpenRateLimitOptionsMenu:!!shouldAutoOpenRateLimitOptionsMenu,isTeamOrEnterprise,hasBillingAccess:hasClaudeAiBillingAccess()});return message?(0,import_jsx_runtime181.jsx)(ThemedText,{dimColor:!0,children:message}):null},[shouldShowUpsell,isMax20x,isTeamOrEnterprise,shouldAutoOpenRateLimitOptionsMenu]);return(0,import_jsx_runtime181.jsx)(MessageResponse,{children:(0,import_jsx_runtime181.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime181.jsx)(ThemedText,{color:"error",children:text3}),hasOpenedInteractiveMenu?null:upsell]})})}var import_react130,import_jsx_runtime181,init_RateLimitMessage=__esm({"src/components/messages/RateLimitMessage.tsx"(){import_react130=__toESM(require_react());init_extra_usage2();init_ink();init_claudeAiLimitsHook();init_rateLimitMocking();init_auth6();init_billing();init_MessageResponse();import_jsx_runtime181=__toESM(require_jsx_runtime());__name(getUpsellMessage,"getUpsellMessage");__name(RateLimitMessage,"RateLimitMessage")}});function InvalidApiKeyMessage(){let isKeychainLocked=isMacOsKeychainLocked();return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getInvalidApiKeyErrorMessage()}),isKeychainLocked&&(0,import_jsx_runtime182.jsx)(ThemedText,{dimColor:!0,children:"\xB7 Run in another terminal: security unlock-keychain"})]})})}function AssistantTextMessage({param:{text:text3},addMargin,shouldShowDot,verbose,onOpenRateLimitOptions}){let isSelected=(0,import_react131.useContext)(MessageActionsSelectedContext);if(isEmptyMessageText(text3))return null;if(isRateLimitErrorMessage(text3))return(0,import_jsx_runtime182.jsx)(RateLimitMessage,{text:text3,onOpenRateLimitOptions});switch(text3){case NO_RESPONSE_REQUESTED:return null;case PROMPT_TOO_LONG_ERROR_MESSAGE:{let upgradeHint=getUpgradeMessage("warning");return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsxs)(ThemedText,{color:"error",children:["Context limit reached \xB7 /compact or /clear to continue",upgradeHint?` \xB7 ${upgradeHint}`:""]})})}case CREDIT_BALANCE_TOO_LOW_ERROR_MESSAGE:return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:"Credit balance too low \xB7 Add funds: https://platform.\u0063laude.com/settings/billing"})});case getInvalidApiKeyErrorMessage():return(0,import_jsx_runtime182.jsx)(InvalidApiKeyMessage,{});case getInvalidApiKeyErrorMessageExternal():return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getInvalidApiKeyErrorMessageExternal()})});case getOrgDisabledErrorMessageEnvKey():case getOrgDisabledErrorMessageEnvKeyWithOauth():return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:text3})});case getTokenRevokedErrorMessage():return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getTokenRevokedErrorMessage()})});case getApiTimeoutErrorMessage():return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsxs)(ThemedText,{color:"error",children:[getApiTimeoutErrorMessage(),process.env.API_TIMEOUT_MS&&(0,import_jsx_runtime182.jsxs)(import_jsx_runtime182.Fragment,{children:[" ","(API_TIMEOUT_MS=",process.env.API_TIMEOUT_MS,"ms, try increasing it)"]})]})});case getCustomOffSwitchMessage():return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:getCustomOffSwitchMessage()}),(0,import_jsx_runtime182.jsxs)(ThemedText,{children:["To continue immediately, use /model to switch to"," ",renderModelName(getDefaultSonnetModel())," and continue coding."]})]})});case ERROR_MESSAGE_USER_ABORT:return(0,import_jsx_runtime182.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime182.jsx)(InterruptedByUser,{})});default:if(startsWithApiErrorPrefix(text3)){let truncated=!verbose&&text3.length>MAX_API_ERROR_CHARS;return(0,import_jsx_runtime182.jsx)(MessageResponse,{children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime182.jsx)(ThemedText,{color:"error",children:text3===API_ERROR_MESSAGE_PREFIX?`${API_ERROR_MESSAGE_PREFIX}: Please wait a moment and try again.`:truncated?text3.slice(0,MAX_API_ERROR_CHARS)+"\u2026":text3}),truncated&&(0,import_jsx_runtime182.jsx)(CtrlOToExpand,{})]})})}return(0,import_jsx_runtime182.jsx)(ThemedBox_default,{alignItems:"flex-start",flexDirection:"row",justifyContent:"space-between",marginTop:addMargin?1:0,width:"100%",backgroundColor:isSelected?"messageActionsBackground":void 0,children:(0,import_jsx_runtime182.jsxs)(ThemedBox_default,{flexDirection:"row",children:[shouldShowDot&&(0,import_jsx_runtime182.jsx)(NoSelect,{fromLeftEdge:!0,minWidth:2,children:(0,import_jsx_runtime182.jsx)(ThemedText,{color:isSelected?"suggestion":"text",children:BLACK_CIRCLE})}),(0,import_jsx_runtime182.jsx)(ThemedBox_default,{flexDirection:"column",children:(0,import_jsx_runtime182.jsx)(Markdown,{children:text3})})]})})}}var import_react131,import_jsx_runtime182,MAX_API_ERROR_CHARS,init_AssistantTextMessage=__esm({"src/components/messages/AssistantTextMessage.tsx"(){import_react131=__toESM(require_react());init_compact2();init_rateLimitMessages();init_figures2();init_ink();init_errors7();init_messages4();init_contextWindowUpgradeCheck();init_model3();init_macOsKeychainStorage();init_CtrlOToExpand();init_InterruptedByUser();init_Markdown();init_MessageResponse();init_messageActions();init_RateLimitMessage();import_jsx_runtime182=__toESM(require_jsx_runtime()),MAX_API_ERROR_CHARS=1e3;__name(InvalidApiKeyMessage,"InvalidApiKeyMessage");__name(AssistantTextMessage,"AssistantTextMessage")}});function AssistantThinkingMessage({param,addMargin=!1,isTranscriptMode,verbose,hideInTranscript=!1}){let thinking=param?.thinking||"";if(!thinking||hideInTranscript)return null;let shouldShowFullThinking=isTranscriptMode||verbose,label2="\u25C7 Thought",durationMs=param?.durationMs,tokenEstimate=thinking?Math.max(1,Math.floor(thinking.length/4)):0,durationLabel=durationMs?`Thought for ${(durationMs/1e3).toFixed(1)}s (${tokenEstimate} tokens)`:label2;if(!shouldShowFullThinking){let preview2="";if(thinking){let firstLine3=thinking.split(`
7943
7943
  `).find(l=>l.trim().length>0)?.trim().slice(0,100)||"";preview2=firstLine3?` \u2014 ${firstLine3}${firstLine3.length>=100?"\u2026":""}`:""}return(0,import_jsx_runtime183.jsx)(ThemedBox_default,{marginTop:addMargin?1:0,children:(0,import_jsx_runtime183.jsxs)(ThemedText,{dimColor:!0,italic:!0,children:[durationLabel,preview2," ",(0,import_jsx_runtime183.jsx)(CtrlOToExpand,{})]})})}return(0,import_jsx_runtime183.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,marginTop:addMargin?1:0,width:"100%",borderStyle:"round",paddingX:1,children:[(0,import_jsx_runtime183.jsxs)(ThemedText,{dimColor:!0,italic:!0,children:[durationLabel,"\u2026"]}),(0,import_jsx_runtime183.jsx)(ThemedBox_default,{paddingLeft:1,children:(0,import_jsx_runtime183.jsx)(Markdown,{dimColor:!0,children:thinking})}),(0,import_jsx_runtime183.jsx)(ThemedText,{dimColor:!0,italic:!0,children:"(Ctrl+O to collapse / toggle transcript)"})]})}var import_jsx_runtime183,init_AssistantThinkingMessage=__esm({"src/components/messages/AssistantThinkingMessage.tsx"(){init_ink();init_CtrlOToExpand();init_Markdown();import_jsx_runtime183=__toESM(require_jsx_runtime());__name(AssistantThinkingMessage,"AssistantThinkingMessage")}});function useIsClassifierChecking(toolUseID){return(0,import_react132.useSyncExternalStore)(subscribeClassifierChecking,()=>isClassifierChecking(toolUseID))}var import_react132,init_classifierApprovalsHook=__esm({"src/utils/classifierApprovalsHook.ts"(){import_react132=__toESM(require_react());init_classifierApprovals();__name(useIsClassifierChecking,"useIsClassifierChecking")}});var React77,SentryErrorBoundary,init_SentryErrorBoundary=__esm({"src/components/SentryErrorBoundary.ts"(){React77=__toESM(require_react()),SentryErrorBoundary=class extends React77.Component{static{__name(this,"SentryErrorBoundary")}constructor(props){super(props),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?null:this.props.children}}}});function HookProgressMessage({hookEvent,lookups,toolUseID,isTranscriptMode}){let inProgressHookCount=lookups.inProgressHookCounts.get(toolUseID)?.get(hookEvent)??0,resolvedHookCount=lookups.resolvedHookCounts.get(toolUseID)?.get(hookEvent)??0;return inProgressHookCount===0?null:hookEvent==="PreToolUse"||hookEvent==="PostToolUse"?isTranscriptMode?(0,import_jsx_runtime184.jsx)(MessageResponse,{children:(0,import_jsx_runtime184.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime184.jsxs)(ThemedText,{dimColor:!0,children:[inProgressHookCount," "]}),(0,import_jsx_runtime184.jsx)(ThemedText,{dimColor:!0,bold:!0,children:hookEvent}),(0,import_jsx_runtime184.jsxs)(ThemedText,{dimColor:!0,children:[inProgressHookCount===1?" hook":" hooks"," ran"]})]})}):null:resolvedHookCount===inProgressHookCount?null:(0,import_jsx_runtime184.jsx)(MessageResponse,{children:(0,import_jsx_runtime184.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime184.jsx)(ThemedText,{dimColor:!0,children:"Running "}),(0,import_jsx_runtime184.jsx)(ThemedText,{dimColor:!0,bold:!0,children:hookEvent}),(0,import_jsx_runtime184.jsx)(ThemedText,{dimColor:!0,children:inProgressHookCount===1?" hook\u2026":" hooks\u2026"})]})})}var import_jsx_runtime184,init_HookProgressMessage=__esm({"src/components/messages/HookProgressMessage.tsx"(){init_ink();init_MessageResponse();import_jsx_runtime184=__toESM(require_jsx_runtime());__name(HookProgressMessage,"HookProgressMessage")}});function AssistantToolUseMessage({param,addMargin,tools,commands,verbose,inProgressToolUseIDs,progressMessagesForMessage,shouldAnimate,shouldShowDot,inProgressToolCallCount,lookups,isTranscriptMode}){let terminalSize=useTerminalSize(),[theme2]=useTheme(),bg=useSelectedMessageBg(),pendingWorkerRequest=useAppStateMaybeOutsideOfProvider(state4=>state4.pendingWorkerRequest),isClassifierCheckingRaw=useIsClassifierChecking(param.id),permissionMode=useAppStateMaybeOutsideOfProvider(state4=>state4.toolPermissionContext.mode),hasStrippedRules=useAppStateMaybeOutsideOfProvider(state4=>!!state4.toolPermissionContext.strippedDangerousRules),isAutoClassifier=permissionMode==="auto"||permissionMode==="plan"&&hasStrippedRules,isClassifierChecking2=!1,toolFeedbackRenderMode=resolveToolFeedbackRenderMode(verbose),parsed=(0,import_react133.useMemo)(()=>{if(!tools)return null;let tool2=findToolByName(tools,param.name);if(!tool2)return null;let input3=tool2.inputSchema.safeParse(param.input),data=input3.success?input3.data:void 0;return{tool:tool2,input:input3,userFacingToolName:tool2.userFacingName(data),userFacingToolNameBackgroundColor:tool2.userFacingNameBackgroundColor?.(data),isTransparentWrapper:tool2.isTransparentWrapper?.()??!1}},[tools,param]);if(!parsed)return logError2(new Error(tools?`Tool ${param.name} not found`:`Tools array is undefined for tool ${param.name}`)),null;let{tool,input:input2,userFacingToolName,userFacingToolNameBackgroundColor,isTransparentWrapper}=parsed,isResolved=lookups.resolvedToolUseIDs.has(param.id),isQueued=!inProgressToolUseIDs.has(param.id)&&!isResolved,isWaitingForPermission=pendingWorkerRequest?.toolUseId===param.id;if(isTransparentWrapper)return isQueued||isResolved?null:(0,import_jsx_runtime185.jsx)(ThemedBox_default,{flexDirection:"column",width:"100%",backgroundColor:bg,children:renderToolUseProgressMessage9(tool,tools,lookups,param.id,progressMessagesForMessage,{verbose:toolFeedbackRenderMode.verbose,inProgressToolCallCount,isTranscriptMode},terminalSize)});if(userFacingToolName==="")return null;let renderedToolUseMessage=input2.success?renderToolUseMessage34(tool,input2.data,{theme:theme2,verbose:toolFeedbackRenderMode.verbose,commands}):null;return renderedToolUseMessage===null?null:(0,import_jsx_runtime185.jsx)(ThemedBox_default,{flexDirection:"row",justifyContent:"space-between",marginTop:addMargin?1:0,width:"100%",backgroundColor:bg,children:(0,import_jsx_runtime185.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime185.jsxs)(ThemedBox_default,{flexDirection:"row",flexWrap:"nowrap",minWidth:stringWidth(userFacingToolName)+(shouldShowDot?2:0),children:[shouldShowDot&&(isQueued?(0,import_jsx_runtime185.jsx)(ThemedBox_default,{minWidth:2,children:(0,import_jsx_runtime185.jsx)(ThemedText,{dimColor:isQueued,children:BLACK_CIRCLE})}):(0,import_jsx_runtime185.jsx)(ToolUseLoader,{shouldAnimate,isUnresolved:!isResolved,isError:lookups.erroredToolUseIDs.has(param.id)})),(0,import_jsx_runtime185.jsx)(ThemedBox_default,{flexShrink:0,children:(0,import_jsx_runtime185.jsx)(ThemedText,{bold:!0,wrap:"truncate-end",backgroundColor:userFacingToolNameBackgroundColor,color:userFacingToolNameBackgroundColor?"inverseText":void 0,children:userFacingToolName})}),renderedToolUseMessage!==""&&(0,import_jsx_runtime185.jsx)(ThemedBox_default,{flexWrap:"nowrap",children:(0,import_jsx_runtime185.jsxs)(ThemedText,{children:["(",renderedToolUseMessage,")"]})}),input2.success&&tool.renderToolUseTag&&tool.renderToolUseTag(input2.data)]}),!isResolved&&!isQueued&&(isClassifierChecking2?(0,import_jsx_runtime185.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime185.jsx)(ThemedText,{dimColor:!0,children:isAutoClassifier?"Auto classifier checking\u2026":"Bash classifier checking\u2026"})}):isWaitingForPermission?(0,import_jsx_runtime185.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime185.jsx)(ThemedText,{dimColor:!0,children:"Waiting for permission\u2026"})}):renderToolUseProgressMessage9(tool,tools,lookups,param.id,progressMessagesForMessage,{verbose:toolFeedbackRenderMode.verbose,inProgressToolCallCount,isTranscriptMode},terminalSize)),!isResolved&&isQueued&&renderToolUseQueuedMessage4(tool)]})})}function renderToolUseMessage34(tool,input2,{theme:theme2,verbose,commands}){try{let parsed=tool.inputSchema.safeParse(input2);return parsed.success?tool.renderToolUseMessage(parsed.data,{theme:theme2,verbose,commands}):""}catch(error40){return logError2(new Error(`Error rendering tool use message for ${tool.name}: ${error40}`)),""}}function renderToolUseProgressMessage9(tool,tools,lookups,toolUseID,progressMessagesForMessage,{verbose,inProgressToolCallCount,isTranscriptMode},terminalSize){let toolProgressMessages=progressMessagesForMessage.filter(msg=>msg.data.type!=="hook_progress");try{let toolMessages=tool.renderToolUseProgressMessage?.(toolProgressMessages,{tools,verbose,terminalSize,inProgressToolCallCount:inProgressToolCallCount??1,isTranscriptMode})??null;return(0,import_jsx_runtime185.jsxs)(import_jsx_runtime185.Fragment,{children:[(0,import_jsx_runtime185.jsx)(SentryErrorBoundary,{children:(0,import_jsx_runtime185.jsx)(HookProgressMessage,{hookEvent:"PreToolUse",lookups,toolUseID,verbose,isTranscriptMode})}),toolMessages]})}catch(error40){return logError2(new Error(`Error rendering tool use progress message for ${tool.name}: ${error40}`)),null}}function renderToolUseQueuedMessage4(tool){try{return tool.renderToolUseQueuedMessage?.()}catch(error40){return logError2(new Error(`Error rendering tool use queued message for ${tool.name}: ${error40}`)),null}}var import_react133,import_jsx_runtime185,init_AssistantToolUseMessage=__esm({"src/components/messages/AssistantToolUseMessage.tsx"(){import_react133=__toESM(require_react());init_useTerminalSize();init_figures2();init_stringWidth2();init_ink();init_AppState();init_Tool();init_classifierApprovalsHook();init_log3();init_MessageResponse();init_messageActions();init_SentryErrorBoundary();init_ToolUseLoader();init_feedbackPresentation();init_HookProgressMessage();import_jsx_runtime185=__toESM(require_jsx_runtime());__name(AssistantToolUseMessage,"AssistantToolUseMessage");__name(renderToolUseMessage34,"renderToolUseMessage");__name(renderToolUseProgressMessage9,"renderToolUseProgressMessage");__name(renderToolUseQueuedMessage4,"renderToolUseQueuedMessage")}});function getStatusColor(status2){switch(status2){case"completed":return"success";case"failed":return"error";case"killed":return"warning";default:return"text"}}function UserAgentNotificationMessage({addMargin,param:{text:text3}}){let summary=extractTag(text3,"summary");if(!summary)return null;let status2=extractTag(text3,"status"),color3=getStatusColor(status2);return(0,import_jsx_runtime186.jsx)(ThemedBox_default,{marginTop:addMargin?1:0,children:(0,import_jsx_runtime186.jsxs)(ThemedText,{children:[(0,import_jsx_runtime186.jsx)(ThemedText,{color:color3,children:BLACK_CIRCLE})," ",summary]})})}var import_jsx_runtime186,init_UserAgentNotificationMessage=__esm({"src/components/messages/UserAgentNotificationMessage.tsx"(){init_figures2();init_ink();init_messages4();import_jsx_runtime186=__toESM(require_jsx_runtime());__name(getStatusColor,"getStatusColor");__name(UserAgentNotificationMessage,"UserAgentNotificationMessage")}});function UserBashInputMessage({param:{text:text3},addMargin}){let input2=extractTag(text3,"bash-input");return input2?(0,import_jsx_runtime187.jsxs)(ThemedBox_default,{flexDirection:"row",marginTop:addMargin?1:0,backgroundColor:"bashMessageBackgroundColor",paddingRight:1,children:[(0,import_jsx_runtime187.jsx)(ThemedText,{color:"bashBorder",children:"! "}),(0,import_jsx_runtime187.jsx)(ThemedText,{bold:!0,color:"text",children:input2})]}):null}var import_jsx_runtime187,init_UserBashInputMessage=__esm({"src/components/messages/UserBashInputMessage.tsx"(){init_ink();init_messages4();import_jsx_runtime187=__toESM(require_jsx_runtime());__name(UserBashInputMessage,"UserBashInputMessage")}});function UserBashOutputMessage({content,verbose}){let rawStdout=extractTag(content,"bash-stdout")??"",stdout=extractTag(rawStdout,"persisted-output")??rawStdout,stderr=extractTag(content,"bash-stderr")??"";return(0,import_jsx_runtime188.jsx)(BashToolResultMessage,{content:{stdout,stderr},verbose:!!verbose})}var import_jsx_runtime188,init_UserBashOutputMessage=__esm({"src/components/messages/UserBashOutputMessage.tsx"(){init_BashToolResultMessage();init_messages4();import_jsx_runtime188=__toESM(require_jsx_runtime());__name(UserBashOutputMessage,"UserBashOutputMessage")}});function UserCommandMessage({addMargin,param:{text:text3}}){let commandMessage=extractTag(text3,COMMAND_MESSAGE_TAG),args=extractTag(text3,"command-args"),isSkillFormat=extractTag(text3,"skill-format")==="true";if(!commandMessage)return null;if(isSkillFormat)return(0,import_jsx_runtime189.jsx)(ThemedBox_default,{flexDirection:"column",marginTop:addMargin?1:0,backgroundColor:"userMessageBackground",paddingRight:1,children:(0,import_jsx_runtime189.jsxs)(ThemedText,{children:[(0,import_jsx_runtime189.jsxs)(ThemedText,{color:"subtle",children:[figures_default.pointer," "]}),(0,import_jsx_runtime189.jsxs)(ThemedText,{color:"text",children:["Skill(",commandMessage,")"]})]})});let content=`/${[commandMessage,args].filter(Boolean).join(" ")}`;return(0,import_jsx_runtime189.jsx)(ThemedBox_default,{flexDirection:"column",marginTop:addMargin?1:0,backgroundColor:"userMessageBackground",paddingRight:1,children:(0,import_jsx_runtime189.jsxs)(ThemedText,{children:[(0,import_jsx_runtime189.jsxs)(ThemedText,{color:"subtle",children:[figures_default.pointer," "]}),(0,import_jsx_runtime189.jsx)(ThemedText,{color:"text",children:content})]})})}var import_jsx_runtime189,init_UserCommandMessage=__esm({"src/components/messages/UserCommandMessage.tsx"(){init_figures();init_xml();init_ink();init_messages4();import_jsx_runtime189=__toESM(require_jsx_runtime());__name(UserCommandMessage,"UserCommandMessage")}});function UserLocalCommandOutputMessage({content}){let stdout=extractTag(content,"local-command-stdout"),stderr=extractTag(content,"local-command-stderr");if(!stdout&&!stderr)return(0,import_jsx_runtime190.jsx)(MessageResponse,{children:(0,import_jsx_runtime190.jsx)(ThemedText,{dimColor:!0,children:NO_CONTENT_MESSAGE})});let lines=[];return stdout?.trim()&&lines.push((0,import_jsx_runtime190.jsx)(IndentedContent,{children:stdout.trim()},"stdout")),stderr?.trim()&&lines.push((0,import_jsx_runtime190.jsx)(IndentedContent,{children:stderr.trim()},"stderr")),lines}function IndentedContent({children}){return children.startsWith(`${DIAMOND_OPEN} `)||children.startsWith(`${DIAMOND_FILLED} `)?(0,import_jsx_runtime190.jsx)(CloudLaunchContent,{children}):(0,import_jsx_runtime190.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime190.jsx)(ThemedText,{dimColor:!0,children:" \u23BF "}),(0,import_jsx_runtime190.jsx)(ThemedBox_default,{flexDirection:"column",flexGrow:1,children:(0,import_jsx_runtime190.jsx)(Markdown,{children})})]})}function CloudLaunchContent({children}){let diamond=children[0],nl=children.indexOf(`
7944
7944
  `),header=nl===-1?children.slice(2):children.slice(2,nl),rest2=nl===-1?"":children.slice(nl+1).trim(),sep36=header.indexOf(" \xB7 "),label2=sep36===-1?header:header.slice(0,sep36),suffix=sep36===-1?"":header.slice(sep36);return(0,import_jsx_runtime190.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime190.jsxs)(ThemedText,{children:[(0,import_jsx_runtime190.jsxs)(ThemedText,{color:"background",children:[diamond," "]}),(0,import_jsx_runtime190.jsx)(ThemedText,{bold:!0,children:label2}),suffix&&(0,import_jsx_runtime190.jsx)(ThemedText,{dimColor:!0,children:suffix})]}),rest2&&(0,import_jsx_runtime190.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime190.jsx)(ThemedText,{dimColor:!0,children:" \u23BF "}),(0,import_jsx_runtime190.jsx)(ThemedText,{dimColor:!0,children:rest2})]})]})}var import_jsx_runtime190,init_UserLocalCommandOutputMessage=__esm({"src/components/messages/UserLocalCommandOutputMessage.tsx"(){init_figures2();init_messages3();init_ink();init_messages4();init_Markdown();init_MessageResponse();import_jsx_runtime190=__toESM(require_jsx_runtime());__name(UserLocalCommandOutputMessage,"UserLocalCommandOutputMessage");__name(IndentedContent,"IndentedContent");__name(CloudLaunchContent,"CloudLaunchContent")}});function getSavingMessage(){return sample_default(["Got it.","Good to know.","Noted."])}function UserMemoryInputMessage({text:text3,addMargin}){let input2=extractTag(text3,"user-memory-input"),savingText=(0,import_react134.useMemo)(()=>getSavingMessage(),[]);return input2?(0,import_jsx_runtime191.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:addMargin?1:0,width:"100%",children:[(0,import_jsx_runtime191.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime191.jsx)(ThemedText,{color:"remember",backgroundColor:"memoryBackgroundColor",children:"#"}),(0,import_jsx_runtime191.jsxs)(ThemedText,{backgroundColor:"memoryBackgroundColor",color:"text",children:[" ",input2," "]})]}),(0,import_jsx_runtime191.jsx)(MessageResponse,{height:1,children:(0,import_jsx_runtime191.jsx)(ThemedText,{dimColor:!0,children:savingText})})]}):null}var import_react134,import_jsx_runtime191,init_UserMemoryInputMessage=__esm({"src/components/messages/UserMemoryInputMessage.tsx"(){init_sample();import_react134=__toESM(require_react());init_ink();init_messages4();init_MessageResponse();import_jsx_runtime191=__toESM(require_jsx_runtime());__name(getSavingMessage,"getSavingMessage");__name(UserMemoryInputMessage,"UserMemoryInputMessage")}});function countPlanSteps(plan2){if(!plan2)return 0;let lines=plan2.split(/\r?\n/),numbered=lines.filter(line=>/^\s{0,3}\d+\.\s+\S/.test(line)).length,bullets=lines.filter(line=>/^\s{0,3}[-*]\s+\S/.test(line)).length,headings=lines.filter(line=>/^#{1,6}\s+\S/.test(line)).length;return Math.max(numbered,bullets,headings)}function UserPlanMessage({addMargin,planContent}){let isZh7=resolveUiLocale()==="zh-CN",stepCount=countPlanSteps(planContent),heading=isZh7?"\u6267\u884C\u8BA1\u5212":"Plan to implement",subheading=isZh7?stepCount>0?`\u5171 ${stepCount} \u6B65 \xB7 \u5F85\u4F60\u6279\u51C6\u540E\u5F00\u59CB`:"\u5F85\u4F60\u6279\u51C6\u540E\u5F00\u59CB":stepCount>0?`${stepCount} step${stepCount===1?"":"s"} \xB7 awaiting your approval`:"awaiting your approval";return(0,import_jsx_runtime192.jsxs)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:"planMode",marginTop:addMargin?1:0,paddingX:1,children:[(0,import_jsx_runtime192.jsxs)(ThemedBox_default,{marginBottom:1,flexDirection:"column",children:[(0,import_jsx_runtime192.jsxs)(ThemedText,{bold:!0,color:"planMode",children:["\u25B8 ",heading]}),(0,import_jsx_runtime192.jsx)(ThemedText,{dimColor:!0,children:subheading})]}),(0,import_jsx_runtime192.jsx)(Markdown,{children:planContent})]})}var import_jsx_runtime192,init_UserPlanMessage=__esm({"src/components/messages/UserPlanMessage.tsx"(){init_ink();init_uiLocale();init_Markdown();import_jsx_runtime192=__toESM(require_jsx_runtime());__name(countPlanSteps,"countPlanSteps");__name(UserPlanMessage,"UserPlanMessage")}});function useQueuedMessage(){return React79.useContext(QueuedMessageContext)}var React79,import_jsx_runtime193,QueuedMessageContext,init_QueuedMessageContext=__esm({"src/context/QueuedMessageContext.tsx"(){React79=__toESM(require_react());init_ink();import_jsx_runtime193=__toESM(require_jsx_runtime()),QueuedMessageContext=React79.createContext(void 0);__name(useQueuedMessage,"useQueuedMessage")}});function formatBriefTimestamp(isoString,now3=new Date){let d=new Date(isoString);if(Number.isNaN(d.getTime()))return"";let locale=getLocale(),dayDiff=startOfDay(now3)-startOfDay(d),daysAgo=Math.round(dayDiff/864e5);return daysAgo===0?d.toLocaleTimeString(locale,{hour:"numeric",minute:"2-digit"}):daysAgo>0&&daysAgo<7?d.toLocaleString(locale,{weekday:"long",hour:"numeric",minute:"2-digit"}):d.toLocaleString(locale,{weekday:"long",month:"short",day:"numeric",hour:"numeric",minute:"2-digit"})}function getLocale(){let raw=process.env.LC_ALL||process.env.LC_TIME||process.env.LANG||"";if(!raw||raw==="C"||raw==="POSIX")return;let base=raw.split(".")[0].split("@")[0];if(!base)return;let tag2=base.replaceAll("_","-");try{return new Intl.DateTimeFormat(tag2),tag2}catch{return}}function startOfDay(d){return new Date(d.getFullYear(),d.getMonth(),d.getDate()).getTime()}var init_formatBriefTimestamp=__esm({"src/utils/formatBriefTimestamp.ts"(){__name(formatBriefTimestamp,"formatBriefTimestamp");__name(getLocale,"getLocale");__name(startOfDay,"startOfDay")}});function HighlightedThinkingText({text:text3,useBriefLayout,timestamp}){let isQueued=useQueuedMessage()?.isQueued??!1,pointerColor=(0,import_react135.useContext)(MessageActionsSelectedContext)?"suggestion":"subtle";if(useBriefLayout){let ts=timestamp?formatBriefTimestamp(timestamp):"";return(0,import_jsx_runtime194.jsxs)(ThemedBox_default,{flexDirection:"column",paddingLeft:2,children:[(0,import_jsx_runtime194.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime194.jsx)(ThemedText,{color:isQueued?"subtle":"briefLabelYou",children:"You"}),ts?(0,import_jsx_runtime194.jsxs)(ThemedText,{dimColor:!0,children:[" ",ts]}):null]}),(0,import_jsx_runtime194.jsx)(ThemedText,{color:isQueued?"subtle":"text",children:text3})]})}let triggers=isUltrathinkEnabled()?findThinkingTriggerPositions(text3):[];if(triggers.length===0)return(0,import_jsx_runtime194.jsxs)(ThemedText,{children:[(0,import_jsx_runtime194.jsxs)(ThemedText,{color:pointerColor,children:[figures_default.pointer," "]}),(0,import_jsx_runtime194.jsx)(ThemedText,{color:"text",children:text3})]});let parts=[],cursor=0;for(let t8 of triggers){t8.start>cursor&&parts.push((0,import_jsx_runtime194.jsx)(ThemedText,{color:"text",children:text3.slice(cursor,t8.start)},`plain-${cursor}`));for(let i3=t8.start;i3<t8.end;i3++)parts.push((0,import_jsx_runtime194.jsx)(ThemedText,{color:getRainbowColor(i3-t8.start),children:text3[i3]},`rb-${i3}`));cursor=t8.end}return cursor<text3.length&&parts.push((0,import_jsx_runtime194.jsx)(ThemedText,{color:"text",children:text3.slice(cursor)},`plain-${cursor}`)),(0,import_jsx_runtime194.jsxs)(ThemedText,{children:[(0,import_jsx_runtime194.jsxs)(ThemedText,{color:pointerColor,children:[figures_default.pointer," "]}),parts]})}var import_react135,import_jsx_runtime194,init_HighlightedThinkingText=__esm({"src/components/messages/HighlightedThinkingText.tsx"(){init_figures();import_react135=__toESM(require_react());init_QueuedMessageContext();init_ink();init_formatBriefTimestamp();init_thinking();init_messageActions();import_jsx_runtime194=__toESM(require_jsx_runtime());__name(HighlightedThinkingText,"HighlightedThinkingText")}});function UserPromptMessage({addMargin,param:{text:text3},isTranscriptMode,timestamp}){let{blocks:displayControlBlocks,remainder:promptText}=(0,import_react136.useMemo)(()=>parseLeadingDisplayControlBlocks(text3),[text3]),visibleDisplayControlBlocks=(0,import_react136.useMemo)(()=>displayControlBlocks.filter(isDisplayControlBlockVisible),[displayControlBlocks]),displayText=(0,import_react136.useMemo)(()=>{if(promptText.length<=MAX_DISPLAY_CHARS)return promptText;let head2=promptText.slice(0,TRUNCATE_HEAD_CHARS),tail2=promptText.slice(-TRUNCATE_TAIL_CHARS),hiddenLines=countCharInString(promptText,`
7945
7945
  `,TRUNCATE_HEAD_CHARS)-countCharInString(tail2,`
@@ -10022,7 +10022,7 @@ ${horizonText}`,maxTokens:8192},atAGlanceResult=await generateSectionInsight(atA
10022
10022
  </div>
10023
10023
  <script>${js}</script>
10024
10024
  </body>
10025
- </html>`}function buildExportData(data,insights,facets,remoteStats){let version3=typeof MACRO<"u"?"11.3.12":"unknown",remote_hosts_collected=remoteStats?.hosts.filter(h3=>h3.sessionCount>0).map(h3=>h3.name),facets_summary={total:facets.size,goal_categories:{},outcomes:{},satisfaction:{},friction:{}};for(let f3 of facets.values()){for(let[cat2,count4]of safeEntries(f3.goal_categories))count4>0&&(facets_summary.goal_categories[cat2]=(facets_summary.goal_categories[cat2]||0)+count4);facets_summary.outcomes[f3.outcome]=(facets_summary.outcomes[f3.outcome]||0)+1;for(let[level,count4]of safeEntries(f3.user_satisfaction_counts))count4>0&&(facets_summary.satisfaction[level]=(facets_summary.satisfaction[level]||0)+count4);for(let[type,count4]of safeEntries(f3.friction_counts))count4>0&&(facets_summary.friction[type]=(facets_summary.friction[type]||0)+count4)}return{metadata:{username:process.env.SAFEUSER||process.env.USER||"unknown",generated_at:new Date().toISOString(),claude_code_version:version3,date_range:data.date_range,session_count:data.total_sessions,...remote_hosts_collected&&remote_hosts_collected.length>0&&{remote_hosts_collected}},aggregated_data:data,insights,facets_summary}}async function scanAllSessions(){let projectsDir=getProjectsDir2(),dirents;try{dirents=await readdir41(projectsDir,{withFileTypes:!0})}catch{return[]}let projectDirs=dirents.filter(dirent=>dirent.isDirectory()).map(dirent=>join195(projectsDir,dirent.name)),allSessions=[];for(let i3=0;i3<projectDirs.length;i3++){let sessionFiles=await getSessionFilesWithMtime(projectDirs[i3]);for(let[sessionId,fileInfo]of sessionFiles)allSessions.push({sessionId,path:fileInfo.path,mtime:fileInfo.mtime,size:fileInfo.size});i3%10===9&&await new Promise(resolve64=>setImmediate(resolve64))}return allSessions.sort((a2,b3)=>b3.mtime-a2.mtime),allSessions}async function generateUsageReport(options){let remoteStats;if(process.env.USER_TYPE==="ant"&&options?.collectRemote){let destDir=join195(getClaudeConfigHomeDir(),"projects"),{hosts,totalCopied}=await collectAllRemoteHostData(destDir);remoteStats={hosts,totalCopied}}let allScannedSessions=await scanAllSessions(),totalSessionsScanned=allScannedSessions.length,META_BATCH_SIZE=50,MAX_SESSIONS_TO_LOAD=200,allMetas=[],uncachedSessions=[];for(let i3=0;i3<allScannedSessions.length;i3+=META_BATCH_SIZE){let batch2=allScannedSessions.slice(i3,i3+META_BATCH_SIZE),results=await Promise.all(batch2.map(async sessionInfo=>({sessionInfo,cached:await loadCachedSessionMeta(sessionInfo.sessionId)})));for(let{sessionInfo,cached:cached3}of results)cached3?allMetas.push(cached3):uncachedSessions.length<MAX_SESSIONS_TO_LOAD&&uncachedSessions.push(sessionInfo)}let logsForFacets=new Map,isMetaSession=__name(log4=>{for(let msg of log4.messages.slice(0,5))if(msg.type==="user"&&msg.message){let content=msg.message.content;if(typeof content=="string"&&(content.includes("RESPOND WITH ONLY A VALID JSON OBJECT")||content.includes("record_facets")))return!0}return!1},"isMetaSession"),LOAD_BATCH_SIZE=10;for(let i3=0;i3<uncachedSessions.length;i3+=LOAD_BATCH_SIZE){let batch2=uncachedSessions.slice(i3,i3+LOAD_BATCH_SIZE),batchResults=await Promise.all(batch2.map(async sessionInfo=>{try{return await loadAllLogsFromSessionFile(sessionInfo.path)}catch{return[]}})),metasToSave=[];for(let logs2 of batchResults)for(let log4 of logs2){if(isMetaSession(log4)||!hasValidDates(log4))continue;let meta=logToSessionMeta(log4);allMetas.push(meta),metasToSave.push(meta),logsForFacets.set(meta.session_id,log4)}await Promise.all(metasToSave.map(meta=>saveSessionMeta(meta)))}let bestBySession=new Map;for(let meta of allMetas){let existing=bestBySession.get(meta.session_id);(!existing||meta.user_message_count>existing.user_message_count||meta.user_message_count===existing.user_message_count&&meta.duration_minutes>existing.duration_minutes)&&bestBySession.set(meta.session_id,meta)}let keptSessionIds=new Set(bestBySession.keys());allMetas=[...bestBySession.values()];for(let sessionId of logsForFacets.keys())keptSessionIds.has(sessionId)||logsForFacets.delete(sessionId);allMetas.sort((a2,b3)=>b3.start_time.localeCompare(a2.start_time));let isSubstantiveSession=__name(meta=>!(meta.user_message_count<2||meta.duration_minutes<1),"isSubstantiveSession"),substantiveMetas=allMetas.filter(isSubstantiveSession),facets=new Map,toExtract=[],MAX_FACET_EXTRACTIONS=50,cachedFacetResults=await Promise.all(substantiveMetas.map(async meta=>({sessionId:meta.session_id,cached:await loadCachedFacets(meta.session_id)})));for(let{sessionId,cached:cached3}of cachedFacetResults)if(cached3)facets.set(sessionId,cached3);else{let log4=logsForFacets.get(sessionId);log4&&toExtract.length<MAX_FACET_EXTRACTIONS&&toExtract.push({log:log4,sessionId})}let CONCURRENCY=50;for(let i3=0;i3<toExtract.length;i3+=CONCURRENCY){let batch2=toExtract.slice(i3,i3+CONCURRENCY),results=await Promise.all(batch2.map(async({log:log4,sessionId})=>{let newFacets=await extractFacetsFromAPI(log4,sessionId);return{sessionId,newFacets}})),facetsToSave=[];for(let{sessionId,newFacets}of results)newFacets&&(facets.set(sessionId,newFacets),facetsToSave.push(newFacets));await Promise.all(facetsToSave.map(f3=>saveFacets(f3)))}let isMinimalSession=__name(sessionId=>{let sessionFacets=facets.get(sessionId);if(!sessionFacets)return!1;let cats=sessionFacets.goal_categories,catKeys=safeKeys(cats).filter(k2=>(cats[k2]??0)>0);return catKeys.length===1&&catKeys[0]==="warmup_minimal"},"isMinimalSession"),substantiveSessions=substantiveMetas.filter(s2=>!isMinimalSession(s2.session_id)),substantiveFacets=new Map;for(let[sessionId,f3]of facets)isMinimalSession(sessionId)||substantiveFacets.set(sessionId,f3);let aggregated=aggregateData(substantiveSessions,substantiveFacets);aggregated.total_sessions_scanned=totalSessionsScanned;let insights=await generateParallelInsights(aggregated,facets),htmlReport=generateHtmlReport(aggregated,insights);try{await mkdir61(getDataDir(),{recursive:!0})}catch{}let htmlPath=join195(getDataDir(),"report.html");return await writeFile65(htmlPath,htmlReport,{encoding:"utf-8",mode:384}),{insights,htmlPath,data:aggregated,remoteStats,facets:substantiveFacets}}function safeEntries(obj){return obj?Object.entries(obj):[]}function safeKeys(obj){return obj?Object.keys(obj):[]}function createUsageReportCommand(){let commandMessages=getCommandMessages2();return{type:"prompt",name:"insights",description:commandMessages.insightsDescription,contentLength:0,progressMessage:commandMessages.insightsProgress,source:"builtin",async getPromptForCommand(args){let collectRemote=!1,remoteHosts=[],hasRemoteHosts=!1;process.env.USER_TYPE==="ant"&&(collectRemote=args?.includes("--homespaces")??!1,remoteHosts=await getRunningRemoteHosts(),hasRemoteHosts=remoteHosts.length>0,collectRemote&&hasRemoteHosts&&console.error(`Collecting sessions from ${remoteHosts.length} homespace(s): ${remoteHosts.join(", ")}...`));let{insights,htmlPath,data,remoteStats}=await generateUsageReport({collectRemote}),reportUrl=`file://${htmlPath}`,uploadHint="";if(process.env.USER_TYPE==="ant"){let timestamp=new Date().toISOString().replace(/[-:]/g,"").replace("T","_").slice(0,15),filename=`${process.env.SAFEUSER||process.env.USER||"unknown"}_insights_${timestamp}.html`,s3Path=`s3://anthropic-serve/atamkin/cc-user-reports/${filename}`,s3Url=`https://s3-frontend.infra.ant.dev/anthropic-serve/atamkin/cc-user-reports/${filename}`;reportUrl=s3Url;try{execFileSync3("ff",["cp",htmlPath,s3Path],{timeout:6e4,stdio:"pipe"})}catch{reportUrl=`file://${htmlPath}`,uploadHint=`
10025
+ </html>`}function buildExportData(data,insights,facets,remoteStats){let version3=typeof MACRO<"u"?"11.3.13":"unknown",remote_hosts_collected=remoteStats?.hosts.filter(h3=>h3.sessionCount>0).map(h3=>h3.name),facets_summary={total:facets.size,goal_categories:{},outcomes:{},satisfaction:{},friction:{}};for(let f3 of facets.values()){for(let[cat2,count4]of safeEntries(f3.goal_categories))count4>0&&(facets_summary.goal_categories[cat2]=(facets_summary.goal_categories[cat2]||0)+count4);facets_summary.outcomes[f3.outcome]=(facets_summary.outcomes[f3.outcome]||0)+1;for(let[level,count4]of safeEntries(f3.user_satisfaction_counts))count4>0&&(facets_summary.satisfaction[level]=(facets_summary.satisfaction[level]||0)+count4);for(let[type,count4]of safeEntries(f3.friction_counts))count4>0&&(facets_summary.friction[type]=(facets_summary.friction[type]||0)+count4)}return{metadata:{username:process.env.SAFEUSER||process.env.USER||"unknown",generated_at:new Date().toISOString(),claude_code_version:version3,date_range:data.date_range,session_count:data.total_sessions,...remote_hosts_collected&&remote_hosts_collected.length>0&&{remote_hosts_collected}},aggregated_data:data,insights,facets_summary}}async function scanAllSessions(){let projectsDir=getProjectsDir2(),dirents;try{dirents=await readdir41(projectsDir,{withFileTypes:!0})}catch{return[]}let projectDirs=dirents.filter(dirent=>dirent.isDirectory()).map(dirent=>join195(projectsDir,dirent.name)),allSessions=[];for(let i3=0;i3<projectDirs.length;i3++){let sessionFiles=await getSessionFilesWithMtime(projectDirs[i3]);for(let[sessionId,fileInfo]of sessionFiles)allSessions.push({sessionId,path:fileInfo.path,mtime:fileInfo.mtime,size:fileInfo.size});i3%10===9&&await new Promise(resolve64=>setImmediate(resolve64))}return allSessions.sort((a2,b3)=>b3.mtime-a2.mtime),allSessions}async function generateUsageReport(options){let remoteStats;if(process.env.USER_TYPE==="ant"&&options?.collectRemote){let destDir=join195(getClaudeConfigHomeDir(),"projects"),{hosts,totalCopied}=await collectAllRemoteHostData(destDir);remoteStats={hosts,totalCopied}}let allScannedSessions=await scanAllSessions(),totalSessionsScanned=allScannedSessions.length,META_BATCH_SIZE=50,MAX_SESSIONS_TO_LOAD=200,allMetas=[],uncachedSessions=[];for(let i3=0;i3<allScannedSessions.length;i3+=META_BATCH_SIZE){let batch2=allScannedSessions.slice(i3,i3+META_BATCH_SIZE),results=await Promise.all(batch2.map(async sessionInfo=>({sessionInfo,cached:await loadCachedSessionMeta(sessionInfo.sessionId)})));for(let{sessionInfo,cached:cached3}of results)cached3?allMetas.push(cached3):uncachedSessions.length<MAX_SESSIONS_TO_LOAD&&uncachedSessions.push(sessionInfo)}let logsForFacets=new Map,isMetaSession=__name(log4=>{for(let msg of log4.messages.slice(0,5))if(msg.type==="user"&&msg.message){let content=msg.message.content;if(typeof content=="string"&&(content.includes("RESPOND WITH ONLY A VALID JSON OBJECT")||content.includes("record_facets")))return!0}return!1},"isMetaSession"),LOAD_BATCH_SIZE=10;for(let i3=0;i3<uncachedSessions.length;i3+=LOAD_BATCH_SIZE){let batch2=uncachedSessions.slice(i3,i3+LOAD_BATCH_SIZE),batchResults=await Promise.all(batch2.map(async sessionInfo=>{try{return await loadAllLogsFromSessionFile(sessionInfo.path)}catch{return[]}})),metasToSave=[];for(let logs2 of batchResults)for(let log4 of logs2){if(isMetaSession(log4)||!hasValidDates(log4))continue;let meta=logToSessionMeta(log4);allMetas.push(meta),metasToSave.push(meta),logsForFacets.set(meta.session_id,log4)}await Promise.all(metasToSave.map(meta=>saveSessionMeta(meta)))}let bestBySession=new Map;for(let meta of allMetas){let existing=bestBySession.get(meta.session_id);(!existing||meta.user_message_count>existing.user_message_count||meta.user_message_count===existing.user_message_count&&meta.duration_minutes>existing.duration_minutes)&&bestBySession.set(meta.session_id,meta)}let keptSessionIds=new Set(bestBySession.keys());allMetas=[...bestBySession.values()];for(let sessionId of logsForFacets.keys())keptSessionIds.has(sessionId)||logsForFacets.delete(sessionId);allMetas.sort((a2,b3)=>b3.start_time.localeCompare(a2.start_time));let isSubstantiveSession=__name(meta=>!(meta.user_message_count<2||meta.duration_minutes<1),"isSubstantiveSession"),substantiveMetas=allMetas.filter(isSubstantiveSession),facets=new Map,toExtract=[],MAX_FACET_EXTRACTIONS=50,cachedFacetResults=await Promise.all(substantiveMetas.map(async meta=>({sessionId:meta.session_id,cached:await loadCachedFacets(meta.session_id)})));for(let{sessionId,cached:cached3}of cachedFacetResults)if(cached3)facets.set(sessionId,cached3);else{let log4=logsForFacets.get(sessionId);log4&&toExtract.length<MAX_FACET_EXTRACTIONS&&toExtract.push({log:log4,sessionId})}let CONCURRENCY=50;for(let i3=0;i3<toExtract.length;i3+=CONCURRENCY){let batch2=toExtract.slice(i3,i3+CONCURRENCY),results=await Promise.all(batch2.map(async({log:log4,sessionId})=>{let newFacets=await extractFacetsFromAPI(log4,sessionId);return{sessionId,newFacets}})),facetsToSave=[];for(let{sessionId,newFacets}of results)newFacets&&(facets.set(sessionId,newFacets),facetsToSave.push(newFacets));await Promise.all(facetsToSave.map(f3=>saveFacets(f3)))}let isMinimalSession=__name(sessionId=>{let sessionFacets=facets.get(sessionId);if(!sessionFacets)return!1;let cats=sessionFacets.goal_categories,catKeys=safeKeys(cats).filter(k2=>(cats[k2]??0)>0);return catKeys.length===1&&catKeys[0]==="warmup_minimal"},"isMinimalSession"),substantiveSessions=substantiveMetas.filter(s2=>!isMinimalSession(s2.session_id)),substantiveFacets=new Map;for(let[sessionId,f3]of facets)isMinimalSession(sessionId)||substantiveFacets.set(sessionId,f3);let aggregated=aggregateData(substantiveSessions,substantiveFacets);aggregated.total_sessions_scanned=totalSessionsScanned;let insights=await generateParallelInsights(aggregated,facets),htmlReport=generateHtmlReport(aggregated,insights);try{await mkdir61(getDataDir(),{recursive:!0})}catch{}let htmlPath=join195(getDataDir(),"report.html");return await writeFile65(htmlPath,htmlReport,{encoding:"utf-8",mode:384}),{insights,htmlPath,data:aggregated,remoteStats,facets:substantiveFacets}}function safeEntries(obj){return obj?Object.entries(obj):[]}function safeKeys(obj){return obj?Object.keys(obj):[]}function createUsageReportCommand(){let commandMessages=getCommandMessages2();return{type:"prompt",name:"insights",description:commandMessages.insightsDescription,contentLength:0,progressMessage:commandMessages.insightsProgress,source:"builtin",async getPromptForCommand(args){let collectRemote=!1,remoteHosts=[],hasRemoteHosts=!1;process.env.USER_TYPE==="ant"&&(collectRemote=args?.includes("--homespaces")??!1,remoteHosts=await getRunningRemoteHosts(),hasRemoteHosts=remoteHosts.length>0,collectRemote&&hasRemoteHosts&&console.error(`Collecting sessions from ${remoteHosts.length} homespace(s): ${remoteHosts.join(", ")}...`));let{insights,htmlPath,data,remoteStats}=await generateUsageReport({collectRemote}),reportUrl=`file://${htmlPath}`,uploadHint="";if(process.env.USER_TYPE==="ant"){let timestamp=new Date().toISOString().replace(/[-:]/g,"").replace("T","_").slice(0,15),filename=`${process.env.SAFEUSER||process.env.USER||"unknown"}_insights_${timestamp}.html`,s3Path=`s3://anthropic-serve/atamkin/cc-user-reports/${filename}`,s3Url=`https://s3-frontend.infra.ant.dev/anthropic-serve/atamkin/cc-user-reports/${filename}`;reportUrl=s3Url;try{execFileSync3("ff",["cp",htmlPath,s3Path],{timeout:6e4,stdio:"pipe"})}catch{reportUrl=`file://${htmlPath}`,uploadHint=`
10026
10026
  Automatic upload failed. Are you on the boron namespace? Try \`use-bo\` and ensure you've run \`sso\`.
10027
10027
  To share, run: ff cp ${htmlPath} ${s3Path}
10028
10028
  Then access at: ${s3Url}`}}let stats2=[data.total_sessions_scanned&&data.total_sessions_scanned>data.total_sessions?`${data.total_sessions_scanned.toLocaleString()} sessions total \xB7 ${data.total_sessions} analyzed`:`${data.total_sessions} sessions`,`${data.total_messages.toLocaleString()} messages`,`${Math.round(data.total_duration_hours)}h`,`${data.git_commits} commits`].join(" \xB7 "),remoteInfo="";if(process.env.USER_TYPE==="ant")if(remoteStats&&remoteStats.totalCopied>0){let hsNames=remoteStats.hosts.filter(h3=>h3.sessionCount>0).map(h3=>h3.name).join(", ");remoteInfo=`
@@ -10213,7 +10213,7 @@ Find something genuinely interesting or amusing from the session summaries.`,max
10213
10213
  `).join("");await writeFile66(agentFile,agentContent,{encoding:"utf8",mode:384})}logForDebugging(`Hydrated ${subagentEvents.length} subagent entries across ${byAgent.size} agents`)}}return logForDiagnosticsNoPII("info","hydrate_ccr_v2_completed",{duration_ms:Date.now()-startMs,event_count:events2.length,subagent_event_count:subagentEventCount}),events2.length>0}catch(error40){if(error40 instanceof Error&&error40.message==="CCRClient: Epoch mismatch (409)")throw error40;return logForDebugging(`Error hydrating session from CCR v2: ${error40}`),logForDiagnosticsNoPII("error","hydrate_ccr_v2_fail"),!1}}function extractFirstPrompt2(transcript){let textContent=getFirstMeaningfulUserMessageTextContent(transcript);if(textContent){let result2=textContent.replace(/\n/g," ").trim();return result2.length>200&&(result2=result2.slice(0,200).trim()+"\u2026"),result2}return"No prompt"}function getFirstMeaningfulUserMessageTextContent(transcript){for(let msg of transcript){if(msg.type!=="user"||msg.isMeta||"isCompactSummary"in msg&&msg.isCompactSummary)continue;let content=msg.message?.content;if(!content)continue;let texts=[];if(typeof content=="string")texts.push(content);else if(Array.isArray(content))for(let block of content)block.type==="text"&&block.text&&texts.push(block.text);for(let textContent of texts){if(!textContent)continue;let commandNameTag=extractTag(textContent,COMMAND_NAME_TAG);if(commandNameTag){let commandName=commandNameTag.replace(/^\//,"");if(builtInCommandNames().has(commandName))continue;{let commandArgs=extractTag(textContent,"command-args")?.trim();if(!commandArgs)continue;return`${commandNameTag} ${commandArgs}`}}let bashInput=extractTag(textContent,"bash-input");if(bashInput)return`! ${bashInput}`;if(!SKIP_FIRST_PROMPT_PATTERN2.test(textContent))return textContent}}}function removeExtraFields(transcript){return transcript.map(m3=>{let{isSidechain,parentUuid,...serializedMessage}=m3;return serializedMessage})}function applyPreservedSegmentRelinks(messages){let lastSeg,lastSegBoundaryIdx=-1,absoluteLastBoundaryIdx=-1,entryIndex=new Map,i3=0;for(let entry of messages.values()){if(entryIndex.set(entry.uuid,i3),isCompactBoundaryMessage(entry)){absoluteLastBoundaryIdx=i3;let seg=entry.compactMetadata?.preservedSegment;seg&&(lastSeg=seg,lastSegBoundaryIdx=i3)}i3++}if(!lastSeg)return;let segIsLive=lastSegBoundaryIdx===absoluteLastBoundaryIdx,preservedUuids=new Set;if(segIsLive){let walkSeen=new Set,cur=messages.get(lastSeg.tailUuid),reachedHead=!1;for(;cur&&!walkSeen.has(cur.uuid);){if(walkSeen.add(cur.uuid),preservedUuids.add(cur.uuid),cur.uuid===lastSeg.headUuid){reachedHead=!0;break}cur=cur.parentUuid?messages.get(cur.parentUuid):void 0}if(!reachedHead){logEvent("tengu_relink_walk_broken",{tailInTranscript:messages.has(lastSeg.tailUuid),headInTranscript:messages.has(lastSeg.headUuid),anchorInTranscript:messages.has(lastSeg.anchorUuid),walkSteps:walkSeen.size,transcriptSize:messages.size});return}}if(segIsLive){let head2=messages.get(lastSeg.headUuid);head2&&messages.set(lastSeg.headUuid,{...head2,parentUuid:lastSeg.anchorUuid});for(let[uuid3,msg]of messages)msg.parentUuid===lastSeg.anchorUuid&&uuid3!==lastSeg.headUuid&&messages.set(uuid3,{...msg,parentUuid:lastSeg.tailUuid});for(let uuid3 of preservedUuids){let msg=messages.get(uuid3);msg?.type==="assistant"&&messages.set(uuid3,{...msg,message:{...msg.message,usage:{...msg.message.usage,input_tokens:0,output_tokens:0,cache_creation_input_tokens:0,cache_read_input_tokens:0}}})}}let toDelete=[];for(let[uuid3]of messages){let idx=entryIndex.get(uuid3);idx!==void 0&&idx<absoluteLastBoundaryIdx&&!preservedUuids.has(uuid3)&&toDelete.push(uuid3)}for(let uuid3 of toDelete)messages.delete(uuid3)}function applySnipRemovals(messages){let toDelete=new Set;for(let entry of messages.values()){let removedUuids=entry.snipMetadata?.removedUuids;if(removedUuids)for(let uuid3 of removedUuids)toDelete.add(uuid3)}if(toDelete.size===0)return;let deletedParent=new Map,removedCount=0;for(let uuid3 of toDelete){let entry=messages.get(uuid3);entry&&(deletedParent.set(uuid3,entry.parentUuid),messages.delete(uuid3),removedCount++)}let resolve64=__name(start=>{let path36=[],cur=start;for(;cur&&toDelete.has(cur);)if(path36.push(cur),cur=deletedParent.get(cur),cur===void 0){cur=null;break}for(let p of path36)deletedParent.set(p,cur);return cur},"resolve"),relinkedCount=0;for(let[uuid3,msg]of messages)!msg.parentUuid||!toDelete.has(msg.parentUuid)||(messages.set(uuid3,{...msg,parentUuid:resolve64(msg.parentUuid)}),relinkedCount++);logEvent("tengu_snip_resume_filtered",{removed_count:removedCount,relinked_count:relinkedCount})}function findLatestMessage(messages,predicate){let latest,maxTime=-1/0;for(let m3 of messages){if(!predicate(m3))continue;let t8=Date.parse(m3.timestamp);t8>maxTime&&(maxTime=t8,latest=m3)}return latest}function buildConversationChain(messages,leafMessage){let transcript=[],seen=new Set,currentMsg=leafMessage;for(;currentMsg;){if(seen.has(currentMsg.uuid)){logError2(new Error(`Cycle detected in parentUuid chain at message ${currentMsg.uuid}. Returning partial transcript.`)),logEvent("tengu_chain_parent_cycle",{});break}seen.add(currentMsg.uuid),transcript.push(currentMsg),currentMsg=currentMsg.parentUuid?messages.get(currentMsg.parentUuid):void 0}return transcript.reverse(),recoverOrphanedParallelToolResults(messages,transcript,seen)}function recoverOrphanedParallelToolResults(messages,chain2,seen){let chainAssistants=chain2.filter(m3=>m3.type==="assistant");if(chainAssistants.length===0)return chain2;let anchorByMsgId=new Map;for(let a2 of chainAssistants)a2.message.id&&anchorByMsgId.set(a2.message.id,a2);let siblingsByMsgId=new Map,toolResultsByAsst=new Map;for(let m3 of messages.values())if(m3.type==="assistant"&&m3.message.id){let group=siblingsByMsgId.get(m3.message.id);group?group.push(m3):siblingsByMsgId.set(m3.message.id,[m3])}else if(m3.type==="user"&&m3.parentUuid&&Array.isArray(m3.message.content)&&m3.message.content.some(b3=>b3.type==="tool_result")){let group=toolResultsByAsst.get(m3.parentUuid);group?group.push(m3):toolResultsByAsst.set(m3.parentUuid,[m3])}let processedGroups=new Set,inserts=new Map,recoveredCount=0;for(let asst of chainAssistants){let msgId=asst.message.id;if(!msgId||processedGroups.has(msgId))continue;processedGroups.add(msgId);let group=siblingsByMsgId.get(msgId)??[asst],orphanedSiblings=group.filter(s2=>!seen.has(s2.uuid)),orphanedTRs=[];for(let member of group){let trs=toolResultsByAsst.get(member.uuid);if(trs)for(let tr of trs)seen.has(tr.uuid)||orphanedTRs.push(tr)}if(orphanedSiblings.length===0&&orphanedTRs.length===0)continue;orphanedSiblings.sort((a2,b3)=>a2.timestamp.localeCompare(b3.timestamp)),orphanedTRs.sort((a2,b3)=>a2.timestamp.localeCompare(b3.timestamp));let anchor=anchorByMsgId.get(msgId),recovered=[...orphanedSiblings,...orphanedTRs];for(let r2 of recovered)seen.add(r2.uuid);recoveredCount+=recovered.length,inserts.set(anchor.uuid,recovered)}if(recoveredCount===0)return chain2;logEvent("tengu_chain_parallel_tr_recovered",{recovered_count:recoveredCount});let result2=[];for(let m3 of chain2){result2.push(m3);let toInsert=inserts.get(m3.uuid);toInsert&&result2.push(...toInsert)}return result2}function checkResumeConsistency(chain2,options={}){let result2=computeResumeConsistency(chain2,options.fullMessageMap?{fullMessageMap:options.fullMessageMap}:{});return result2&&logEvent("tengu_resume_consistency_delta",{expected:result2.expected,actual:result2.actual,delta:result2.delta,chain_length:result2.chainLength,checkpoint_age_entries:result2.chainLength-1-result2.actual,reason:result2.reason?1:0,lost_user_assistant_count:result2.lostUserAssistantCount,compact_boundary_count:result2.compactBoundaryCount}),result2}function buildFileHistorySnapshotChain(fileHistorySnapshots,conversation){let snapshots=[],indexByMessageId=new Map;for(let message of conversation){let snapshotMessage=fileHistorySnapshots.get(message.uuid);if(!snapshotMessage)continue;let{snapshot:snapshot2,isSnapshotUpdate}=snapshotMessage,existingIndex=isSnapshotUpdate?indexByMessageId.get(snapshot2.messageId):void 0;existingIndex===void 0?(indexByMessageId.set(snapshot2.messageId,snapshots.length),snapshots.push(snapshot2)):snapshots[existingIndex]=snapshot2}return snapshots}function buildAttributionSnapshotChain(attributionSnapshots,_conversation){return Array.from(attributionSnapshots.values())}async function loadTranscriptFromFile(filePath){if(filePath.endsWith(".jsonl")){let{messages:messages2,summaries,customTitles,tags,fileHistorySnapshots,attributionSnapshots,contextCollapseCommits,contextCollapseSnapshot,leafUuids,contentReplacements,worktreeStates}=await loadTranscriptFile(filePath);if(messages2.size===0)throw new Error("No messages found in JSONL file");let leafMessage=findLatestMessage(messages2.values(),msg=>leafUuids.has(msg.uuid));if(!leafMessage)throw new Error("No valid conversation chain found in JSONL file");let transcript=buildConversationChain(messages2,leafMessage),summary=summaries.get(leafMessage.uuid),customTitle=customTitles.get(leafMessage.sessionId),tag2=tags.get(leafMessage.sessionId),sessionId=leafMessage.sessionId;return{...convertToLogOption(transcript,0,summary,customTitle,buildFileHistorySnapshotChain(fileHistorySnapshots,transcript),tag2,filePath,buildAttributionSnapshotChain(attributionSnapshots,transcript),void 0,contentReplacements.get(sessionId)??[]),contextCollapseCommits:contextCollapseCommits.filter(e2=>e2.sessionId===sessionId),contextCollapseSnapshot:contextCollapseSnapshot?.sessionId===sessionId?contextCollapseSnapshot:void 0,worktreeSession:worktreeStates.has(sessionId)?worktreeStates.get(sessionId):void 0}}let content=await readFile73(filePath,{encoding:"utf-8"}),parsed;try{parsed=jsonParse(content)}catch(error40){throw new Error(`Invalid JSON in transcript file: ${error40}`)}let messages;if(Array.isArray(parsed))messages=parsed;else if(parsed&&typeof parsed=="object"&&"messages"in parsed){if(!Array.isArray(parsed.messages))throw new Error("Transcript messages must be an array");messages=parsed.messages}else throw new Error("Transcript must be an array of messages or an object with a messages array");return convertToLogOption(messages,0,void 0,void 0,void 0,void 0,filePath)}function hasVisibleUserContent(message){if(message.type!=="user"||message.isMeta)return!1;let content=message.message?.content;return content?typeof content=="string"?content.trim().length>0:Array.isArray(content)?content.some(block=>block.type==="text"||block.type==="image"||block.type==="document"):!1:!1}function hasVisibleAssistantContent(message){if(message.type!=="assistant")return!1;let content=message.message?.content;return!content||!Array.isArray(content)?!1:content.some(block=>block.type==="text"&&typeof block.text=="string"&&block.text.trim().length>0)}function countVisibleMessages(transcript){let count4=0;for(let message of transcript)switch(message.type){case"user":hasVisibleUserContent(message)&&count4++;break;case"assistant":hasVisibleAssistantContent(message)&&count4++;break;case"attachment":case"system":case"progress":break}return count4}function convertToLogOption(transcript,value=0,summary,customTitle,fileHistorySnapshots,tag2,fullPath,attributionSnapshots,agentSetting,contentReplacements){let lastMessage=transcript.at(-1),firstMessage=transcript[0],firstPrompt=extractFirstPrompt2(transcript),created=new Date(firstMessage.timestamp),modified=new Date(lastMessage.timestamp);return{date:lastMessage.timestamp,messages:removeExtraFields(transcript),fullPath,value,created,modified,firstPrompt,messageCount:countVisibleMessages(transcript),isSidechain:firstMessage.isSidechain,teamName:firstMessage.teamName,agentName:firstMessage.agentName,agentSetting,leafUuid:lastMessage.uuid,summary,customTitle,tag:tag2,fileHistorySnapshots,attributionSnapshots,contentReplacements,gitBranch:lastMessage.gitBranch,projectPath:firstMessage.cwd}}async function trackSessionBranchingAnalytics(logs2){let sessionIdCounts=new Map,maxCount=0;for(let log4 of logs2){let sessionId=getSessionIdFromLog(log4);if(sessionId){let newCount=(sessionIdCounts.get(sessionId)||0)+1;sessionIdCounts.set(sessionId,newCount),maxCount=Math.max(newCount,maxCount)}}if(maxCount<=1)return;let branchCounts=Array.from(sessionIdCounts.values()).filter(c4=>c4>1),sessionsWithBranches=branchCounts.length,totalBranches=branchCounts.reduce((sum2,count4)=>sum2+count4,0);logEvent("tengu_session_forked_branches_fetched",{total_sessions:sessionIdCounts.size,sessions_with_branches:sessionsWithBranches,max_branches_per_session:Math.max(...branchCounts),avg_branches_per_session:Math.round(totalBranches/sessionsWithBranches),total_transcript_count:logs2.length})}async function fetchLogs(limit){let projectDir=getProjectDir3(getOriginalCwd()),logs2=await getSessionFilesLite(projectDir,limit,getOriginalCwd());return await trackSessionBranchingAnalytics(logs2),logs2}function appendEntryToFile(fullPath,entry){let fs13=getFsImplementation(),line=jsonStringify(entry)+`
10214
10214
  `;try{fs13.appendFileSync(fullPath,line,{mode:384})}catch{fs13.mkdirSync(dirname79(fullPath),{mode:448}),fs13.appendFileSync(fullPath,line,{mode:384})}}function readFileTailSync(fullPath){let fd2;try{fd2=openSync4(fullPath,"r");let st=fstatSync(fd2),tailOffset=Math.max(0,st.size-LITE_READ_BUF_SIZE),buf=Buffer.allocUnsafe(Math.min(LITE_READ_BUF_SIZE,st.size-tailOffset)),bytesRead=readSync2(fd2,buf,0,buf.length,tailOffset);return buf.toString("utf8",0,bytesRead)}catch{return""}finally{if(fd2!==void 0)try{closeSync4(fd2)}catch{}}}async function saveCustomTitle(sessionId,customTitle,fullPath,source="user"){let resolvedPath=fullPath??getTranscriptPathForSession(sessionId);appendEntryToFile(resolvedPath,{type:"custom-title",customTitle,sessionId}),sessionId===getSessionId()&&(getProject().currentSessionTitle=customTitle),logEvent("tengu_session_renamed",{source})}function recordHead(sessionId,leafUuid,reason,branchId="main"){let path36=getTranscriptPathForSession(sessionId),entry={type:"head",sessionId,leafUuid,branchId,reason,timestamp:new Date().toISOString()};appendEntryToFile(path36,entry),sessionId===getSessionId()&&branchId!=="main"&&(getProject().currentBranchId=branchId)}function recordBranch(sessionId,branchId,name,createdAtUuid,parentBranchId){let entry={type:"branch",sessionId,branchId,name,createdAtUuid,parentBranchId,timestamp:new Date().toISOString()};appendEntryToFile(getTranscriptPathForSession(sessionId),entry)}async function loadBranchesForSession(sessionId){let path36=getTranscriptPathForSession(sessionId),{resumeHeads,branchEntries,messages}=await loadTranscriptFile(path36,{keepAllLeaves:!0}),branches2=branchEntries.get(sessionId)??[],head2=resumeHeads.get(sessionId),leaves=new Map;for(let b3 of branches2){let m3=messages.get(b3.createdAtUuid);if(!m3||m3.type!=="user"&&m3.type!=="assistant")continue;let preview2="",c4=m3.message?.content;if(typeof c4=="string")preview2=c4;else if(Array.isArray(c4)){for(let block of c4)if(block&&typeof block=="object"){let text3=block.text;if(typeof text3=="string"){preview2=text3;break}}}leaves.set(b3.createdAtUuid,{type:m3.type,preview:preview2.replace(/\n/g," ").slice(0,120),ts:m3.timestamp??""})}return{branches:branches2,head:head2,leaves}}function setActiveBranch(branchId){getProject().currentBranchId=branchId}function getActiveBranch(){return getProject().currentBranchId}function saveAiGeneratedTitle(sessionId,aiTitle){appendEntryToFile(getTranscriptPathForSession(sessionId),{type:"ai-title",aiTitle,sessionId})}function saveTaskSummary(sessionId,summary){appendEntryToFile(getTranscriptPathForSession(sessionId),{type:"task-summary",summary,sessionId,timestamp:new Date().toISOString()})}function saveSessionTurnSummary(sessionId,lastTurnSummary){let text3=String(lastTurnSummary||"").replace(/\s+/g," ").trim().slice(0,120);if(!sessionId||!text3)return;let key=String(sessionId);if(lastTurnSummaryWritten.get(key)!==text3){lastTurnSummaryWritten.set(key,text3);try{appendEntryToFile(getTranscriptPathForSession(sessionId),{type:"session-turn-summary",lastTurnSummary:text3,sessionId,timestamp:new Date().toISOString()})}catch{}}}async function saveTag(sessionId,tag2,fullPath){let resolvedPath=fullPath??getTranscriptPathForSession(sessionId);appendEntryToFile(resolvedPath,{type:"tag",tag:tag2,sessionId}),sessionId===getSessionId()&&(getProject().currentSessionTag=tag2),logEvent("tengu_session_tagged",{})}async function linkSessionToPR(sessionId,prNumber,prUrl,prRepository,fullPath){let resolvedPath=fullPath??getTranscriptPathForSession(sessionId);if(appendEntryToFile(resolvedPath,{type:"pr-link",sessionId,prNumber,prUrl,prRepository,timestamp:new Date().toISOString()}),sessionId===getSessionId()){let project2=getProject();project2.currentSessionPrNumber=prNumber,project2.currentSessionPrUrl=prUrl,project2.currentSessionPrRepository=prRepository}logEvent("tengu_session_linked_to_pr",{prNumber})}function getCurrentSessionTag(sessionId){if(sessionId===getSessionId())return getProject().currentSessionTag}function getCurrentSessionTitle(sessionId){if(sessionId===getSessionId())return getProject().currentSessionTitle}function getCurrentSessionAgentColor(){return getProject().currentSessionAgentColor}function restoreSessionMetadata(meta){let project2=getProject();meta.customTitle&&(project2.currentSessionTitle??=meta.customTitle),meta.tag!==void 0&&(project2.currentSessionTag=meta.tag||void 0),meta.agentName&&(project2.currentSessionAgentName=meta.agentName),meta.agentColor&&(project2.currentSessionAgentColor=meta.agentColor),meta.agentSetting&&(project2.currentSessionAgentSetting=meta.agentSetting),meta.mode&&(project2.currentSessionMode=meta.mode),meta.worktreeSession!==void 0&&(project2.currentSessionWorktree=meta.worktreeSession),meta.prNumber!==void 0&&(project2.currentSessionPrNumber=meta.prNumber),meta.prUrl&&(project2.currentSessionPrUrl=meta.prUrl),meta.prRepository&&(project2.currentSessionPrRepository=meta.prRepository)}function clearSessionMetadata(){let project2=getProject();project2.currentSessionTitle=void 0,project2.currentSessionTag=void 0,project2.currentSessionAgentName=void 0,project2.currentSessionAgentColor=void 0,project2.currentSessionLastPrompt=void 0,project2.currentSessionAgentSetting=void 0,project2.currentSessionMode=void 0,project2.currentSessionWorktree=void 0,project2.currentSessionPrNumber=void 0,project2.currentSessionPrUrl=void 0,project2.currentSessionPrRepository=void 0}function reAppendSessionMetadata(){getProject().reAppendSessionMetadata()}async function saveAgentName(sessionId,agentName,fullPath,source="user"){let resolvedPath=fullPath??getTranscriptPathForSession(sessionId);appendEntryToFile(resolvedPath,{type:"agent-name",agentName,sessionId}),sessionId===getSessionId()&&(getProject().currentSessionAgentName=agentName,updateSessionName(agentName)),logEvent("tengu_agent_name_set",{source})}async function saveAgentColor(sessionId,agentColor,fullPath){let resolvedPath=fullPath??getTranscriptPathForSession(sessionId);appendEntryToFile(resolvedPath,{type:"agent-color",agentColor,sessionId}),sessionId===getSessionId()&&(getProject().currentSessionAgentColor=agentColor),logEvent("tengu_agent_color_set",{})}function saveAgentSetting(agentSetting){getProject().currentSessionAgentSetting=agentSetting}function cacheSessionTitle(customTitle){getProject().currentSessionTitle=customTitle}function saveMode(mode){getProject().currentSessionMode=mode}function saveWorktreeState(worktreeSession){let stripped=worktreeSession?{originalCwd:worktreeSession.originalCwd,worktreePath:worktreeSession.worktreePath,worktreeName:worktreeSession.worktreeName,worktreeBranch:worktreeSession.worktreeBranch,originalBranch:worktreeSession.originalBranch,originalHeadCommit:worktreeSession.originalHeadCommit,sessionId:worktreeSession.sessionId,tmuxSessionName:worktreeSession.tmuxSessionName,hookBased:worktreeSession.hookBased}:null,project2=getProject();project2.currentSessionWorktree=stripped,project2.sessionFile&&appendEntryToFile(project2.sessionFile,{type:"worktree-state",worktreeSession:stripped,sessionId:getSessionId()})}function getSessionIdFromLog(log4){return log4.sessionId?log4.sessionId:log4.messages[0]?.sessionId}function isLiteLog(log4){return log4.messages.length===0&&log4.sessionId!==void 0}async function loadFullLog(log4){if(!isLiteLog(log4))return log4;let sessionFile=log4.fullPath;if(!sessionFile)return log4;try{let{messages,summaries,customTitles,tags,agentNames,agentColors,agentSettings,prNumbers,prUrls,prRepositories,modes,worktreeStates,fileHistorySnapshots,attributionSnapshots,contentReplacements,contextCollapseCommits,contextCollapseSnapshot,leafUuids,resumeHeads,branchEntries}=await loadTranscriptFile(sessionFile);if(messages.size===0)return log4;let sessionIdFromIndex=log4.sessionId,leaf,headLeafSource="fallback";if(sessionIdFromIndex){let head2=resumeHeads.get(sessionIdFromIndex);if(head2){let candidate=messages.get(head2.leafUuid);candidate&&(candidate.type==="user"||candidate.type==="assistant")&&(leaf=candidate,headLeafSource="head")}}if(leaf||(leaf=findLatestMessage(messages.values(),msg=>leafUuids.has(msg.uuid)&&(msg.type==="user"||msg.type==="assistant"))),!leaf)return log4;let mostRecentLeaf=leaf;logEvent("tengu_resume_leaf_picked",{source_head:headLeafSource==="head"});let transcript=buildConversationChain(messages,mostRecentLeaf),sessionId=mostRecentLeaf.sessionId,consistencyDelta=checkResumeConsistency(transcript,{fullMessageMap:messages}),branchCount=sessionId?branchEntries.get(sessionId)?.length??0:0;return{...log4,messages:removeExtraFields(transcript),firstPrompt:extractFirstPrompt2(transcript),messageCount:countVisibleMessages(transcript),summary:mostRecentLeaf?summaries.get(mostRecentLeaf.uuid):log4.summary,customTitle:sessionId?customTitles.get(sessionId):log4.customTitle,tag:sessionId?tags.get(sessionId):log4.tag,agentName:sessionId?agentNames.get(sessionId):log4.agentName,agentColor:sessionId?agentColors.get(sessionId):log4.agentColor,agentSetting:sessionId?agentSettings.get(sessionId):log4.agentSetting,mode:sessionId?modes.get(sessionId):log4.mode,worktreeSession:sessionId&&worktreeStates.has(sessionId)?worktreeStates.get(sessionId):log4.worktreeSession,prNumber:sessionId?prNumbers.get(sessionId):log4.prNumber,prUrl:sessionId?prUrls.get(sessionId):log4.prUrl,prRepository:sessionId?prRepositories.get(sessionId):log4.prRepository,gitBranch:mostRecentLeaf?.gitBranch??log4.gitBranch,isSidechain:transcript[0]?.isSidechain??log4.isSidechain,teamName:transcript[0]?.teamName??log4.teamName,leafUuid:mostRecentLeaf?.uuid??log4.leafUuid,branchCount,consistencyDelta,fileHistorySnapshots:buildFileHistorySnapshotChain(fileHistorySnapshots,transcript),attributionSnapshots:buildAttributionSnapshotChain(attributionSnapshots,transcript),contentReplacements:sessionId?contentReplacements.get(sessionId)??[]:log4.contentReplacements,contextCollapseCommits:sessionId?contextCollapseCommits.filter(e2=>e2.sessionId===sessionId):void 0,contextCollapseSnapshot:sessionId&&contextCollapseSnapshot?.sessionId===sessionId?contextCollapseSnapshot:void 0}}catch(err2){return logError2(err2 instanceof Error?err2:new Error(`loadFullLog failed: ${String(err2)}`)),logEvent("tengu_resume_full_log_failed",{reason_unknown:(getErrnoCode(err2)??"unknown")==="unknown"}),log4}}async function searchSessionsByCustomTitle(query2,options){let{limit,exact}=options||{},worktreePaths=await getWorktreePaths(getOriginalCwd()),allStatLogs=await getStatOnlyLogsForWorktrees(worktreePaths),{logs:logs2}=await enrichLogs(allStatLogs,0,allStatLogs.length),normalizedQuery=query2.toLowerCase().trim(),matchingLogs=logs2.filter(log4=>{let title=log4.customTitle?.toLowerCase().trim();return title?exact?title===normalizedQuery:title.includes(normalizedQuery):!1}),sessionIdToLog=new Map;for(let log4 of matchingLogs){let sessionId=getSessionIdFromLog(log4);if(sessionId){let existing=sessionIdToLog.get(sessionId);(!existing||log4.modified>existing.modified)&&sessionIdToLog.set(sessionId,log4)}}let deduplicated=Array.from(sessionIdToLog.values());return deduplicated.sort((a2,b3)=>b3.modified.getTime()-a2.modified.getTime()),limit?deduplicated.slice(0,limit):deduplicated}function resolveMetadataBuf(carry,chunkBuf){if(carry===null||carry.length===0)return chunkBuf;if(carry.length<METADATA_PREFIX_BOUND)return Buffer.concat([carry,chunkBuf]);if(carry[0]===123){for(let m3 of METADATA_MARKER_BUFS)if(carry.compare(m3,0,m3.length,1,1+m3.length)===0)return Buffer.concat([carry,chunkBuf])}let firstNl=chunkBuf.indexOf(10);return firstNl===-1?null:chunkBuf.subarray(firstNl+1)}async function scanPreBoundaryMetadata(filePath,endOffset){let{createReadStream:createReadStream7}=await import("fs"),NEWLINE=10,stream4=createReadStream7(filePath,{end:endOffset-1}),metadataLines=[],carry=null;for await(let chunk3 of stream4){let buf=resolveMetadataBuf(carry,chunk3);if(buf===null){carry=null;continue}let hasAnyMarker=!1;for(let m3 of METADATA_MARKER_BUFS)if(buf.includes(m3)){hasAnyMarker=!0;break}if(hasAnyMarker){let lineStart=0,nl=buf.indexOf(NEWLINE);for(;nl!==-1;){for(let m3 of METADATA_MARKER_BUFS){let mIdx=buf.indexOf(m3,lineStart);if(mIdx!==-1&&mIdx<nl){metadataLines.push(buf.toString("utf-8",lineStart,nl));break}}lineStart=nl+1,nl=buf.indexOf(NEWLINE,lineStart)}carry=buf.subarray(lineStart)}else{let lastNl=buf.lastIndexOf(NEWLINE);carry=lastNl>=0?buf.subarray(lastNl+1):buf}carry.length>64*1024&&(carry=null)}if(carry!==null&&carry.length>0){for(let m3 of METADATA_MARKER_BUFS)if(carry.includes(m3)){metadataLines.push(carry.toString("utf-8"));break}}return metadataLines}function pickDepthOneUuidCandidate(buf,lineStart,candidates){let depth=0,inString=!1,escapeNext=!1,ci=0;for(let i3=lineStart;ci<candidates.length;i3++){if(i3===candidates[ci]){if(depth===1&&!inString)return candidates[ci];ci++}let b3=buf[i3];escapeNext?escapeNext=!1:inString?b3===92?escapeNext=!0:b3===34&&(inString=!1):b3===34?inString=!0:b3===123?depth++:b3===125&&depth--}return candidates.at(-1)}function walkChainBeforeParse(buf){let PARENT_PREFIX=Buffer.from('{"parentUuid":'),UUID_KEY=Buffer.from('"uuid":"'),SIDECHAIN_TRUE=Buffer.from('"isSidechain":true'),UUID_LEN=36,TS_SUFFIX=Buffer.from('","timestamp":"'),TS_SUFFIX_LEN=TS_SUFFIX.length,PREFIX_LEN=PARENT_PREFIX.length,KEY_LEN=UUID_KEY.length,msgIdx=[],metaRanges=[],uuidToSlot=new Map,pos=0,len=buf.length;for(;pos<len;){let nl=buf.indexOf(10,pos),lineEnd=nl===-1?len:nl+1;if(lineEnd-pos>PREFIX_LEN&&buf[pos]===123&&buf.compare(PARENT_PREFIX,0,PREFIX_LEN,pos,pos+PREFIX_LEN)===0){let parentStart=buf[pos+PREFIX_LEN]===34?pos+PREFIX_LEN+1:-1,firstAny=-1,suffix0=-1,suffixN,from=pos;for(;;){let next=buf.indexOf(UUID_KEY,from);if(next<0||next>=lineEnd)break;firstAny<0&&(firstAny=next);let after2=next+KEY_LEN+UUID_LEN;after2+TS_SUFFIX_LEN<=lineEnd&&buf.compare(TS_SUFFIX,0,TS_SUFFIX_LEN,after2,after2+TS_SUFFIX_LEN)===0&&(suffix0<0?suffix0=next:(suffixN??=[suffix0]).push(next)),from=next+KEY_LEN}let uk=suffixN?pickDepthOneUuidCandidate(buf,pos,suffixN):suffix0>=0?suffix0:firstAny;if(uk>=0){let uuidStart=uk+KEY_LEN,uuid3=buf.toString("latin1",uuidStart,uuidStart+UUID_LEN);uuidToSlot.set(uuid3,msgIdx.length),msgIdx.push(pos,lineEnd,parentStart)}else metaRanges.push(pos,lineEnd)}else metaRanges.push(pos,lineEnd);pos=lineEnd}let leafSlot=-1;for(let i3=msgIdx.length-3;i3>=0;i3-=3){let sc=buf.indexOf(SIDECHAIN_TRUE,msgIdx[i3]);if(sc===-1||sc>=msgIdx[i3+1]){leafSlot=i3;break}}if(leafSlot<0)return buf;let seen=new Set,chain2=new Set,chainBytes=0,slot=leafSlot;for(;slot!==void 0&&!seen.has(slot);){seen.add(slot),chain2.add(msgIdx[slot]),chainBytes+=msgIdx[slot+1]-msgIdx[slot];let parentStart=msgIdx[slot+2];if(parentStart<0)break;let parent2=buf.toString("latin1",parentStart,parentStart+UUID_LEN);slot=uuidToSlot.get(parent2)}if(len-chainBytes<len>>1)return buf;let parts=[],m3=0;for(let i3=0;i3<msgIdx.length;i3+=3){let start=msgIdx[i3];for(;m3<metaRanges.length&&metaRanges[m3]<start;)parts.push(buf.subarray(metaRanges[m3],metaRanges[m3+1])),m3+=2;chain2.has(start)&&parts.push(buf.subarray(start,msgIdx[i3+1]))}for(;m3<metaRanges.length;)parts.push(buf.subarray(metaRanges[m3],metaRanges[m3+1])),m3+=2;return Buffer.concat(parts)}async function loadTranscriptFile(filePath,opts){let messages=new Map,summaries=new Map,customTitles=new Map,tags=new Map,agentNames=new Map,agentColors=new Map,agentSettings=new Map,prNumbers=new Map,prUrls=new Map,prRepositories=new Map,modes=new Map,worktreeStates=new Map,fileHistorySnapshots=new Map,attributionSnapshots=new Map,contentReplacements=new Map,agentContentReplacements=new Map,contextCollapseCommits=[],contextCollapseSnapshot,resumeHeads=new Map,branchEntries=new Map;try{let buf=null,metadataLines=null,hasPreservedSegment=!1;if(!isEnvTruthy2(process.env.CLAUDE_CODE_DISABLE_PRECOMPACT_SKIP)){let{size:size2}=await stat51(filePath);if(size2>SKIP_PRECOMPACT_THRESHOLD){let scan=await readTranscriptForLoad(filePath,size2);buf=scan.postBoundaryBuf,hasPreservedSegment=scan.hasPreservedSegment,scan.boundaryStartOffset>0&&(metadataLines=await scanPreBoundaryMetadata(filePath,scan.boundaryStartOffset))}}if(buf??=await readFile73(filePath),!opts?.keepAllLeaves&&!hasPreservedSegment&&isEnvTruthy2(process.env.CLAUDE_CODE_ENABLE_PRECOMPACT_SKIP)&&buf.length>SKIP_PRECOMPACT_THRESHOLD&&(buf=walkChainBeforeParse(buf)),metadataLines&&metadataLines.length>0){let metaEntries=parseJSONL(Buffer.from(metadataLines.join(`
10215
10215
  `)));for(let entry of metaEntries)entry.type==="summary"&&entry.leafUuid?summaries.set(entry.leafUuid,entry.summary):entry.type==="custom-title"&&entry.sessionId?customTitles.set(entry.sessionId,entry.customTitle):entry.type==="tag"&&entry.sessionId?tags.set(entry.sessionId,entry.tag):entry.type==="agent-name"&&entry.sessionId?agentNames.set(entry.sessionId,entry.agentName):entry.type==="agent-color"&&entry.sessionId?agentColors.set(entry.sessionId,entry.agentColor):entry.type==="agent-setting"&&entry.sessionId?agentSettings.set(entry.sessionId,entry.agentSetting):entry.type==="mode"&&entry.sessionId?modes.set(entry.sessionId,entry.mode):entry.type==="worktree-state"&&entry.sessionId?worktreeStates.set(entry.sessionId,entry.worktreeSession):entry.type==="pr-link"&&entry.sessionId&&(prNumbers.set(entry.sessionId,entry.prNumber),prUrls.set(entry.sessionId,entry.prUrl),prRepositories.set(entry.sessionId,entry.prRepository))}let entries=parseJSONL(buf),progressBridge=new Map;for(let entry of entries){if(isLegacyProgressEntry(entry)){let parent2=entry.parentUuid;progressBridge.set(entry.uuid,parent2&&progressBridge.has(parent2)?progressBridge.get(parent2)??null:parent2);continue}if(isTranscriptMessage(entry))entry.parentUuid&&progressBridge.has(entry.parentUuid)&&(entry.parentUuid=progressBridge.get(entry.parentUuid)??null),messages.set(entry.uuid,entry),isCompactBoundaryMessage(entry)&&(contextCollapseCommits.length=0,contextCollapseSnapshot=void 0);else if(entry.type==="summary"&&entry.leafUuid)summaries.set(entry.leafUuid,entry.summary);else if(entry.type==="custom-title"&&entry.sessionId)customTitles.set(entry.sessionId,entry.customTitle);else if(entry.type==="tag"&&entry.sessionId)tags.set(entry.sessionId,entry.tag);else if(entry.type==="agent-name"&&entry.sessionId)agentNames.set(entry.sessionId,entry.agentName);else if(entry.type==="agent-color"&&entry.sessionId)agentColors.set(entry.sessionId,entry.agentColor);else if(entry.type==="agent-setting"&&entry.sessionId)agentSettings.set(entry.sessionId,entry.agentSetting);else if(entry.type==="mode"&&entry.sessionId)modes.set(entry.sessionId,entry.mode);else if(entry.type==="worktree-state"&&entry.sessionId)worktreeStates.set(entry.sessionId,entry.worktreeSession);else if(entry.type==="pr-link"&&entry.sessionId)prNumbers.set(entry.sessionId,entry.prNumber),prUrls.set(entry.sessionId,entry.prUrl),prRepositories.set(entry.sessionId,entry.prRepository);else if(entry.type==="file-history-snapshot")fileHistorySnapshots.set(entry.messageId,entry);else if(entry.type==="attribution-snapshot")attributionSnapshots.set(entry.messageId,entry);else if(entry.type==="content-replacement")if(entry.agentId){let existing=agentContentReplacements.get(entry.agentId)??[];agentContentReplacements.set(entry.agentId,existing),existing.push(...entry.replacements)}else{let existing=contentReplacements.get(entry.sessionId)??[];contentReplacements.set(entry.sessionId,existing),existing.push(...entry.replacements)}else if(entry.type==="marble-origami-commit")contextCollapseCommits.push(entry);else if(entry.type==="marble-origami-snapshot")contextCollapseSnapshot=entry;else if(entry.type==="head"&&entry.sessionId)resumeHeads.set(entry.sessionId,entry);else if(entry.type==="branch"&&entry.sessionId&&entry.branchId){let list2=branchEntries.get(entry.sessionId)??[],existingIdx=list2.findIndex(b3=>b3.branchId===entry.branchId);existingIdx>=0?list2[existingIdx]=entry:list2.push(entry),branchEntries.set(entry.sessionId,list2)}}}catch(err2){logError2(err2 instanceof Error?err2:new Error(`loadTranscriptFile partial-read at ${filePath}: ${String(err2)}`)),logEvent("tengu_transcript_load_partial",{reason_parse_or_read:(getErrnoCode(err2)??"parse_or_read")==="parse_or_read",partial_messages:messages.size})}applyPreservedSegmentRelinks(messages),applySnipRemovals(messages);let allMessages=[...messages.values()],parentUuids=new Set(allMessages.map(msg=>msg.parentUuid).filter(uuid3=>uuid3!==null)),terminalMessages=allMessages.filter(msg=>!parentUuids.has(msg.uuid)),leafUuids=new Set,hasCycle2=!1;if(getFeatureValue_CACHED_MAY_BE_STALE("tengu_pebble_leaf_prune",!1)){let hasUserAssistantChild=new Set;for(let msg of allMessages)msg.parentUuid&&(msg.type==="user"||msg.type==="assistant")&&hasUserAssistantChild.add(msg.parentUuid);for(let terminal of terminalMessages){let seen=new Set,current=terminal;for(;current;){if(seen.has(current.uuid)){hasCycle2=!0;break}if(seen.add(current.uuid),current.type==="user"||current.type==="assistant"){hasUserAssistantChild.has(current.uuid)||leafUuids.add(current.uuid);break}current=current.parentUuid?messages.get(current.parentUuid):void 0}}}else for(let terminal of terminalMessages){let seen=new Set,current=terminal;for(;current;){if(seen.has(current.uuid)){hasCycle2=!0;break}if(seen.add(current.uuid),current.type==="user"||current.type==="assistant"){leafUuids.add(current.uuid);break}current=current.parentUuid?messages.get(current.parentUuid):void 0}}return hasCycle2&&logEvent("tengu_transcript_parent_cycle",{}),{messages,summaries,customTitles,tags,agentNames,agentColors,agentSettings,prNumbers,prUrls,prRepositories,modes,worktreeStates,fileHistorySnapshots,attributionSnapshots,contentReplacements,agentContentReplacements,contextCollapseCommits,contextCollapseSnapshot,leafUuids,resumeHeads,branchEntries}}async function resolveSessionFilePath(sessionId){let localPath=join196(getSessionProjectDir2()??getProjectDir3(getOriginalCwd()),`${sessionId}.jsonl`);try{return await stat51(localPath),localPath}catch{}let projectsDir=getProjectsDir2(),dirents;try{dirents=await readdir42(projectsDir,{withFileTypes:!0})}catch{return localPath}for(let d of dirents){if(!d.isDirectory())continue;let candidate=join196(projectsDir,d.name,`${sessionId}.jsonl`);try{return await stat51(candidate),candidate}catch{}}return localPath}async function loadSessionFile(sessionId){let sessionFile=await resolveSessionFilePath(sessionId);return loadTranscriptFile(sessionFile)}function clearSessionMessagesCache(){getSessionMessages.cache.clear?.()}async function doesMessageExistInSession(sessionId,messageUuid){return(await getSessionMessages(sessionId)).has(messageUuid)}async function getLastSessionLog(sessionId){let transcriptPath=await resolveSessionFilePath(sessionId),{messages,summaries,customTitles,tags,agentSettings,worktreeStates,fileHistorySnapshots,attributionSnapshots,contentReplacements,contextCollapseCommits,contextCollapseSnapshot,resumeHeads}=await loadTranscriptFile(transcriptPath);if(messages.size===0)return null;getSessionMessages.cache.has(sessionId)||getSessionMessages.cache.set(sessionId,Promise.resolve(new Set(messages.keys())));let head2=resumeHeads.get(sessionId),lastMessage;if(head2?.leafUuid){if(String(head2.leafUuid)==="00000000-0000-4000-8000-000000000000"){let now3=new Date;return{date:now3.toISOString(),messages:[],fullPath:transcriptPath,value:0,created:now3,modified:now3,firstPrompt:"",messageCount:0,isSidechain:!1,leafUuid:head2.leafUuid,summary:void 0,customTitle:customTitles.get(sessionId),fileHistorySnapshots:[],tag:tags.get(sessionId),attributionSnapshots:[],agentSetting:agentSettings.get(sessionId),contentReplacements:contentReplacements.get(sessionId)??[],worktreeSession:worktreeStates.get(sessionId),contextCollapseCommits:contextCollapseCommits.filter(e2=>e2.sessionId===sessionId),contextCollapseSnapshot:contextCollapseSnapshot?.sessionId===sessionId?contextCollapseSnapshot:void 0}}let candidate=messages.get(head2.leafUuid);candidate&&!candidate.isSidechain&&(candidate.type==="user"||candidate.type==="assistant")&&(lastMessage=candidate)}if(lastMessage||(lastMessage=findLatestMessage(messages.values(),m3=>!m3.isSidechain)),!lastMessage)return null;let transcript=buildConversationChain(messages,lastMessage),summary=summaries.get(lastMessage.uuid),customTitle=customTitles.get(lastMessage.sessionId),tag2=tags.get(lastMessage.sessionId),agentSetting=agentSettings.get(sessionId);return{...convertToLogOption(transcript,0,summary,customTitle,buildFileHistorySnapshotChain(fileHistorySnapshots,transcript),tag2,transcriptPath,buildAttributionSnapshotChain(attributionSnapshots,transcript),agentSetting,contentReplacements.get(sessionId)??[]),worktreeSession:worktreeStates.get(sessionId),contextCollapseCommits:contextCollapseCommits.filter(e2=>e2.sessionId===sessionId),contextCollapseSnapshot:contextCollapseSnapshot?.sessionId===sessionId?contextCollapseSnapshot:void 0}}async function loadMessageLogs(limit){let sessionLogs=await fetchLogs(limit),{logs:enriched}=await enrichLogs(sessionLogs,0,sessionLogs.length),sorted=sortLogs(enriched);return sorted.forEach((log4,i3)=>{log4.value=i3}),sorted}async function loadAllProjectsMessageLogs(limit,options){return options?.skipIndex?loadAllProjectsMessageLogsFull(limit):(await loadAllProjectsMessageLogsProgressive(limit,options?.initialEnrichCount??INITIAL_ENRICH_COUNT)).logs}async function loadAllProjectsMessageLogsFull(limit){let projectsDir=getProjectsDir2(),dirents;try{dirents=await readdir42(projectsDir,{withFileTypes:!0})}catch{return[]}let projectDirs=dirents.filter(dirent=>dirent.isDirectory()).map(dirent=>join196(projectsDir,dirent.name)),allLogs=(await Promise.all(projectDirs.map(projectDir=>getLogsWithoutIndex(projectDir,limit)))).flat(),deduped=new Map;for(let log4 of allLogs){let key=`${log4.sessionId??""}:${log4.leafUuid??""}`,existing=deduped.get(key);(!existing||log4.modified.getTime()>existing.modified.getTime())&&deduped.set(key,log4)}let sorted=sortLogs([...deduped.values()]);return sorted.forEach((log4,i3)=>{log4.value=i3}),sorted}async function loadAllProjectsMessageLogsProgressive(limit,initialEnrichCount=INITIAL_ENRICH_COUNT){let projectsDir=getProjectsDir2(),dirents;try{dirents=await readdir42(projectsDir,{withFileTypes:!0})}catch{return{logs:[],allStatLogs:[],nextIndex:0}}let projectDirs=dirents.filter(dirent=>dirent.isDirectory()).map(dirent=>join196(projectsDir,dirent.name)),rawLogs=[];for(let projectDir of projectDirs)rawLogs.push(...await getSessionFilesLite(projectDir,limit));let sorted=deduplicateLogsBySessionId(rawLogs),{logs:logs2,nextIndex}=await enrichLogs(sorted,0,initialEnrichCount);return logs2.forEach((log4,i3)=>{log4.value=i3}),{logs:logs2,allStatLogs:sorted,nextIndex}}async function loadSameRepoMessageLogs(worktreePaths,limit,initialEnrichCount=INITIAL_ENRICH_COUNT){return(await loadSameRepoMessageLogsProgressive(worktreePaths,limit,initialEnrichCount)).logs}async function loadSameRepoMessageLogsProgressive(worktreePaths,limit,initialEnrichCount=INITIAL_ENRICH_COUNT){logForDebugging(`/resume: loading sessions for cwd=${getOriginalCwd()}, worktrees=[${worktreePaths.join(", ")}]`);let allStatLogs=await getStatOnlyLogsForWorktrees(worktreePaths,limit);logForDebugging(`/resume: found ${allStatLogs.length} session files on disk`);let{logs:logs2,nextIndex}=await enrichLogs(allStatLogs,0,initialEnrichCount);return logs2.forEach((log4,i3)=>{log4.value=i3}),{logs:logs2,allStatLogs,nextIndex}}async function getStatOnlyLogsForWorktrees(worktreePaths,limit){let projectsDir=getProjectsDir2();if(worktreePaths.length<=1){let cwd6=getOriginalCwd(),projectDir=getProjectDir3(cwd6);return getSessionFilesLite(projectDir,void 0,cwd6)}let caseInsensitive=process.platform==="win32",indexed=worktreePaths.map(wt=>{let sanitized=sanitizePath2(wt);return{path:wt,prefix:caseInsensitive?sanitized.toLowerCase():sanitized}});indexed.sort((a2,b3)=>b3.prefix.length-a2.prefix.length);let allLogs=[],seenDirs=new Set,allDirents;try{allDirents=await readdir42(projectsDir,{withFileTypes:!0})}catch(e2){logForDebugging(`Failed to read projects dir ${projectsDir}, falling back to current project: ${e2}`);let projectDir=getProjectDir3(getOriginalCwd());return getSessionFilesLite(projectDir,limit,getOriginalCwd())}for(let dirent of allDirents){if(!dirent.isDirectory())continue;let dirName=caseInsensitive?dirent.name.toLowerCase():dirent.name;if(!seenDirs.has(dirName)){for(let{path:wtPath,prefix}of indexed)if(dirName===prefix||dirName.startsWith(prefix+"-")){seenDirs.add(dirName),allLogs.push(...await getSessionFilesLite(join196(projectsDir,dirent.name),void 0,wtPath));break}}}return deduplicateLogsBySessionId(allLogs)}async function getAgentTranscript(agentId){let agentFile=getAgentTranscriptPath(agentId);try{let{messages,agentContentReplacements}=await loadTranscriptFile(agentFile),agentMessages=Array.from(messages.values()).filter(msg=>msg.agentId===agentId&&msg.isSidechain);if(agentMessages.length===0)return null;let parentUuids=new Set(agentMessages.map(msg=>msg.parentUuid)),leafMessage=findLatestMessage(agentMessages,msg=>!parentUuids.has(msg.uuid));return leafMessage?{messages:buildConversationChain(messages,leafMessage).filter(msg=>msg.agentId===agentId).map(({isSidechain,parentUuid,...msg})=>msg),contentReplacements:agentContentReplacements.get(agentId)??[]}:null}catch{return null}}function extractAgentIdsFromMessages(messages){let agentIds=[];for(let message of messages)message.type==="progress"&&message.data&&typeof message.data=="object"&&"type"in message.data&&(message.data.type==="agent_progress"||message.data.type==="skill_progress")&&"agentId"in message.data&&typeof message.data.agentId=="string"&&agentIds.push(message.data.agentId);return uniq(agentIds)}function extractTeammateTranscriptsFromTasks(tasks2){let transcripts={};for(let task of Object.values(tasks2))task.type==="in_process_teammate"&&task.identity?.agentId&&task.messages&&task.messages.length>0&&(transcripts[task.identity.agentId]=task.messages);return transcripts}async function loadSubagentTranscripts(agentIds){let results=await Promise.all(agentIds.map(async agentId=>{try{let result2=await getAgentTranscript(agentId);return result2&&result2.messages.length>0?{agentId,transcript:result2.messages}:null}catch{return null}})),transcripts={};for(let result2 of results)result2&&(transcripts[result2.agentId]=result2.transcript);return transcripts}async function loadAllSubagentTranscriptsFromDisk(){let subagentsDir=join196(getSessionProjectDir2()??getProjectDir3(getOriginalCwd()),getSessionId(),"subagents"),entries;try{entries=await readdir42(subagentsDir,{withFileTypes:!0})}catch{return{}}let agentIds=entries.filter(d=>d.isFile()&&d.name.startsWith("agent-")&&d.name.endsWith(".jsonl")).map(d=>d.name.slice(6,-6));return loadSubagentTranscripts(agentIds)}function isLoggableMessage(m3){return m3.type==="progress"||m3.type==="assistant"&&Array.isArray(m3.message.content)&&m3.message.content.length===1&&m3.message.content[0]?.type==="text"&&m3.message.content[0].text===NO_RESPONSE_REQUESTED?!1:m3.type==="attachment"&&getUserType()!=="ant"?!!(m3.attachment.type==="hook_additional_context"&&isEnvTruthy2(process.env.CLAUDE_CODE_SAVE_HOOK_ADDITIONAL_CONTEXT)):!0}function collectReplIds(messages){let ids=new Set;for(let m3 of messages)if(m3.type==="assistant"&&Array.isArray(m3.message.content))for(let b3 of m3.message.content)b3.type==="tool_use"&&b3.name===REPL_TOOL_NAME&&ids.add(b3.id);return ids}function transformMessagesForExternalTranscript(messages,replIds){return messages.flatMap(m3=>{if(m3.type==="assistant"&&Array.isArray(m3.message.content)){let content=m3.message.content,filtered=content.some(b3=>b3.type==="tool_use"&&b3.name===REPL_TOOL_NAME)?content.filter(b3=>!(b3.type==="tool_use"&&b3.name===REPL_TOOL_NAME)):content;if(filtered.length===0)return[];if(m3.isVirtual){let{isVirtual:_omit,...rest2}=m3;return[{...rest2,message:{...m3.message,content:filtered}}]}return filtered!==content?[{...m3,message:{...m3.message,content:filtered}}]:[m3]}if(m3.type==="user"&&Array.isArray(m3.message.content)){let content=m3.message.content,filtered=content.some(b3=>b3.type==="tool_result"&&replIds.has(b3.tool_use_id))?content.filter(b3=>!(b3.type==="tool_result"&&replIds.has(b3.tool_use_id))):content;if(filtered.length===0)return[];if(m3.isVirtual){let{isVirtual:_omit,...rest2}=m3;return[{...rest2,message:{...m3.message,content:filtered}}]}return filtered!==content?[{...m3,message:{...m3.message,content:filtered}}]:[m3]}if("isVirtual"in m3&&m3.isVirtual){let{isVirtual:_omit,...rest2}=m3;return[rest2]}return[m3]})}function cleanMessagesForLogging(messages,allMessages=messages){let filtered=messages.filter(isLoggableMessage);return getUserType()!=="ant"?transformMessagesForExternalTranscript(filtered,collectReplIds(allMessages)):filtered}async function getLogByIndex(index){return(await loadMessageLogs())[index]||null}async function findUnresolvedToolUse(toolUseId){try{let transcriptPath=getTranscriptPath(),{messages}=await loadTranscriptFile(transcriptPath),toolUseMessage=null;for(let message of messages.values())if(message.type==="assistant"){let content=message.message.content;if(Array.isArray(content)){for(let block of content)if(block.type==="tool_use"&&block.id===toolUseId){toolUseMessage=message;break}}}else if(message.type==="user"){let content=message.message.content;if(Array.isArray(content)){for(let block of content)if(block.type==="tool_result"&&block.tool_use_id===toolUseId)return null}}return toolUseMessage}catch{return null}}async function getSessionFilesWithMtime(projectDir){let sessionFilesMap=new Map,dirents;try{dirents=await readdir42(projectDir,{withFileTypes:!0})}catch{return sessionFilesMap}let candidates=[];for(let dirent of dirents){if(!dirent.isFile()||!dirent.name.endsWith(".jsonl"))continue;let sessionId=validateUuid2(basename48(dirent.name,".jsonl"));sessionId&&candidates.push({sessionId,filePath:join196(projectDir,dirent.name)})}return await Promise.all(candidates.map(async({sessionId,filePath})=>{try{let st=await stat51(filePath);sessionFilesMap.set(sessionId,{path:filePath,mtime:st.mtime.getTime(),ctime:st.birthtime.getTime(),size:st.size})}catch{logForDebugging(`Failed to stat session file: ${filePath}`)}})),sessionFilesMap}async function loadAllLogsFromSessionFile(sessionFile,projectPathOverride){let{messages,summaries,customTitles,tags,agentNames,agentColors,agentSettings,prNumbers,prUrls,prRepositories,modes,fileHistorySnapshots,attributionSnapshots,contentReplacements,leafUuids}=await loadTranscriptFile(sessionFile,{keepAllLeaves:!0});if(messages.size===0)return[];let leafMessages=[],childrenByParent=new Map;for(let msg of messages.values())if(leafUuids.has(msg.uuid))leafMessages.push(msg);else if(msg.parentUuid){let siblings=childrenByParent.get(msg.parentUuid);siblings?siblings.push(msg):childrenByParent.set(msg.parentUuid,[msg])}let logs2=[];for(let leafMessage of leafMessages){let chain2=buildConversationChain(messages,leafMessage);if(chain2.length===0)continue;let trailingMessages=childrenByParent.get(leafMessage.uuid);trailingMessages&&(trailingMessages.sort((a2,b3)=>a2.timestamp<b3.timestamp?-1:a2.timestamp>b3.timestamp?1:0),chain2.push(...trailingMessages));let firstMessage=chain2[0],sessionId=leafMessage.sessionId;logs2.push({date:leafMessage.timestamp,messages:removeExtraFields(chain2),fullPath:sessionFile,value:0,created:new Date(firstMessage.timestamp),modified:new Date(leafMessage.timestamp),firstPrompt:extractFirstPrompt2(chain2),messageCount:countVisibleMessages(chain2),isSidechain:firstMessage.isSidechain??!1,sessionId,leafUuid:leafMessage.uuid,summary:summaries.get(leafMessage.uuid),customTitle:customTitles.get(sessionId),tag:tags.get(sessionId),agentName:agentNames.get(sessionId),agentColor:agentColors.get(sessionId),agentSetting:agentSettings.get(sessionId),mode:modes.get(sessionId),prNumber:prNumbers.get(sessionId),prUrl:prUrls.get(sessionId),prRepository:prRepositories.get(sessionId),gitBranch:leafMessage.gitBranch,projectPath:projectPathOverride??firstMessage.cwd,fileHistorySnapshots:buildFileHistorySnapshotChain(fileHistorySnapshots,chain2),attributionSnapshots:buildAttributionSnapshotChain(attributionSnapshots,chain2),contentReplacements:contentReplacements.get(sessionId)??[]})}return logs2}async function getLogsWithoutIndex(projectDir,limit){let sessionFilesMap=await getSessionFilesWithMtime(projectDir);if(sessionFilesMap.size===0)return[];let filesToProcess;limit&&sessionFilesMap.size>limit?filesToProcess=[...sessionFilesMap.values()].sort((a2,b3)=>b3.mtime-a2.mtime).slice(0,limit):filesToProcess=[...sessionFilesMap.values()];let logs2=[];for(let fileInfo of filesToProcess)try{let fileLogOptions=await loadAllLogsFromSessionFile(fileInfo.path);logs2.push(...fileLogOptions)}catch{logForDebugging(`Failed to load session file: ${fileInfo.path}`)}return logs2}async function readLiteMetadata(filePath,fileSize,buf){let{head:head2,tail:tail2}=await readHeadAndTail(filePath,fileSize,buf);if(!head2)return{firstPrompt:"",isSidechain:!1};let isSidechain=head2.includes('"isSidechain":true')||head2.includes('"isSidechain": true'),projectPath=extractJsonStringField(head2,"cwd"),teamName=extractJsonStringField(head2,"teamName"),agentSetting=extractJsonStringField(head2,"agentSetting"),firstPrompt=extractLastJsonStringField(tail2,"lastPrompt")||extractFirstPromptFromChunk(head2)||extractJsonStringFieldPrefix(head2,"content",200)||extractJsonStringFieldPrefix(head2,"text",200)||"",customTitle=extractLastJsonStringField(tail2,"customTitle")??extractLastJsonStringField(head2,"customTitle")??extractLastJsonStringField(tail2,"aiTitle")??extractLastJsonStringField(head2,"aiTitle"),summary=extractLastJsonStringField(tail2,"summary"),tag2=extractLastJsonStringField(tail2,"tag"),gitBranch=extractLastJsonStringField(tail2,"gitBranch")??extractJsonStringField(head2,"gitBranch"),prUrl=extractLastJsonStringField(tail2,"prUrl"),prRepository=extractLastJsonStringField(tail2,"prRepository"),prNumber,prNumStr=extractLastJsonStringField(tail2,"prNumber");if(prNumStr&&(prNumber=parseInt(prNumStr,10)||void 0),!prNumber){let prNumMatch=tail2.lastIndexOf('"prNumber":');if(prNumMatch>=0){let afterColon=tail2.slice(prNumMatch+11,prNumMatch+25),num2=parseInt(afterColon.trim(),10);num2>0&&(prNumber=num2)}}return{firstPrompt,gitBranch,isSidechain,projectPath,teamName,customTitle,summary,tag:tag2,agentSetting,prNumber,prUrl,prRepository}}function extractFirstPromptFromChunk(chunk3){let start=0,hasTickMessages=!1,firstCommandFallback="";for(;start<chunk3.length;){let newlineIdx=chunk3.indexOf(`
10216
- `,start),line=newlineIdx>=0?chunk3.slice(start,newlineIdx):chunk3.slice(start);if(start=newlineIdx>=0?newlineIdx+1:chunk3.length,!(!line.includes('"type":"user"')&&!line.includes('"type": "user"'))&&!line.includes('"tool_result"')&&!(line.includes('"isMeta":true')||line.includes('"isMeta": true')))try{let entry=jsonParse(line);if(entry.type!=="user")continue;let message=entry.message;if(!message)continue;let content=message.content,texts=[];if(typeof content=="string")texts.push(content);else if(Array.isArray(content))for(let block of content){let b3=block;b3.type==="text"&&typeof b3.text=="string"&&texts.push(b3.text)}for(let text3 of texts){if(!text3)continue;let result2=text3.replace(/\n/g," ").trim(),commandNameTag=extractTag(result2,COMMAND_NAME_TAG);if(commandNameTag){let name=commandNameTag.replace(/^\//,""),commandArgs=extractTag(result2,"command-args")?.trim()||"";if(builtInCommandNames().has(name)||!commandArgs){firstCommandFallback||(firstCommandFallback=commandNameTag);continue}return commandArgs?`${commandNameTag} ${commandArgs}`:commandNameTag}let bashInput=extractTag(result2,"bash-input");if(bashInput)return`! ${bashInput}`;if(!SKIP_FIRST_PROMPT_PATTERN2.test(result2))return result2.length>200&&(result2=result2.slice(0,200).trim()+"\u2026"),result2}}catch{continue}}return firstCommandFallback||""}function extractJsonStringFieldPrefix(text3,key,maxLen){let patterns=[`"${key}":"`,`"${key}": "`];for(let pattern of patterns){let idx=text3.indexOf(pattern);if(idx<0)continue;let valueStart=idx+pattern.length,i3=valueStart,collected=0;for(;i3<text3.length&&collected<maxLen;){if(text3[i3]==="\\"){i3+=2,collected++;continue}if(text3[i3]==='"')break;i3++,collected++}return text3.slice(valueStart,i3).replace(/\\n/g," ").replace(/\\t/g," ").trim()}return""}function deduplicateLogsBySessionId(logs2){let deduped=new Map;for(let log4 of logs2){if(!log4.sessionId)continue;let existing=deduped.get(log4.sessionId);(!existing||log4.modified.getTime()>existing.modified.getTime())&&deduped.set(log4.sessionId,log4)}return sortLogs([...deduped.values()]).map((log4,i3)=>({...log4,value:i3}))}async function getSessionFilesLite(projectDir,limit,projectPath){let entries=[...(await getSessionFilesWithMtime(projectDir)).entries()].sort((a2,b3)=>b3[1].mtime-a2[1].mtime);limit&&entries.length>limit&&(entries=entries.slice(0,limit));let logs2=[];for(let[sessionId,fileInfo]of entries)logs2.push({date:new Date(fileInfo.mtime).toISOString(),messages:[],isLite:!0,fullPath:fileInfo.path,value:0,created:new Date(fileInfo.ctime),modified:new Date(fileInfo.mtime),firstPrompt:"",messageCount:0,fileSize:fileInfo.size,isSidechain:!1,sessionId,projectPath});let sorted=sortLogs(logs2);return sorted.forEach((log4,i3)=>{log4.value=i3}),sorted}async function enrichLog(log4,readBuf){if(!log4.isLite||!log4.fullPath)return log4;let meta=await readLiteMetadata(log4.fullPath,log4.fileSize??0,readBuf),enriched={...log4,isLite:!1,firstPrompt:meta.firstPrompt,gitBranch:meta.gitBranch,isSidechain:meta.isSidechain,teamName:meta.teamName,customTitle:meta.customTitle,summary:meta.summary,tag:meta.tag,agentSetting:meta.agentSetting,prNumber:meta.prNumber,prUrl:meta.prUrl,prRepository:meta.prRepository,projectPath:meta.projectPath??log4.projectPath};return!enriched.firstPrompt&&!enriched.customTitle&&(enriched.firstPrompt="(session)"),enriched.isSidechain?(logForDebugging(`Session ${log4.sessionId} filtered from /resume: isSidechain=true`),null):enriched.teamName?(logForDebugging(`Session ${log4.sessionId} filtered from /resume: teamName=${enriched.teamName}`),null):enriched}async function enrichLogs(allLogs,startIndex,count4){let result2=[],readBuf=Buffer.alloc(LITE_READ_BUF_SIZE),i3=startIndex;for(;i3<allLogs.length&&result2.length<count4;){let log4=allLogs[i3];i3++;let enriched=await enrichLog(log4,readBuf);enriched&&result2.push(enriched)}let scanned=i3-startIndex,filtered=scanned-result2.length;return filtered>0&&logForDebugging(`/resume: enriched ${scanned} sessions, ${filtered} filtered out, ${result2.length} visible (${allLogs.length-i3} remaining on disk)`),{logs:result2,nextIndex:i3}}var VERSION5,v2ArchiveAppendQueues,v2ArchiveAppendFailuresForTests,MAX_TOMBSTONE_REWRITE_BYTES,SKIP_FIRST_PROMPT_PATTERN2,EPHEMERAL_PROGRESS_TYPES,MAX_TRANSCRIPT_READ_BYTES2,agentTranscriptSubdirs,agentMetadataWriteQueues,getProjectDir3,project,cleanupRegistered4,REMOTE_FLUSH_INTERVAL_MS,Project,lastTurnSummaryWritten,METADATA_TYPE_MARKERS,METADATA_MARKER_BUFS,METADATA_PREFIX_BOUND,getSessionMessages,INITIAL_ENRICH_COUNT,init_sessionStorage=__esm({"src/utils/sessionStorage.ts"(){init_memoize();init_analytics();init_state();init_commands2();init_branding();init_xml();init_growthbook();init_sessionIngress();init_constants5();init_ids();init_logs();init_v2ArchiveCodec();init_array3();init_cleanupRegistry();init_concurrentSessions();init_cwd2();init_debug();init_diagLogs();init_envUtils();init_errors2();init_boundaryV2();init_format();init_fsOperations();init_getWorktreePaths();init_git();init_gracefulShutdown();init_json();init_log3();init_messages4();init_path2();init_resumeConsistency();init_sessionStoragePortable();init_settings2();init_slowOperations();init_uuid2();VERSION5=typeof MACRO<"u"?"11.3.12":APP_VERSION,v2ArchiveAppendQueues=new Map,v2ArchiveAppendFailuresForTests=0,MAX_TOMBSTONE_REWRITE_BYTES=50*1024*1024,SKIP_FIRST_PROMPT_PATTERN2=/^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;__name(isTranscriptMessage,"isTranscriptMessage");__name(isChainParticipant,"isChainParticipant");__name(isLegacyProgressEntry,"isLegacyProgressEntry");EPHEMERAL_PROGRESS_TYPES=new Set(["bash_progress","powershell_progress","mcp_progress"]);__name(isEphemeralToolProgress,"isEphemeralToolProgress");__name(getProjectsDir2,"getProjectsDir");__name(getTranscriptPath,"getTranscriptPath");__name(getSessionSidecarPath,"getSessionSidecarPath");__name(getSessionSidecarPathForSession,"getSessionSidecarPathForSession");__name(getTranscriptPathForSession,"getTranscriptPathForSession");MAX_TRANSCRIPT_READ_BYTES2=50*1024*1024,agentTranscriptSubdirs=new Map;__name(setAgentTranscriptSubdir,"setAgentTranscriptSubdir");__name(clearAgentTranscriptSubdir,"clearAgentTranscriptSubdir");__name(getAgentTranscriptPath,"getAgentTranscriptPath");__name(getAgentMetadataPath,"getAgentMetadataPath");__name(finiteNonNegativeMetadataValue,"finiteNonNegativeMetadataValue");__name(earlierMetadataTimestamp,"earlierMetadataTimestamp");__name(mergeAgentBudgetLimits,"mergeAgentBudgetLimits");__name(mergeAgentBudgetUsage,"mergeAgentBudgetUsage");__name(mergeAgentTreeUsage,"mergeAgentTreeUsage");__name(mergeAgentMetadataPatch,"mergeAgentMetadataPatch");agentMetadataWriteQueues=new Map;__name(enqueueAgentMetadataWrite,"enqueueAgentMetadataWrite");__name(writeAgentMetadata,"writeAgentMetadata");__name(updateAgentMetadata,"updateAgentMetadata");__name(readAgentMetadata,"readAgentMetadata");__name(getRemoteAgentsDir,"getRemoteAgentsDir");__name(getRemoteAgentMetadataPath,"getRemoteAgentMetadataPath");__name(writeRemoteAgentMetadata,"writeRemoteAgentMetadata");__name(readRemoteAgentMetadata,"readRemoteAgentMetadata");__name(deleteRemoteAgentMetadata,"deleteRemoteAgentMetadata");__name(listRemoteAgentMetadata,"listRemoteAgentMetadata");__name(sessionIdExists,"sessionIdExists");__name(getNodeEnv,"getNodeEnv");__name(shouldSkipSessionPersistence,"shouldSkipSessionPersistence");__name(getUserType,"getUserType");__name(getEntrypoint,"getEntrypoint");__name(isCustomTitleEnabled,"isCustomTitleEnabled");getProjectDir3=memoize_default(projectDir=>join196(getProjectsDir2(),sanitizePath2(projectDir))),project=null,cleanupRegistered4=!1;__name(getProject,"getProject");__name(resetProjectFlushStateForTesting,"resetProjectFlushStateForTesting");__name(resetProjectForTesting,"resetProjectForTesting");__name(setSessionFileForTesting,"setSessionFileForTesting");__name(setInternalEventWriter,"setInternalEventWriter");__name(setInternalEventReader,"setInternalEventReader");__name(setRemoteIngressUrlForTesting,"setRemoteIngressUrlForTesting");REMOTE_FLUSH_INTERVAL_MS=10,Project=class{static{__name(this,"Project")}currentSessionTag;currentSessionTitle;currentSessionAgentName;currentSessionAgentColor;currentSessionLastPrompt;currentSessionAgentSetting;currentSessionMode;currentSessionWorktree;currentSessionPrNumber;currentSessionPrUrl;currentSessionPrRepository;currentBranchId="main";sessionFile=null;pendingEntries=[];remoteIngressUrl=null;internalEventWriter=null;internalEventReader=null;internalSubagentEventReader=null;pendingWriteCount=0;flushResolvers=[];writeQueues=new Map;flushTimer=null;activeDrain=null;FLUSH_INTERVAL_MS=100;MAX_CHUNK_BYTES=100*1024*1024;constructor(){}_resetFlushState(){this.pendingWriteCount=0,this.flushResolvers=[],this.flushTimer&&clearTimeout(this.flushTimer),this.flushTimer=null,this.activeDrain=null,this.writeQueues=new Map}incrementPendingWrites(){this.pendingWriteCount++}decrementPendingWrites(){if(this.pendingWriteCount--,this.pendingWriteCount===0){for(let resolve64 of this.flushResolvers)resolve64();this.flushResolvers=[]}}async trackWrite(fn){this.incrementPendingWrites();try{return await fn()}finally{this.decrementPendingWrites()}}enqueueWrite(filePath,entry){return new Promise(resolve64=>{let queue2=this.writeQueues.get(filePath);queue2||(queue2=[],this.writeQueues.set(filePath,queue2)),queue2.push({entry,resolve:resolve64}),this.scheduleDrain()})}scheduleDrain(){this.flushTimer||(this.flushTimer=setTimeout(async()=>{this.flushTimer=null,this.activeDrain=this.drainWriteQueue(),await this.activeDrain,this.activeDrain=null,this.writeQueues.size>0&&this.scheduleDrain()},this.FLUSH_INTERVAL_MS))}async appendToFile(filePath,data){try{await fsAppendFile(filePath,data,{mode:384})}catch{await mkdir62(dirname79(filePath),{recursive:!0,mode:448}),await fsAppendFile(filePath,data,{mode:384})}}async drainWriteQueue(){for(let[filePath,queue2]of this.writeQueues){if(queue2.length===0)continue;let batch2=queue2.splice(0),content="",resolvers=[];for(let{entry,resolve:resolve64}of batch2){let line=jsonStringify(entry)+`
10216
+ `,start),line=newlineIdx>=0?chunk3.slice(start,newlineIdx):chunk3.slice(start);if(start=newlineIdx>=0?newlineIdx+1:chunk3.length,!(!line.includes('"type":"user"')&&!line.includes('"type": "user"'))&&!line.includes('"tool_result"')&&!(line.includes('"isMeta":true')||line.includes('"isMeta": true')))try{let entry=jsonParse(line);if(entry.type!=="user")continue;let message=entry.message;if(!message)continue;let content=message.content,texts=[];if(typeof content=="string")texts.push(content);else if(Array.isArray(content))for(let block of content){let b3=block;b3.type==="text"&&typeof b3.text=="string"&&texts.push(b3.text)}for(let text3 of texts){if(!text3)continue;let result2=text3.replace(/\n/g," ").trim(),commandNameTag=extractTag(result2,COMMAND_NAME_TAG);if(commandNameTag){let name=commandNameTag.replace(/^\//,""),commandArgs=extractTag(result2,"command-args")?.trim()||"";if(builtInCommandNames().has(name)||!commandArgs){firstCommandFallback||(firstCommandFallback=commandNameTag);continue}return commandArgs?`${commandNameTag} ${commandArgs}`:commandNameTag}let bashInput=extractTag(result2,"bash-input");if(bashInput)return`! ${bashInput}`;if(!SKIP_FIRST_PROMPT_PATTERN2.test(result2))return result2.length>200&&(result2=result2.slice(0,200).trim()+"\u2026"),result2}}catch{continue}}return firstCommandFallback||""}function extractJsonStringFieldPrefix(text3,key,maxLen){let patterns=[`"${key}":"`,`"${key}": "`];for(let pattern of patterns){let idx=text3.indexOf(pattern);if(idx<0)continue;let valueStart=idx+pattern.length,i3=valueStart,collected=0;for(;i3<text3.length&&collected<maxLen;){if(text3[i3]==="\\"){i3+=2,collected++;continue}if(text3[i3]==='"')break;i3++,collected++}return text3.slice(valueStart,i3).replace(/\\n/g," ").replace(/\\t/g," ").trim()}return""}function deduplicateLogsBySessionId(logs2){let deduped=new Map;for(let log4 of logs2){if(!log4.sessionId)continue;let existing=deduped.get(log4.sessionId);(!existing||log4.modified.getTime()>existing.modified.getTime())&&deduped.set(log4.sessionId,log4)}return sortLogs([...deduped.values()]).map((log4,i3)=>({...log4,value:i3}))}async function getSessionFilesLite(projectDir,limit,projectPath){let entries=[...(await getSessionFilesWithMtime(projectDir)).entries()].sort((a2,b3)=>b3[1].mtime-a2[1].mtime);limit&&entries.length>limit&&(entries=entries.slice(0,limit));let logs2=[];for(let[sessionId,fileInfo]of entries)logs2.push({date:new Date(fileInfo.mtime).toISOString(),messages:[],isLite:!0,fullPath:fileInfo.path,value:0,created:new Date(fileInfo.ctime),modified:new Date(fileInfo.mtime),firstPrompt:"",messageCount:0,fileSize:fileInfo.size,isSidechain:!1,sessionId,projectPath});let sorted=sortLogs(logs2);return sorted.forEach((log4,i3)=>{log4.value=i3}),sorted}async function enrichLog(log4,readBuf){if(!log4.isLite||!log4.fullPath)return log4;let meta=await readLiteMetadata(log4.fullPath,log4.fileSize??0,readBuf),enriched={...log4,isLite:!1,firstPrompt:meta.firstPrompt,gitBranch:meta.gitBranch,isSidechain:meta.isSidechain,teamName:meta.teamName,customTitle:meta.customTitle,summary:meta.summary,tag:meta.tag,agentSetting:meta.agentSetting,prNumber:meta.prNumber,prUrl:meta.prUrl,prRepository:meta.prRepository,projectPath:meta.projectPath??log4.projectPath};return!enriched.firstPrompt&&!enriched.customTitle&&(enriched.firstPrompt="(session)"),enriched.isSidechain?(logForDebugging(`Session ${log4.sessionId} filtered from /resume: isSidechain=true`),null):enriched.teamName?(logForDebugging(`Session ${log4.sessionId} filtered from /resume: teamName=${enriched.teamName}`),null):enriched}async function enrichLogs(allLogs,startIndex,count4){let result2=[],readBuf=Buffer.alloc(LITE_READ_BUF_SIZE),i3=startIndex;for(;i3<allLogs.length&&result2.length<count4;){let log4=allLogs[i3];i3++;let enriched=await enrichLog(log4,readBuf);enriched&&result2.push(enriched)}let scanned=i3-startIndex,filtered=scanned-result2.length;return filtered>0&&logForDebugging(`/resume: enriched ${scanned} sessions, ${filtered} filtered out, ${result2.length} visible (${allLogs.length-i3} remaining on disk)`),{logs:result2,nextIndex:i3}}var VERSION5,v2ArchiveAppendQueues,v2ArchiveAppendFailuresForTests,MAX_TOMBSTONE_REWRITE_BYTES,SKIP_FIRST_PROMPT_PATTERN2,EPHEMERAL_PROGRESS_TYPES,MAX_TRANSCRIPT_READ_BYTES2,agentTranscriptSubdirs,agentMetadataWriteQueues,getProjectDir3,project,cleanupRegistered4,REMOTE_FLUSH_INTERVAL_MS,Project,lastTurnSummaryWritten,METADATA_TYPE_MARKERS,METADATA_MARKER_BUFS,METADATA_PREFIX_BOUND,getSessionMessages,INITIAL_ENRICH_COUNT,init_sessionStorage=__esm({"src/utils/sessionStorage.ts"(){init_memoize();init_analytics();init_state();init_commands2();init_branding();init_xml();init_growthbook();init_sessionIngress();init_constants5();init_ids();init_logs();init_v2ArchiveCodec();init_array3();init_cleanupRegistry();init_concurrentSessions();init_cwd2();init_debug();init_diagLogs();init_envUtils();init_errors2();init_boundaryV2();init_format();init_fsOperations();init_getWorktreePaths();init_git();init_gracefulShutdown();init_json();init_log3();init_messages4();init_path2();init_resumeConsistency();init_sessionStoragePortable();init_settings2();init_slowOperations();init_uuid2();VERSION5=typeof MACRO<"u"?"11.3.13":APP_VERSION,v2ArchiveAppendQueues=new Map,v2ArchiveAppendFailuresForTests=0,MAX_TOMBSTONE_REWRITE_BYTES=50*1024*1024,SKIP_FIRST_PROMPT_PATTERN2=/^(?:\s*<[a-z][\w-]*[\s>]|\[Request interrupted by user[^\]]*\])/;__name(isTranscriptMessage,"isTranscriptMessage");__name(isChainParticipant,"isChainParticipant");__name(isLegacyProgressEntry,"isLegacyProgressEntry");EPHEMERAL_PROGRESS_TYPES=new Set(["bash_progress","powershell_progress","mcp_progress"]);__name(isEphemeralToolProgress,"isEphemeralToolProgress");__name(getProjectsDir2,"getProjectsDir");__name(getTranscriptPath,"getTranscriptPath");__name(getSessionSidecarPath,"getSessionSidecarPath");__name(getSessionSidecarPathForSession,"getSessionSidecarPathForSession");__name(getTranscriptPathForSession,"getTranscriptPathForSession");MAX_TRANSCRIPT_READ_BYTES2=50*1024*1024,agentTranscriptSubdirs=new Map;__name(setAgentTranscriptSubdir,"setAgentTranscriptSubdir");__name(clearAgentTranscriptSubdir,"clearAgentTranscriptSubdir");__name(getAgentTranscriptPath,"getAgentTranscriptPath");__name(getAgentMetadataPath,"getAgentMetadataPath");__name(finiteNonNegativeMetadataValue,"finiteNonNegativeMetadataValue");__name(earlierMetadataTimestamp,"earlierMetadataTimestamp");__name(mergeAgentBudgetLimits,"mergeAgentBudgetLimits");__name(mergeAgentBudgetUsage,"mergeAgentBudgetUsage");__name(mergeAgentTreeUsage,"mergeAgentTreeUsage");__name(mergeAgentMetadataPatch,"mergeAgentMetadataPatch");agentMetadataWriteQueues=new Map;__name(enqueueAgentMetadataWrite,"enqueueAgentMetadataWrite");__name(writeAgentMetadata,"writeAgentMetadata");__name(updateAgentMetadata,"updateAgentMetadata");__name(readAgentMetadata,"readAgentMetadata");__name(getRemoteAgentsDir,"getRemoteAgentsDir");__name(getRemoteAgentMetadataPath,"getRemoteAgentMetadataPath");__name(writeRemoteAgentMetadata,"writeRemoteAgentMetadata");__name(readRemoteAgentMetadata,"readRemoteAgentMetadata");__name(deleteRemoteAgentMetadata,"deleteRemoteAgentMetadata");__name(listRemoteAgentMetadata,"listRemoteAgentMetadata");__name(sessionIdExists,"sessionIdExists");__name(getNodeEnv,"getNodeEnv");__name(shouldSkipSessionPersistence,"shouldSkipSessionPersistence");__name(getUserType,"getUserType");__name(getEntrypoint,"getEntrypoint");__name(isCustomTitleEnabled,"isCustomTitleEnabled");getProjectDir3=memoize_default(projectDir=>join196(getProjectsDir2(),sanitizePath2(projectDir))),project=null,cleanupRegistered4=!1;__name(getProject,"getProject");__name(resetProjectFlushStateForTesting,"resetProjectFlushStateForTesting");__name(resetProjectForTesting,"resetProjectForTesting");__name(setSessionFileForTesting,"setSessionFileForTesting");__name(setInternalEventWriter,"setInternalEventWriter");__name(setInternalEventReader,"setInternalEventReader");__name(setRemoteIngressUrlForTesting,"setRemoteIngressUrlForTesting");REMOTE_FLUSH_INTERVAL_MS=10,Project=class{static{__name(this,"Project")}currentSessionTag;currentSessionTitle;currentSessionAgentName;currentSessionAgentColor;currentSessionLastPrompt;currentSessionAgentSetting;currentSessionMode;currentSessionWorktree;currentSessionPrNumber;currentSessionPrUrl;currentSessionPrRepository;currentBranchId="main";sessionFile=null;pendingEntries=[];remoteIngressUrl=null;internalEventWriter=null;internalEventReader=null;internalSubagentEventReader=null;pendingWriteCount=0;flushResolvers=[];writeQueues=new Map;flushTimer=null;activeDrain=null;FLUSH_INTERVAL_MS=100;MAX_CHUNK_BYTES=100*1024*1024;constructor(){}_resetFlushState(){this.pendingWriteCount=0,this.flushResolvers=[],this.flushTimer&&clearTimeout(this.flushTimer),this.flushTimer=null,this.activeDrain=null,this.writeQueues=new Map}incrementPendingWrites(){this.pendingWriteCount++}decrementPendingWrites(){if(this.pendingWriteCount--,this.pendingWriteCount===0){for(let resolve64 of this.flushResolvers)resolve64();this.flushResolvers=[]}}async trackWrite(fn){this.incrementPendingWrites();try{return await fn()}finally{this.decrementPendingWrites()}}enqueueWrite(filePath,entry){return new Promise(resolve64=>{let queue2=this.writeQueues.get(filePath);queue2||(queue2=[],this.writeQueues.set(filePath,queue2)),queue2.push({entry,resolve:resolve64}),this.scheduleDrain()})}scheduleDrain(){this.flushTimer||(this.flushTimer=setTimeout(async()=>{this.flushTimer=null,this.activeDrain=this.drainWriteQueue(),await this.activeDrain,this.activeDrain=null,this.writeQueues.size>0&&this.scheduleDrain()},this.FLUSH_INTERVAL_MS))}async appendToFile(filePath,data){try{await fsAppendFile(filePath,data,{mode:384})}catch{await mkdir62(dirname79(filePath),{recursive:!0,mode:448}),await fsAppendFile(filePath,data,{mode:384})}}async drainWriteQueue(){for(let[filePath,queue2]of this.writeQueues){if(queue2.length===0)continue;let batch2=queue2.splice(0),content="",resolvers=[];for(let{entry,resolve:resolve64}of batch2){let line=jsonStringify(entry)+`
10217
10217
  `;if(content.length+line.length>=this.MAX_CHUNK_BYTES){await this.appendToFile(filePath,content);for(let r2 of resolvers)r2();resolvers.length=0,content=""}content+=line,resolvers.push(resolve64)}if(content.length>0){await this.appendToFile(filePath,content);for(let r2 of resolvers)r2()}}for(let[filePath,queue2]of this.writeQueues)queue2.length===0&&this.writeQueues.delete(filePath)}resetSessionFile(){this.sessionFile=null,this.pendingEntries=[]}reAppendSessionMetadata(skipTitleRefresh=!1){if(!this.sessionFile)return;let sessionId=getSessionId();if(!sessionId)return;let tailLines=readFileTailSync(this.sessionFile).split(`
10218
10218
  `);if(!skipTitleRefresh){let titleLine=tailLines.findLast(l=>l.startsWith('{"type":"custom-title"'));if(titleLine){let tailTitle=extractLastJsonStringField(titleLine,"customTitle");tailTitle!==void 0&&(this.currentSessionTitle=tailTitle||void 0)}}let tagLine=tailLines.findLast(l=>l.startsWith('{"type":"tag"'));if(tagLine){let tailTag=extractLastJsonStringField(tagLine,"tag");tailTag!==void 0&&(this.currentSessionTag=tailTag||void 0)}this.currentSessionLastPrompt&&appendEntryToFile(this.sessionFile,{type:"last-prompt",lastPrompt:this.currentSessionLastPrompt,sessionId}),this.currentSessionTitle&&appendEntryToFile(this.sessionFile,{type:"custom-title",customTitle:this.currentSessionTitle,sessionId}),this.currentSessionTag&&appendEntryToFile(this.sessionFile,{type:"tag",tag:this.currentSessionTag,sessionId}),this.currentSessionAgentName&&appendEntryToFile(this.sessionFile,{type:"agent-name",agentName:this.currentSessionAgentName,sessionId}),this.currentSessionAgentColor&&appendEntryToFile(this.sessionFile,{type:"agent-color",agentColor:this.currentSessionAgentColor,sessionId}),this.currentSessionAgentSetting&&appendEntryToFile(this.sessionFile,{type:"agent-setting",agentSetting:this.currentSessionAgentSetting,sessionId}),this.currentSessionMode&&appendEntryToFile(this.sessionFile,{type:"mode",mode:this.currentSessionMode,sessionId}),this.currentSessionWorktree!==void 0&&appendEntryToFile(this.sessionFile,{type:"worktree-state",worktreeSession:this.currentSessionWorktree,sessionId}),this.currentSessionPrNumber!==void 0&&this.currentSessionPrUrl&&this.currentSessionPrRepository&&appendEntryToFile(this.sessionFile,{type:"pr-link",sessionId,prNumber:this.currentSessionPrNumber,prUrl:this.currentSessionPrUrl,prRepository:this.currentSessionPrRepository,timestamp:new Date().toISOString()})}async flush(){if(this.flushTimer&&(clearTimeout(this.flushTimer),this.flushTimer=null),this.activeDrain&&await this.activeDrain,await this.drainWriteQueue(),this.pendingWriteCount!==0)return new Promise(resolve64=>{this.flushResolvers.push(resolve64)})}async removeMessageByUuid(targetUuid){return this.trackWrite(async()=>{if(this.sessionFile!==null)try{let fileSize=0,fh=await fsOpen2(this.sessionFile,"r+");try{let{size:size2}=await fh.stat();if(fileSize=size2,size2===0)return;let chunkLen=Math.min(size2,LITE_READ_BUF_SIZE),tailStart=size2-chunkLen,buf=Buffer.allocUnsafe(chunkLen),{bytesRead}=await fh.read(buf,0,chunkLen,tailStart),tail2=buf.subarray(0,bytesRead),needle=`"uuid":"${targetUuid}"`,matchIdx=tail2.lastIndexOf(needle);if(matchIdx>=0){let prevNl=tail2.lastIndexOf(10,matchIdx);if(prevNl>=0||tailStart===0){let lineStart=prevNl+1,nextNl=tail2.indexOf(10,matchIdx+needle.length),lineEnd=nextNl>=0?nextNl+1:bytesRead,absLineStart=tailStart+lineStart,afterLen=bytesRead-lineEnd;await fh.truncate(absLineStart),afterLen>0&&await fh.write(tail2,lineEnd,afterLen,absLineStart);return}}}finally{await fh.close()}if(fileSize>MAX_TOMBSTONE_REWRITE_BYTES){logForDebugging(`Skipping tombstone removal: session file too large (${formatFileSize(fileSize)})`,{level:"warn"});return}let lines=(await readFile73(this.sessionFile,{encoding:"utf-8"})).split(`
10219
10219
  `).filter(line=>{if(!line.trim())return!0;try{return jsonParse(line).uuid!==targetUuid}catch{return!0}});await writeFileAtomically(this.sessionFile,lines.join(`
@@ -11055,7 +11055,7 @@ ${ban}`)}}catch{}yield{type:"result",subtype:"success",is_error:isApiError||fals
11055
11055
  `),stopReason="end_turn";if(state4.onPrompt){let hooked=await state4.onPrompt({sessionId,prompt:promptText,notify:emit2,requestClient:state4.requestClient});hooked&&(responseText=hooked.text,stopReason=hooked.stopReason??"end_turn");let ms=refreshAndEmitAcpRouteChrome(emit2,session2.currentModelId);session2.currentModelId=ms.currentModelId,state4.modelState=ms}return!state4.onPrompt&&responseText&&emit2("session/update",{sessionId,update:{sessionUpdate:"agent_message_chunk",content:{type:"text",text:responseText}}}),{jsonrpc:"2.0",id,result:{stopReason:stopReason==="error"?"refusal":stopReason==="end_turn"||stopReason==="cancelled"||stopReason==="max_tokens"?stopReason:"end_turn",_meta:{clavue:{bridge:state4.onPrompt?"hooked":"thin",sessionId,promptCount:session2.prompts.length}}}}}case"session/cancel":{let cancelParams=isObject8(request.params)?request.params:{},cancelSessionId=String(typeof cancelParams.sessionId=="string"?cancelParams.sessionId:typeof cancelParams.session_id=="string"?cancelParams.session_id:"").trim();return cancelSessionId?state4.messageStore?.cancelTurn?.(cancelSessionId,"session cancelled"):state4.messageStore?.cancelAllTurns?.("session cancelled"),{jsonrpc:"2.0",id,result:{}}}case"shutdown":return state4.messageStore?.cancelAllTurns?.("shutdown"),state4.sessions.clear(),state4.initialized=!1,{jsonrpc:"2.0",id,result:{ok:!0}};default:return isAcpRewindMethod(request.method)?handleAcpRewindRequest(state4,request,id,emit2):{jsonrpc:"2.0",id,error:{code:-32601,message:`Method not found: ${request.method}`}}}}catch(error40){return{jsonrpc:"2.0",id,error:{code:-32e3,message:error40 instanceof Error?error40.message:String(error40)}}}}async function handleAcpRewindRequest(state4,request,id,emit2){let kind=acpRewindMethodName(request.method),params=isObject8(request.params)?request.params:{},sessionId=typeof params.sessionId=="string"?params.sessionId:typeof params.session_id=="string"?params.session_id:"",session2=state4.sessions.get(sessionId);if(!session2)return{jsonrpc:"2.0",id,error:{code:-32001,message:`Unknown session: ${sessionId}`}};if(kind==="points"){let result2=buildAcpRewindPoints(session2.prompts);return{jsonrpc:"2.0",id,result:result2}}if(kind==="execute"){let targetPromptIndex=Number(params.targetPromptIndex??params.target_prompt_index??0),force=params.force===!0,mode=normalizeAcpRewindMode(params.mode),durableId=resolveDurableSessionId(session2);await activateClavueSessionIdentity(durableId);let result2=await handleAcpRewindExecute({session:{sessionId:session2.sessionId,prompts:session2.prompts,durableSessionId:durableId,cwd:state4.cwd},targetPromptIndex,force,mode,messageStore:state4.messageStore,durableSessionId:durableId});return force&&result2.success&&emit2("_x.ai/session_notification",{sessionId,update:{sessionUpdate:"rewind_marker",target_prompt_index:result2.targetPromptIndex,created_at:new Date().toISOString()}}),{jsonrpc:"2.0",id,result:result2}}return{jsonrpc:"2.0",id,error:{code:-32601,message:`Method not found: ${request.method}`}}}function extractAcpPromptText(prompt){return typeof prompt=="string"?prompt.trim():Array.isArray(prompt)?prompt.map(block=>{if(typeof block=="string")return block;if(isObject8(block)){if(typeof block.text=="string")return block.text;if(isObject8(block.content)&&typeof block.content.text=="string")return block.content.text}return""}).filter(Boolean).join(`
11056
11056
  `).trim():isObject8(prompt)&&typeof prompt.text=="string"?prompt.text.trim():""}function parseAcpLine(line){let trimmed=line.trim();if(!trimmed)return null;let parsed=JSON.parse(trimmed);if(!isObject8(parsed)||parsed.jsonrpc!=="2.0"||typeof parsed.method!="string")throw new Error("Invalid JSON-RPC 2.0 request");return parsed}async function runAcpStdioServer(options={}){let stdin=options.input??input,stdout=options.output??output,writeLine=__name(line=>{stdout.write(`${line}
11057
11057
  `)},"writeLine"),write=__name(response=>{writeLine(JSON.stringify(response))},"write"),notifyDefault=__name(notification=>{writeLine(JSON.stringify(notification))},"notifyDefault"),{createAcpClientRpc:createAcpClientRpc2}=await Promise.resolve().then(()=>(init_acpClientRpc(),acpClientRpc_exports)),clientRpc=createAcpClientRpc2(writeLine),requestClient=options.requestClient??clientRpc.request.bind(clientRpc),bridgeSubagents=createAcpSubagentRegistry((method2,params)=>{notifyDefault({jsonrpc:"2.0",method:method2,params})}),cwd6=options.cwd??process.cwd(),makeRunSubagentChild=__name(executeEnabled=>{if(executeEnabled)return async(spec,childSessionId)=>{let{executeAcpPromptHeadless:executeAcpPromptHeadless2}=await Promise.resolve().then(()=>(init_acpHeadlessExecutor(),acpHeadlessExecutor_exports)),childPrompt=[`[Clavue subagent type=${spec.subagentType}`+(spec.role?` role=${spec.role}`:"")+(spec.model?` model=${spec.model}`:"")+` id=${childSessionId}]`,"Complete the task succinctly. Prefer tools over speculation.","",spec.prompt].join(`
11058
- `);return(await executeAcpPromptHeadless2({prompt:childPrompt,cwd:cwd6,maxTurns:6,permissionMode:"acceptEdits",sessionId:childSessionId,env:{...process.env,...spec.model?{CLAVUE_MODEL:spec.model}:{},CLAVUE_ACP_SUBAGENT:"1",CLAVUE_ACP_SUBAGENT_TYPE:spec.subagentType}})).text}},"makeRunSubagentChild"),bridgeHolder={state:null},state4=options.state;if(!state4){let{resolveAcpExecuteMode:resolveAcpExecuteMode2}=await Promise.resolve().then(()=>(init_acpInProcessExecutor(),acpInProcessExecutor_exports)),mode=options.executeMode??(options.execute===!0?process.env.CLAVUE_ACP_EXECUTE_MODE?.toLowerCase()==="subprocess"?"subprocess":"inprocess":resolveAcpExecuteMode2()),runSubagentChild=makeRunSubagentChild(mode==="inprocess"||mode==="subprocess"),resolveSessionPermissionMode=__name(sessionId=>bridgeHolder.state?.sessions.get(sessionId)?.permissionMode??"auto","resolveSessionPermissionMode");if(mode==="inprocess"){let{createAcpInProcessSessionStore:createAcpInProcessSessionStore2,executeAcpPromptInProcess:executeAcpPromptInProcess2}=await Promise.resolve().then(()=>(init_acpInProcessExecutor(),acpInProcessExecutor_exports)),{bindSessionNotify:bindSessionNotify2}=await Promise.resolve().then(()=>(init_acpSessionNotify(),acpSessionNotify_exports)),sessionStore=createAcpInProcessSessionStore2();state4=createAcpBridgeState({notify:notifyDefault,requestClient,messageStore:sessionStore,cwd:cwd6,subagents:bridgeSubagents,runSubagentChild,onPrompt:__name(async({sessionId,prompt,notify:notify2,requestClient:rc})=>{let nestedNotify=bindSessionNotify2(sessionId,notify2),permissionMode=resolveSessionPermissionMode(sessionId),runTurn=__name(turnPrompt=>executeAcpPromptInProcess2({sessionId,prompt:turnPrompt,cwd:cwd6,notify:nestedNotify,requestClient:rc??requestClient,sessionStore,subagents:bridgeSubagents,permissionMode}),"runTurn"),first=await runTurn(prompt),{finalizeAcpGoalAfterExecuteTurn:finalizeAcpGoalAfterExecuteTurn2}=await Promise.resolve().then(()=>(init_acpGoal(),acpGoal_exports)),settled=await finalizeAcpGoalAfterExecuteTurn2({cwd:cwd6,sessionId,notify:notify2,result:first,subagents:bridgeSubagents,runContinuation:__name(nextInput=>runTurn(nextInput),"runContinuation")});return{text:settled.result.text,stopReason:settled.result.stopReason,toolCalls:settled.result.toolCalls}},"onPrompt")})}else if(mode==="subprocess"){let{executeAcpPromptHeadless:executeAcpPromptHeadless2}=await Promise.resolve().then(()=>(init_acpHeadlessExecutor(),acpHeadlessExecutor_exports)),{bindSessionNotify:bindSessionNotify2}=await Promise.resolve().then(()=>(init_acpSessionNotify(),acpSessionNotify_exports));state4=createAcpBridgeState({notify:notifyDefault,requestClient,cwd:cwd6,subagents:bridgeSubagents,runSubagentChild,onPrompt:__name(async({sessionId,prompt,notify:notify2})=>{let nestedNotify=bindSessionNotify2(sessionId,notify2),permissionMode=resolveSessionPermissionMode(sessionId),runTurn=__name(turnPrompt=>executeAcpPromptHeadless2({prompt:turnPrompt,cwd:cwd6,notify:nestedNotify,sessionId,subagents:bridgeSubagents,permissionMode}),"runTurn"),first=await runTurn(prompt),{finalizeAcpGoalAfterExecuteTurn:finalizeAcpGoalAfterExecuteTurn2}=await Promise.resolve().then(()=>(init_acpGoal(),acpGoal_exports)),settled=await finalizeAcpGoalAfterExecuteTurn2({cwd:cwd6,sessionId,notify:notify2,result:first,subagents:bridgeSubagents,runContinuation:__name(nextInput=>runTurn(nextInput),"runContinuation")});return{text:settled.result.text,stopReason:settled.result.stopReason,toolCalls:settled.result.toolCalls}},"onPrompt")})}else state4=createAcpBridgeState({notify:notifyDefault,requestClient,cwd:cwd6,subagents:bridgeSubagents})}bridgeHolder.state=state4;let rl=createInterface6({input:stdin,crlfDelay:1/0});state4.notify||(state4.notify=notifyDefault),state4.requestClient||(state4.requestClient=requestClient),state4.subagents||(state4.subagents=bridgeSubagents);let inFlight2=new Set,shuttingDown=!1;for await(let line of rl){let obj;try{let trimmed=String(line).trim();if(!trimmed)continue;let parsed=JSON.parse(trimmed);if(!isObject8(parsed)||parsed.jsonrpc!=="2.0")throw new Error("Invalid JSON-RPC 2.0 message");obj=parsed}catch(error40){write({jsonrpc:"2.0",id:null,error:{code:-32700,message:error40 instanceof Error?error40.message:"Parse error"}});continue}if(clientRpc.handleResponseLine(obj)||typeof obj.method!="string")continue;let request=obj;if(request.method==="session/cancel"){clientRpc.cancelAll("session cancelled");let cancelSessionId=String(request.params?.sessionId??"").trim();cancelSessionId?state4?.messageStore?.cancelTurn?.(cancelSessionId,"session cancelled"):state4?.messageStore?.cancelAllTurns?.("session cancelled")}let task=(async()=>{let response=await handleAcpRequest(state4,request);response&&write(response)})();if(inFlight2.add(task),task.finally(()=>inFlight2.delete(task)),request.method==="shutdown"&&request.id!==void 0){shuttingDown=!0,await Promise.allSettled([...inFlight2].filter(t8=>t8!==task)),clientRpc.cancelAll("shutdown"),await task;break}}shuttingDown||clientRpc.cancelAll("stdin closed"),await Promise.allSettled([...inFlight2])}var ACP_PROTOCOL_VERSION,ACP_AGENT_NAME,ACP_AGENT_VERSION,init_acpStdio=__esm({"src/entrypoints/acpStdio.ts"(){init_acpModelChrome();init_acpSessionIdentity();init_acpSessionMode();init_acpRewind();init_acpSlashRoute();init_acpSubagents();ACP_PROTOCOL_VERSION=1,ACP_AGENT_NAME="clavue",ACP_AGENT_VERSION=(()=>{if(typeof MACRO<"u")return"11.3.12";try{let{APP_VERSION:APP_VERSION2}=(init_branding(),__toCommonJS(branding_exports));if(APP_VERSION2)return String(APP_VERSION2)}catch{}return"0.0.0"})();__name(createAcpBridgeState,"createAcpBridgeState");__name(bridgeNotify,"bridgeNotify");__name(refreshModelState,"refreshModelState");__name(isObject8,"isObject");__name(handleAcpRequest,"handleAcpRequest");__name(handleAcpRewindRequest,"handleAcpRewindRequest");__name(extractAcpPromptText,"extractAcpPromptText");__name(parseAcpLine,"parseAcpLine");__name(runAcpStdioServer,"runAcpStdioServer")}});var grokTuiCli_exports={};__export(grokTuiCli_exports,{formatClavueTuiVersionLine:()=>formatClavueTuiVersionLine,resolveClavueProductVersion:()=>resolveClavueProductVersion,resolveClavueTuiBinary:()=>resolveClavueTuiBinary,runGrokTuiCli:()=>runGrokTuiCli});import{spawn as spawn16}from"node:child_process";import{existsSync as existsSync62,readFileSync as readFileSync57}from"node:fs";import{dirname as dirname86,join as join224,resolve as resolve56}from"node:path";import{fileURLToPath as fileURLToPath12}from"node:url";import{arch as arch2,platform as platform5}from"node:os";function platformTriple2(){let p=platform5()==="darwin"?"darwin":platform5()==="win32"?"win32":"linux",a2=arch2()==="arm64"?"arm64":arch2()==="x64"?"x64":arch2();return`${p}-${a2}`}function resolvePackageRoot(){return resolveClavueRoot()??resolve56(__dirname3,"../..")??process.cwd()}function resolveClavueProductVersion(root2=resolvePackageRoot()){try{let pkgPath=join224(root2,"package.json");if(existsSync62(pkgPath)){let pkg=JSON.parse(readFileSync57(pkgPath,"utf8")),v2=String(pkg.version||"").trim();if(v2)return v2}}catch{}return APP_VERSION}function formatClavueTuiVersionLine(root2=resolvePackageRoot()){return`${resolveClavueProductVersion(root2)} (Clavue)`}function resolveClavueTuiBinary(){let root2=resolvePackageRoot(),native=join224(root2,"dist","native"),exe=platform5()==="win32"?".exe":"",candidates=[process.env.CLAVUE_TUI_BIN,join224(native,`clavue-tui-real-${platformTriple2()}${exe}`),join224(native,`clavue-tui-real${exe}`),join224(native,`clavue-tui-${platformTriple2()}${exe}`),join224(native,`clavue-tui${exe}`)].filter(Boolean);for(let p of candidates)if(existsSync62(p))return p;return null}async function runGrokTuiCli(args){let root2=resolvePackageRoot(),productVersion=resolveClavueProductVersion(root2);if(args.includes("--help")||args.includes("-h"))return process.stdout.write(`clavue tui \u2014 optional interaction substrate (Clavue-branded)
11058
+ `);return(await executeAcpPromptHeadless2({prompt:childPrompt,cwd:cwd6,maxTurns:6,permissionMode:"acceptEdits",sessionId:childSessionId,env:{...process.env,...spec.model?{CLAVUE_MODEL:spec.model}:{},CLAVUE_ACP_SUBAGENT:"1",CLAVUE_ACP_SUBAGENT_TYPE:spec.subagentType}})).text}},"makeRunSubagentChild"),bridgeHolder={state:null},state4=options.state;if(!state4){let{resolveAcpExecuteMode:resolveAcpExecuteMode2}=await Promise.resolve().then(()=>(init_acpInProcessExecutor(),acpInProcessExecutor_exports)),mode=options.executeMode??(options.execute===!0?process.env.CLAVUE_ACP_EXECUTE_MODE?.toLowerCase()==="subprocess"?"subprocess":"inprocess":resolveAcpExecuteMode2()),runSubagentChild=makeRunSubagentChild(mode==="inprocess"||mode==="subprocess"),resolveSessionPermissionMode=__name(sessionId=>bridgeHolder.state?.sessions.get(sessionId)?.permissionMode??"auto","resolveSessionPermissionMode");if(mode==="inprocess"){let{createAcpInProcessSessionStore:createAcpInProcessSessionStore2,executeAcpPromptInProcess:executeAcpPromptInProcess2}=await Promise.resolve().then(()=>(init_acpInProcessExecutor(),acpInProcessExecutor_exports)),{bindSessionNotify:bindSessionNotify2}=await Promise.resolve().then(()=>(init_acpSessionNotify(),acpSessionNotify_exports)),sessionStore=createAcpInProcessSessionStore2();state4=createAcpBridgeState({notify:notifyDefault,requestClient,messageStore:sessionStore,cwd:cwd6,subagents:bridgeSubagents,runSubagentChild,onPrompt:__name(async({sessionId,prompt,notify:notify2,requestClient:rc})=>{let nestedNotify=bindSessionNotify2(sessionId,notify2),permissionMode=resolveSessionPermissionMode(sessionId),runTurn=__name(turnPrompt=>executeAcpPromptInProcess2({sessionId,prompt:turnPrompt,cwd:cwd6,notify:nestedNotify,requestClient:rc??requestClient,sessionStore,subagents:bridgeSubagents,permissionMode}),"runTurn"),first=await runTurn(prompt),{finalizeAcpGoalAfterExecuteTurn:finalizeAcpGoalAfterExecuteTurn2}=await Promise.resolve().then(()=>(init_acpGoal(),acpGoal_exports)),settled=await finalizeAcpGoalAfterExecuteTurn2({cwd:cwd6,sessionId,notify:notify2,result:first,subagents:bridgeSubagents,runContinuation:__name(nextInput=>runTurn(nextInput),"runContinuation")});return{text:settled.result.text,stopReason:settled.result.stopReason,toolCalls:settled.result.toolCalls}},"onPrompt")})}else if(mode==="subprocess"){let{executeAcpPromptHeadless:executeAcpPromptHeadless2}=await Promise.resolve().then(()=>(init_acpHeadlessExecutor(),acpHeadlessExecutor_exports)),{bindSessionNotify:bindSessionNotify2}=await Promise.resolve().then(()=>(init_acpSessionNotify(),acpSessionNotify_exports));state4=createAcpBridgeState({notify:notifyDefault,requestClient,cwd:cwd6,subagents:bridgeSubagents,runSubagentChild,onPrompt:__name(async({sessionId,prompt,notify:notify2})=>{let nestedNotify=bindSessionNotify2(sessionId,notify2),permissionMode=resolveSessionPermissionMode(sessionId),runTurn=__name(turnPrompt=>executeAcpPromptHeadless2({prompt:turnPrompt,cwd:cwd6,notify:nestedNotify,sessionId,subagents:bridgeSubagents,permissionMode}),"runTurn"),first=await runTurn(prompt),{finalizeAcpGoalAfterExecuteTurn:finalizeAcpGoalAfterExecuteTurn2}=await Promise.resolve().then(()=>(init_acpGoal(),acpGoal_exports)),settled=await finalizeAcpGoalAfterExecuteTurn2({cwd:cwd6,sessionId,notify:notify2,result:first,subagents:bridgeSubagents,runContinuation:__name(nextInput=>runTurn(nextInput),"runContinuation")});return{text:settled.result.text,stopReason:settled.result.stopReason,toolCalls:settled.result.toolCalls}},"onPrompt")})}else state4=createAcpBridgeState({notify:notifyDefault,requestClient,cwd:cwd6,subagents:bridgeSubagents})}bridgeHolder.state=state4;let rl=createInterface6({input:stdin,crlfDelay:1/0});state4.notify||(state4.notify=notifyDefault),state4.requestClient||(state4.requestClient=requestClient),state4.subagents||(state4.subagents=bridgeSubagents);let inFlight2=new Set,shuttingDown=!1;for await(let line of rl){let obj;try{let trimmed=String(line).trim();if(!trimmed)continue;let parsed=JSON.parse(trimmed);if(!isObject8(parsed)||parsed.jsonrpc!=="2.0")throw new Error("Invalid JSON-RPC 2.0 message");obj=parsed}catch(error40){write({jsonrpc:"2.0",id:null,error:{code:-32700,message:error40 instanceof Error?error40.message:"Parse error"}});continue}if(clientRpc.handleResponseLine(obj)||typeof obj.method!="string")continue;let request=obj;if(request.method==="session/cancel"){clientRpc.cancelAll("session cancelled");let cancelSessionId=String(request.params?.sessionId??"").trim();cancelSessionId?state4?.messageStore?.cancelTurn?.(cancelSessionId,"session cancelled"):state4?.messageStore?.cancelAllTurns?.("session cancelled")}let task=(async()=>{let response=await handleAcpRequest(state4,request);response&&write(response)})();if(inFlight2.add(task),task.finally(()=>inFlight2.delete(task)),request.method==="shutdown"&&request.id!==void 0){shuttingDown=!0,await Promise.allSettled([...inFlight2].filter(t8=>t8!==task)),clientRpc.cancelAll("shutdown"),await task;break}}shuttingDown||clientRpc.cancelAll("stdin closed"),await Promise.allSettled([...inFlight2])}var ACP_PROTOCOL_VERSION,ACP_AGENT_NAME,ACP_AGENT_VERSION,init_acpStdio=__esm({"src/entrypoints/acpStdio.ts"(){init_acpModelChrome();init_acpSessionIdentity();init_acpSessionMode();init_acpRewind();init_acpSlashRoute();init_acpSubagents();ACP_PROTOCOL_VERSION=1,ACP_AGENT_NAME="clavue",ACP_AGENT_VERSION=(()=>{if(typeof MACRO<"u")return"11.3.13";try{let{APP_VERSION:APP_VERSION2}=(init_branding(),__toCommonJS(branding_exports));if(APP_VERSION2)return String(APP_VERSION2)}catch{}return"0.0.0"})();__name(createAcpBridgeState,"createAcpBridgeState");__name(bridgeNotify,"bridgeNotify");__name(refreshModelState,"refreshModelState");__name(isObject8,"isObject");__name(handleAcpRequest,"handleAcpRequest");__name(handleAcpRewindRequest,"handleAcpRewindRequest");__name(extractAcpPromptText,"extractAcpPromptText");__name(parseAcpLine,"parseAcpLine");__name(runAcpStdioServer,"runAcpStdioServer")}});var grokTuiCli_exports={};__export(grokTuiCli_exports,{formatClavueTuiVersionLine:()=>formatClavueTuiVersionLine,resolveClavueProductVersion:()=>resolveClavueProductVersion,resolveClavueTuiBinary:()=>resolveClavueTuiBinary,runGrokTuiCli:()=>runGrokTuiCli});import{spawn as spawn16}from"node:child_process";import{existsSync as existsSync62,readFileSync as readFileSync57}from"node:fs";import{dirname as dirname86,join as join224,resolve as resolve56}from"node:path";import{fileURLToPath as fileURLToPath12}from"node:url";import{arch as arch2,platform as platform5}from"node:os";function platformTriple2(){let p=platform5()==="darwin"?"darwin":platform5()==="win32"?"win32":"linux",a2=arch2()==="arm64"?"arm64":arch2()==="x64"?"x64":arch2();return`${p}-${a2}`}function resolvePackageRoot(){return resolveClavueRoot()??resolve56(__dirname3,"../..")??process.cwd()}function resolveClavueProductVersion(root2=resolvePackageRoot()){try{let pkgPath=join224(root2,"package.json");if(existsSync62(pkgPath)){let pkg=JSON.parse(readFileSync57(pkgPath,"utf8")),v2=String(pkg.version||"").trim();if(v2)return v2}}catch{}return APP_VERSION}function formatClavueTuiVersionLine(root2=resolvePackageRoot()){return`${resolveClavueProductVersion(root2)} (Clavue)`}function resolveClavueTuiBinary(){let root2=resolvePackageRoot(),native=join224(root2,"dist","native"),exe=platform5()==="win32"?".exe":"",candidates=[process.env.CLAVUE_TUI_BIN,join224(native,`clavue-tui-real-${platformTriple2()}${exe}`),join224(native,`clavue-tui-real${exe}`),join224(native,`clavue-tui-${platformTriple2()}${exe}`),join224(native,`clavue-tui${exe}`)].filter(Boolean);for(let p of candidates)if(existsSync62(p))return p;return null}async function runGrokTuiCli(args){let root2=resolvePackageRoot(),productVersion=resolveClavueProductVersion(root2);if(args.includes("--help")||args.includes("-h"))return process.stdout.write(`clavue tui \u2014 optional interaction substrate (Clavue-branded)
11059
11059
 
11060
11060
  Usage:
11061
11061
  clavue tui Launch fullscreen TUI
@@ -11342,7 +11342,7 @@ ${deps.getTmuxInstallInstructions()}`}:{ok:!1,message:"Error: --tmux requires --
11342
11342
  `)+`
11343
11343
  Approve via: clavue settings / project .mcp.json trust flow.
11344
11344
 
11345
- `)}var init_mcpServerApproval=__esm({"src/services/mcpServerApproval.tsx"(){init_config8();init_utils10();__name(handleMcpjsonServerApprovals,"handleMcpjsonServerApprovals")}});function setSessionStateChangedListener(cb){stateListener=cb}function setSessionMetadataChangedListener(cb){metadataListener=cb}function setPermissionModeChangedListener(cb){permissionModeListener=cb}function getSessionState(){return currentState}function notifySessionStateChanged(state4,details){currentState=state4,stateListener?.(state4,details),state4==="requires_action"&&details?(hasPendingAction=!0,metadataListener?.({pending_action:details})):hasPendingAction&&(hasPendingAction=!1,metadataListener?.({pending_action:null})),state4==="idle"&&metadataListener?.({task_summary:null}),isEnvTruthy2(process.env.CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS)&&enqueueSdkEvent({type:"system",subtype:"session_state_changed",state:state4})}function notifySessionMetadataChanged(metadata){metadataListener?.(metadata)}function notifyPermissionModeChanged(mode){permissionModeListener?.(mode)}var stateListener,metadataListener,permissionModeListener,hasPendingAction,currentState,init_sessionState2=__esm({"src/utils/sessionState.ts"(){init_envUtils();init_sdkEventQueue();stateListener=null,metadataListener=null,permissionModeListener=null;__name(setSessionStateChangedListener,"setSessionStateChangedListener");__name(setSessionMetadataChangedListener,"setSessionMetadataChangedListener");__name(setPermissionModeChangedListener,"setPermissionModeChangedListener");hasPendingAction=!1,currentState="idle";__name(getSessionState,"getSessionState");__name(notifySessionStateChanged,"notifySessionStateChanged");__name(notifySessionMetadataChanged,"notifySessionMetadataChanged");__name(notifyPermissionModeChanged,"notifyPermissionModeChanged")}});function externalMetadataToAppState(metadata){return prev=>({...prev,...typeof metadata.permission_mode=="string"?{toolPermissionContext:{...prev.toolPermissionContext,mode:isDeprecatedPermissionMode(metadata.permission_mode)?"default":permissionModeFromString(metadata.permission_mode)}}:{},...typeof metadata.is_ultraplan_mode=="boolean"?{isUltraplanMode:metadata.is_ultraplan_mode}:{}})}function onChangeAppState({newState,oldState}){let prevMode=oldState.toolPermissionContext.mode,newMode=newState.toolPermissionContext.mode;if(prevMode!==newMode){let prevExternal=toExternalPermissionMode(prevMode),newExternal=toExternalPermissionMode(newMode);if(prevExternal!==newExternal){let isUltraplan=newExternal==="plan"&&newState.isUltraplanMode&&!oldState.isUltraplanMode?!0:null;notifySessionMetadataChanged({permission_mode:newExternal,is_ultraplan_mode:isUltraplan})}notifyPermissionModeChanged(newMode)}if(newState.mainLoopModel!==oldState.mainLoopModel&&newState.mainLoopModel===null&&(updateSettingsForSource("userSettings",{model:void 0}),setMainLoopModelOverride(null)),newState.mainLoopModel!==oldState.mainLoopModel&&newState.mainLoopModel!==null&&(updateSettingsForSource("userSettings",{model:newState.mainLoopModel}),setMainLoopModelOverride(newState.mainLoopModel)),newState.expandedView!==oldState.expandedView){let showExpandedTodos=newState.expandedView==="tasks",showSpinnerTree=newState.expandedView==="teammates";(getGlobalConfig().showExpandedTodos!==showExpandedTodos||getGlobalConfig().showSpinnerTree!==showSpinnerTree)&&saveGlobalConfig(current=>({...current,showExpandedTodos,showSpinnerTree}))}if(newState.verbose!==oldState.verbose&&getGlobalConfig().verbose!==newState.verbose){let verbose=newState.verbose;saveGlobalConfig(current=>({...current,verbose}))}if(process.env.USER_TYPE==="ant"&&newState.tungstenPanelVisible!==oldState.tungstenPanelVisible&&newState.tungstenPanelVisible!==void 0&&getGlobalConfig().tungstenPanelVisible!==newState.tungstenPanelVisible){let tungstenPanelVisible=newState.tungstenPanelVisible;saveGlobalConfig(current=>({...current,tungstenPanelVisible}))}if(newState.settings!==oldState.settings)try{clearApiKeyHelperCache(),clearAwsCredentialsCache(),clearGcpCredentialsCache(),newState.settings.env!==oldState.settings.env&&applyConfigEnvironmentVariables()}catch(error40){logError2(toError(error40))}}var init_onChangeAppState=__esm({"src/state/onChangeAppState.ts"(){init_state();init_auth6();init_config11();init_errors2();init_log3();init_managedEnv();init_PermissionMode();init_sessionState2();init_settings2();__name(externalMetadataToAppState,"externalMetadataToAppState");__name(onChangeAppState,"onChangeAppState")}});var init_terminalPreference=__esm({"src/utils/deepLink/terminalPreference.ts"(){init_config11();init_debug()}});var FpsTracker,init_fpsTracker=__esm({"src/utils/fpsTracker.ts"(){FpsTracker=class{static{__name(this,"FpsTracker")}frameDurations=[];firstRenderTime;lastRenderTime;record(durationMs){let now3=performance.now();this.firstRenderTime===void 0&&(this.firstRenderTime=now3),this.lastRenderTime=now3,this.frameDurations.push(durationMs)}getMetrics(){if(this.frameDurations.length===0||this.firstRenderTime===void 0||this.lastRenderTime===void 0)return;let totalTimeMs=this.lastRenderTime-this.firstRenderTime;if(totalTimeMs<=0)return;let averageFps=this.frameDurations.length/(totalTimeMs/1e3),sorted=this.frameDurations.slice().sort((a2,b3)=>b3-a2),p99Index=Math.max(0,Math.ceil(sorted.length*.01)-1),p99FrameTimeMs=sorted[p99Index],low1PctFps=p99FrameTimeMs>0?1e3/p99FrameTimeMs:0;return{averageFps:Math.round(averageFps*100)/100,low1PctFps:Math.round(low1PctFps*100)/100}}}}});import{realpath as realpath12}from"fs/promises";async function updateGithubRepoPathMapping(){try{let repo=await detectCurrentRepository();if(!repo){logForDebugging("Not in a GitHub repository, skipping path mapping update");return}let cwd6=getOriginalCwd(),basePath=findGitRoot(cwd6)??cwd6,currentPath;try{currentPath=(await realpath12(basePath)).normalize("NFC")}catch{currentPath=basePath}let repoKey=repo.toLowerCase(),existingPaths=getGlobalConfig().githubRepoPaths?.[repoKey]??[];if(existingPaths[0]===currentPath){logForDebugging(`Path ${currentPath} already tracked for repo ${repoKey}`);return}let withoutCurrent=existingPaths.filter(p=>p!==currentPath),updatedPaths=[currentPath,...withoutCurrent];saveGlobalConfig(current=>({...current,githubRepoPaths:{...current.githubRepoPaths,[repoKey]:updatedPaths}})),logForDebugging(`Added ${currentPath} to tracked paths for repo ${repoKey}`)}catch(error40){logForDebugging(`Error updating repo path mapping: ${error40}`)}}function getKnownPathsForRepo(repo){let config3=getGlobalConfig(),repoKey=repo.toLowerCase();return config3.githubRepoPaths?.[repoKey]??[]}async function filterExistingPaths(paths2){let results=await Promise.all(paths2.map(pathExists));return paths2.filter((_2,i3)=>results[i3])}async function validateRepoAtPath(path36,expectedRepo){try{let remoteUrl=await getRemoteUrlForDir(path36);if(!remoteUrl)return!1;let actualRepo=parseGitHubRepository(remoteUrl);return actualRepo?actualRepo.toLowerCase()===expectedRepo.toLowerCase():!1}catch{return!1}}function removePathFromRepo(repo,pathToRemove){let config3=getGlobalConfig(),repoKey=repo.toLowerCase(),existingPaths=config3.githubRepoPaths?.[repoKey]??[],updatedPaths=existingPaths.filter(path36=>path36!==pathToRemove);if(updatedPaths.length===existingPaths.length)return;let updatedMapping={...config3.githubRepoPaths};updatedPaths.length===0?delete updatedMapping[repoKey]:updatedMapping[repoKey]=updatedPaths,saveGlobalConfig(current=>({...current,githubRepoPaths:updatedMapping})),logForDebugging(`Removed ${pathToRemove} from tracked paths for repo ${repoKey}`)}var init_githubRepoPathMapping=__esm({"src/utils/githubRepoPathMapping.ts"(){init_state();init_config11();init_debug();init_detectRepository();init_file2();init_gitFilesystem();init_git();__name(updateGithubRepoPathMapping,"updateGithubRepoPathMapping");__name(getKnownPathsForRepo,"getKnownPathsForRepo");__name(filterExistingPaths,"filterExistingPaths");__name(validateRepoAtPath,"validateRepoAtPath");__name(removePathFromRepo,"removePathFromRepo")}});var BRAND_WORDMARK,TAGLINE_ZH,TAGLINE_EN,SLOGAN_ZH,BRAND_LOCKUP_COMPACT,BRAND_WORDMARK_BILINGUAL,FIRST_LAUNCH_TITLE_ZH,FIRST_LAUNCH_SUBTITLE,init_dragonArt=__esm({"src/constants/dragonArt.ts"(){BRAND_WORDMARK="CLAVUE",TAGLINE_ZH="\u9F8D\u884C\u4EE3\u7801 \xB7 \u6267\u884C\u4F18\u5148",TAGLINE_EN="Dragon code \xB7 execution-first",SLOGAN_ZH="\u7231\u6211\u4E2D\u534E \xB7 \u81EA\u5F3A\u4E0D\u606F",BRAND_LOCKUP_COMPACT=`\u9F8D ${BRAND_WORDMARK}`,BRAND_WORDMARK_BILINGUAL=`${BRAND_WORDMARK} \xB7 \u514B\u62C9\u7EF4`,FIRST_LAUNCH_TITLE_ZH=`\u9F8D ${BRAND_WORDMARK} \xB7 \u514B\u62C9\u7EF4`,FIRST_LAUNCH_SUBTITLE="Choose your language / \u9009\u62E9\u8BED\u8A00 / \u8A00\u8A9E\u3092\u9078\u3076"}});var LanguageOnboardingGate_exports={};__export(LanguageOnboardingGate_exports,{LanguageOnboardingGate:()=>LanguageOnboardingGate,shouldShowLanguageOnboarding:()=>shouldShowLanguageOnboarding});function LanguageOnboardingGate({onDone}){let[done,setDone]=(0,import_react189.useState)(!needsLanguageOnboarding());return done?null:(0,import_jsx_runtime324.jsxs)(ThemedBox_default,{flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[(0,import_jsx_runtime324.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:"center",marginY:1,gap:0,children:[(0,import_jsx_runtime324.jsx)(ThemedText,{color:"warning",bold:!0,children:"\u9F8D"}),(0,import_jsx_runtime324.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime324.jsx)(ThemedText,{bold:!0,color:"warning",children:BRAND_WORDMARK_BILINGUAL}),(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:"\u2500".repeat(18)})]}),(0,import_jsx_runtime324.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:"center",gap:0,children:[(0,import_jsx_runtime324.jsx)(ThemedText,{color:"error",bold:!0,children:TAGLINE_ZH}),(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:TAGLINE_EN}),(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:SLOGAN_ZH})]}),(0,import_jsx_runtime324.jsx)(ThemedBox_default,{flexDirection:"column",alignItems:"center",gap:0,children:(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:FIRST_LAUNCH_SUBTITLE})}),(0,import_jsx_runtime324.jsx)(LanguagePicker,{primaryOnly:!0,initialLanguage:void 0,onCancel:()=>{applyUiLocale("zh-CN"),setDone(!0),onDone()},onComplete:lang=>{applyUiLocale(lang||"zh-CN"),setDone(!0),onDone()}})]})}function shouldShowLanguageOnboarding(){return needsLanguageOnboarding()}var import_react189,import_jsx_runtime324,init_LanguageOnboardingGate=__esm({"src/components/LanguageOnboardingGate.tsx"(){import_react189=__toESM(require_react());init_ink();init_dragonArt();init_applyUiLocale();init_LanguagePicker();import_jsx_runtime324=__toESM(require_jsx_runtime());__name(LanguageOnboardingGate,"LanguageOnboardingGate");__name(shouldShowLanguageOnboarding,"shouldShowLanguageOnboarding")}});function centerPlaque(content,contentWidth){let total=Math.max(0,PLAQUE_WIDTH-contentWidth),left=Math.floor(total/2),right=total-left;return" ".repeat(left)+content+" ".repeat(right)}function WelcomeHeader({isZh:isZh7}){let title=isZh7?`${APP_NAME} \xB7 ${"\u514B\u62C9\u7EF4"}`:APP_NAME;return(0,import_jsx_runtime325.jsxs)(import_jsx_runtime325.Fragment,{children:[(0,import_jsx_runtime325.jsxs)(ThemedText,{children:[(0,import_jsx_runtime325.jsx)(ThemedText,{color:"brand",bold:!0,children:title}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:" v11.3.12"})]}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:isZh7?WELCOME_SUBTITLE:isZh7?APP_BRAND_TAGLINE_ZH:"Execution-first AI coding CLI"})]})}function WelcomeV2(){let[theme2]=useTheme(),isZh7=resolveUiLocale()==="zh-CN",isLightTheme=["light","light-daltonized","light-ansi"].includes(theme2),wordmarkContent=isZh7?`${"\u9F8D"} ${APP_NAME} \xB7 ${"\u514B\u62C9\u7EF4"} ${"\u9F8D"}`:`${"\u9F8D"} ${APP_NAME} ${"\u9F8D"}`,wordmarkWidth=isZh7?21:14,taglineContent=isZh7?WELCOME_TAGLINE_ZH:"rise \xB7 code \xB7 ship",taglineWidth=isZh7?19:18,decorTop=isLightTheme?" ~ \xB7 ~ ":" * ~ \xB7 ~ * ",decorBot=isLightTheme?" ~~~ \xB7 ~~~ ":" \xB7 ~~~ \xB7 ~~~ \xB7 ";return(0,import_jsx_runtime325.jsxs)(ThemedBox_default,{width:WELCOME_V2_WIDTH,flexDirection:"column",children:[(0,import_jsx_runtime325.jsx)(WelcomeHeader,{isZh:isZh7}),(0,import_jsx_runtime325.jsxs)(ThemedBox_default,{marginTop:1,flexDirection:"column",children:[(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:decorTop}),(0,import_jsx_runtime325.jsx)(ThemedText,{color:"mascot_body",children:centerPlaque(wordmarkContent,wordmarkWidth)}),(0,import_jsx_runtime325.jsx)(ThemedText,{color:"mascot_body",children:centerPlaque(taglineContent,taglineWidth)}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:decorBot})]}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\xB7 ${WELCOME_BRAND_FULL}`:`\xB7 ${WELCOME_BRAND_FULL}`})]})}var import_jsx_runtime325,WELCOME_SUBTITLE,WELCOME_TAGLINE_ZH,WELCOME_BRAND_FULL,WELCOME_V2_WIDTH,PLAQUE_WIDTH,init_WelcomeV2=__esm({"src/components/LogoV2/WelcomeV2.tsx"(){init_ink();init_branding();init_uiLocale();import_jsx_runtime325=__toESM(require_jsx_runtime()),WELCOME_SUBTITLE="\u4E2D\u6587\u4F18\u5148\u7684 AI \u7F16\u7801\u63A7\u5236\u53F0",WELCOME_TAGLINE_ZH="\u4E91\u8D77\u4E1C\u65B9 \xB7 \u9F99\u884C\u4EE3\u7801",WELCOME_BRAND_FULL="Clavue \xB7 \u9F8D",WELCOME_V2_WIDTH=60,PLAQUE_WIDTH=32;__name(centerPlaque,"centerPlaque");__name(WelcomeHeader,"WelcomeHeader");__name(WelcomeV2,"WelcomeV2")}});async function getBypassPermissionsStartupBlockReason(){if(process.platform!=="win32"&&typeof process.getuid=="function"&&process.getuid()===0&&process.env.IS_SANDBOX!=="1"&&!isEnvTruthy2(process.env.CLAUDE_CODE_BUBBLEWRAP))return"--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons";if(process.env.USER_TYPE!=="ant"||process.env.CLAUDE_CODE_ENTRYPOINT==="local-agent"||process.env.CLAUDE_CODE_ENTRYPOINT==="claude-desktop")return null;let[isDocker,hasInternet]=await Promise.all([envDynamic.getIsDocker(),env4.hasInternetAccess()]),isBubblewrap=envDynamic.getIsBubblewrapSandbox(),isSandbox=process.env.IS_SANDBOX==="1";return!(isDocker||isBubblewrap||isSandbox)||hasInternet?`--dangerously-skip-permissions can only be used in Docker/sandbox containers with no internet access but got Docker: ${isDocker}, Bubblewrap: ${isBubblewrap}, IS_SANDBOX: ${isSandbox}, hasInternet: ${hasInternet}`:null}var init_bypassSafety=__esm({"src/utils/permissions/bypassSafety.ts"(){init_env2();init_envDynamic();init_envUtils();__name(getBypassPermissionsStartupBlockReason,"getBypassPermissionsStartupBlockReason")}});var Onboarding_exports={};__export(Onboarding_exports,{Onboarding:()=>Onboarding});function getRoutingDisplayValue2(value,fallback){return String(value||"").trim()||fallback}function getProviderSnapshot(){let activeSavedProfile=getSavedActiveProviderProfile(),currentEnvProfile=getCurrentProviderProfile(),currentProfile=activeSavedProfile??currentEnvProfile??getResolvedCurrentProviderProfile();return{activeSavedProfile,currentEnvProfile,currentProfile}}function isValidHttpUrl(value){try{let url3=new URL(value);return url3.protocol==="http:"||url3.protocol==="https:"}catch{return!1}}function getProviderStartupLocalIssues(profile){if(!profile)return[];let isZh7=resolveUiLocale()==="zh-CN",baseUrl=String(profile.baseUrl||"").trim(),credential=String(profile.credential||"").trim(),issues=[];return baseUrl?isValidHttpUrl(baseUrl)||issues.push(isZh7?"[\u9519\u8BEF] API base URL \u5FC5\u987B\u4EE5 http:// \u6216 https:// \u5F00\u5934\u3002":"[ERROR] API base URL must start with http:// or https://."):issues.push(isZh7?"[\u9519\u8BEF] API base URL \u4E0D\u80FD\u4E3A\u7A7A\u3002":"[ERROR] API base URL is required."),credential?isPlaceholderProviderCredential(credential)&&issues.push(isZh7?"[\u9519\u8BEF] API \u51ED\u636E\u770B\u8D77\u6765\u50CF\u5360\u4F4D\u7B26,\u8BF7\u586B\u5165\u771F\u5B9E\u51ED\u636E\u3002":"[ERROR] API credential looks like a placeholder."):issues.push(isZh7?"[\u9519\u8BEF] API \u51ED\u636E\u4E0D\u80FD\u4E3A\u7A7A\u3002":"[ERROR] API credential is required."),[...issues,...getProviderLocalValidationWarnings(profile)]}function getReadiness(snapshot2){let isZh7=resolveUiLocale()==="zh-CN";if(!snapshot2.currentProfile)return{status:"error",label:isZh7?"\u9700\u8981\u914D\u7F6E":"Setup required",detail:isZh7?"Clavue \u5DF2\u5B89\u88C5,\u4F46\u8FD8\u6CA1\u6709\u53EF\u7528\u7684 Provider \u8DEF\u7531\u3002":"Clavue is installed, but no usable provider route is active yet.",canEnterChat:!1,issues:[]};let localIssues=getProviderStartupLocalIssues(snapshot2.currentProfile);return localIssues.length>0?{status:"error",label:isZh7?"\u9700\u8981\u4FEE\u590D":"Needs repair",detail:isZh7?"\u5DF2\u627E\u5230\u5F53\u524D Provider \u8DEF\u7531,\u4F46\u672C\u5730\u6821\u9A8C\u53D1\u73B0\u914D\u7F6E\u95EE\u9898\u3002\u8BF7\u5148\u4FEE\u590D\u518D\u8FDB\u5165\u4F1A\u8BDD\u3002":"The active provider route is present, but local checks found configuration problems. Fix it before entering chat.",canEnterChat:!1,issues:localIssues}:snapshot2.activeSavedProfile&&snapshot2.currentEnvProfile&&!areProviderProfilesEquivalent(snapshot2.activeSavedProfile,snapshot2.currentEnvProfile)?{status:"warning",label:isZh7?"\u9700\u8981\u590D\u6838":"Needs review",detail:isZh7?"\u5DF2\u4FDD\u5B58\u7684 Provider \u914D\u7F6E\u5DF2\u6FC0\u6D3B,\u4F46\u5F53\u524D\u73AF\u5883\u53D8\u91CF\u4E0E\u4E4B\u4E0D\u4E00\u81F4\u3002":"A saved profile is active, but the live environment currently differs from it.",issues:[isZh7?"[\u8B66\u544A] \u5DF2\u4FDD\u5B58\u7684 Provider \u914D\u7F6E\u4E0E\u5F53\u524D\u73AF\u5883\u4E0D\u5339\u914D\u3002":"[WARN] Saved provider profile and live API environment do not match."],canEnterChat:!0}:{status:"success",label:isZh7?"\u51C6\u5907\u5C31\u7EEA":"Ready",detail:isZh7?"\u5F53\u524D Provider \u8DEF\u7531\u5DF2\u6FC0\u6D3B\u3002Clavue \u5DF2\u6309\u5F00\u653E\u5DE5\u5177\u7B56\u7565\u52A0\u8F7D\u5B8C\u6574\u80FD\u529B\uFF1B\u6267\u884C\u8FB9\u754C\u7531 /permissions \u51B3\u5B9A\u3002":"A provider route is active. Clavue loads the full tool surface by default; /permissions controls execution approval.",canEnterChat:!0,issues:[]}}function ReadinessPanel({readiness}){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u72B6\u6001":"Route readiness"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{color:readiness.status,children:[(0,import_jsx_runtime326.jsx)(StatusIcon,{status:readiness.status,withSpace:!0}),readiness.label]}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:readiness.detail}),readiness.issues.slice(0,3).map(issue2=>(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:issue2},issue2))]})}function QuickStart({blocked,cloudAuto}){let isZh7=resolveUiLocale()==="zh-CN";if(cloudAuto){let bullets=officialAutoOnboardingBullets(isZh7?"zh-CN":"en");return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:0,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u63A8\u8350\uFF1AAuto \u4E00\u952E\u4E0A\u624B":"Recommended: Auto in one step"}),(0,import_jsx_runtime326.jsx)(ThemedText,{color:"success",wrap:"wrap",children:isZh7?OFFICIAL_AUTO_COMBO.pitch.zh:OFFICIAL_AUTO_COMBO.pitch.en}),bullets.map((line,i3)=>(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,children:[i3+1,". "]}),line]},line)),(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,wrap:"wrap",children:[isZh7?"Chrome \u663E\u793A\uFF1A":"Chrome shows: ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:OFFICIAL_AUTO_COMBO.modelsLineExample})]})]})}return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:0,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5FEB\u901F\u4E0A\u624B":"Quick start"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"1. "}),blocked?isZh7?"Clavue Cloud \u767B\u5F55\uFF08Auto\uFF09\u6216\u914D\u7F6E\u7B2C\u4E09\u65B9 Key":"Sign in to Clavue Cloud (Auto) or add a third-party key":isZh7?"\u786E\u8BA4\u8DEF\u7531\uFF1BCloud \u7528\u6237\u4FDD\u6301 Auto \u5373\u53EF":"Confirm the route; Cloud users can stay on Auto"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"2. "}),isZh7?"\u9009 ":"Pick ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),isZh7?" \u6743\u9650\u6A21\u5F0F\u540E\u5F00\u59CB\u5199\u4EE3\u7801":" then start coding"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"3. "}),isZh7?"\u8FDB\u9636\u518D\u6539\u6A21\u578B\u69FD\u4F4D\uFF1B\u9ED8\u8BA4 Auto \u5DF2\u8DB3\u591F":"Only tweak model slots later \u2014 Auto is enough to start"]})]})}function SetupProgress({step:step2}){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime326.jsx)(ThemedBox_default,{children:[{id:1,label:"Provider"},{id:2,label:isZh7?"\u6743\u9650":"Permissions"},{id:3,label:isZh7?"\u5F00\u59CB":"Start"}].map((item,index)=>(0,import_jsx_runtime326.jsxs)(ThemedText,{color:item.id===step2?"success":void 0,dimColor:item.id>step2,children:[index>0?" ":"",item.id<=step2?"\u25CF":"\u25CB"," ",item.id,". ",item.label]},item.id))})}function SetupComplete({onEnter}){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:3}),(0,import_jsx_runtime326.jsxs)(ThemedText,{color:"success",children:[(0,import_jsx_runtime326.jsx)(StatusIcon,{status:"success",withSpace:!0}),isZh7?"\u914D\u7F6E\u5B8C\u6210 \xB7 Auto \u5C31\u7EEA":"Setup complete \xB7 Auto ready"]}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?"\u9ED8\u8BA4 Auto \u7EC4\u5408\u5DF2\u5C31\u7EEA\uFF08\u5B98\u65B9\u4EA7\u54C1\u6A21\u578B\uFF09\u3002\u8FDB\u5165\u540E\u76F4\u63A5\u63D0\u9700\u6C42\u5373\u53EF\uFF1B\u4E0D\u5FC5\u5148\u8C03\u6A21\u578B\u77E9\u9635\u3002":"Default Auto combo is ready (official product models). Just ask for work \u2014 no model matrix first."}),(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:0,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5EFA\u8BAE\u4E0B\u4E00\u6B65":"Suggested next steps"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"1. "}),isZh7?"\u76F4\u63A5\u63CF\u8FF0\u4EFB\u52A1\uFF08\u68C0\u67E5 / \u6539\u4EE3\u7801 / \u8DD1\u6D4B\u8BD5\uFF09":"Describe a task (inspect / edit / run tests)"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"2. "}),(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/init"}),isZh7?" \u53EF\u9009\uFF1A\u5199\u9879\u76EE\u89C4\u5219":" optional: project rules"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"3. "}),isZh7?"\u989D\u5EA6\u7D27\u65F6 /account switch\uFF1B\u8FDB\u9636\u624D /provider":"If quota is low: /account switch; /provider only when advanced"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"4. "}),(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/provider current"}),isZh7?" \u67E5\u770B\u8DEF\u7531\uFF0C":" to inspect routing, ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),isZh7?" \u8C03\u6574\u6267\u884C\u8FB9\u754C":" to adjust execution approval"]})]}),(0,import_jsx_runtime326.jsx)(Select,{hideIndexes:!0,options:[{label:isZh7?"\u7528 Auto \u8FDB\u5165\u4F1A\u8BDD":"Enter with Auto",value:"enter",description:isZh7?"\u5B98\u65B9\u7EC4\u5408\u5DF2\u5C31\u7EEA \u2014 \u76F4\u63A5\u63D0\u9700\u6C42\u5373\u53EF\u3002":"Official Auto combo ready \u2014 just ask for work."}],layout:"compact-vertical",defaultValue:"enter",onChange:value=>{value==="enter"&&onEnter()},onCancel:onEnter})]})}function saveDefaultPermissionMode(mode){return updateSettingsForSource("userSettings",{permissions:{defaultMode:mode}}).error}function installFirstRunPermissionPreset(mode,baseContext){try{if(mode==="acceptEdits")return{context:applyZeroConfigPermissionPreset(baseContext).context};if(mode==="bypassPermissions")return{context:applyAutonomousDevelopmentPermissionPreset(baseContext).context};let error40=saveDefaultPermissionMode(mode);return error40?{error:error40}:{context:{...baseContext,mode}}}catch(error40){return{error:error40 instanceof Error?error40:new Error(String(error40))}}}function PermissionQuickSetup({onDone,initialToolPermissionContext}){let[status2,setStatus]=import_react190.default.useState(null),options=[{label:"\u9AD8\u6548\u5F00\u53D1\uFF08\u63A8\u8350\uFF09",value:"acceptEdits",description:"\u81EA\u52A8\u63A5\u53D7\u6587\u4EF6\u7F16\u8F91\uFF1B\u8FD0\u884C\u547D\u4EE4\u524D\u4ECD\u4F1A\u786E\u8BA4\uFF0C\u9002\u5408\u5927\u591A\u6570\u9879\u76EE\u3002"},{label:"\u901A\u7528\u6388\u6743\uFF08\u6700\u65B9\u4FBF\uFF09",value:"bypassPermissions",description:"\u81EA\u52A8\u5141\u8BB8 Tool use\uFF0C\u5305\u62EC Web Search\uFF1B\u4EC5\u7528\u4E8E\u4F60\u5B8C\u5168\u4FE1\u4EFB\u3001\u53EF\u6062\u590D\u7684\u73AF\u5883\u3002"},{label:"\u9ED8\u8BA4\u5B89\u5168\u6A21\u5F0F",value:"default",description:"\u6BCF\u6B21\u654F\u611F\u6587\u4EF6\u7F16\u8F91\u6216\u547D\u4EE4\u6267\u884C\u524D\u90FD\u5148\u8BE2\u95EE\u3002"},{label:"\u8BA1\u5212\u6A21\u5F0F",value:"plan",description:"\u9ED8\u8BA4\u5148\u5206\u6790\u548C\u89C4\u5212\uFF0C\u5B9E\u65BD\u524D\u518D\u786E\u8BA4\u3002"},{label:"\u8DF3\u8FC7\uFF08\u7A0D\u540E\u7528 /approvals \u8BBE\u7F6E\uFF09",value:"skip",description:"\u8FDB\u5165\u4F1A\u8BDD\u540E\u53EF\u8FD0\u884C /approvals \u6216 /permissions \u4FEE\u6539\u3002"},{label:"\u9000\u51FA",value:"exit",description:"\u6682\u4E0D\u8FDB\u5165 Clavue\u3002"}];async function handleSelection(value){if(value==="exit"){onDone({type:"exit"});return}if(value==="skip"){onDone({type:"continue"});return}if(value==="bypassPermissions"){let blockReason=await getBypassPermissionsStartupBlockReason();if(blockReason){setStatus(`\u6700\u5927\u6743\u9650\u5F53\u524D\u4E0D\u53EF\u7528\uFF1A${blockReason}`);return}if(await shouldDisableBypassPermissions()){setStatus("\u6700\u5927\u6743\u9650\u5F53\u524D\u5DF2\u88AB\u7EC4\u7EC7\u7B56\u7565\u7981\u7528\u3002\u8BF7\u9009\u62E9\u9AD8\u6548\u5F00\u53D1\u6216\u9ED8\u8BA4\u5B89\u5168\u6A21\u5F0F\u3002");return}}let result2=installFirstRunPermissionPreset(value,initialToolPermissionContext??getEmptyToolPermissionContext());if(result2.error){setStatus(`\u6743\u9650\u6A21\u5F0F\u4FDD\u5B58\u5931\u8D25\uFF1A${result2.error.message}`);return}onDone({type:"continue",permissionMode:value,permissionNotice:value==="bypassPermissions"?"\u5DF2\u542F\u7528\u6700\u5927\u6743\u9650\u6A21\u5F0F\u3002\u53EA\u5728\u5B8C\u5168\u4FE1\u4EFB\u7684\u9879\u76EE\u548C\u73AF\u5883\u4E2D\u4F7F\u7528\u3002":value==="acceptEdits"?"\u5DF2\u5B89\u88C5\u96F6\u914D\u7F6E\u5F00\u53D1\u6743\u9650\uFF0C\u5E76\u5C06\u9ED8\u8BA4\u6743\u9650\u6A21\u5F0F\u8BBE\u4E3A acceptEdits\u3002":`\u5DF2\u5C06\u9ED8\u8BA4\u6743\u9650\u6A21\u5F0F\u8BBE\u4E3A ${value}\u3002`,toolPermissionContext:result2.context})}return __name(handleSelection,"handleSelection"),(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:2}),(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"\u{1F6E1} \u6743\u9650\u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,wrap:"wrap",children:["\u9009\u62E9 Clavue \u9ED8\u8BA4\u5982\u4F55\u5904\u7406\u6587\u4EF6\u7F16\u8F91\u548C\u547D\u4EE4\u6267\u884C\u6743\u9650\u3002\u540E\u7EED\u53EF\u5728\u4F1A\u8BDD\u4E2D\u4F7F\u7528"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/approvals"})," \u6216"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"})," \u968F\u65F6\u8C03\u6574\u3002"]}),(0,import_jsx_runtime326.jsx)(ThemedText,{wrap:"wrap",children:"? \u8BF7\u9009\u62E9\u9ED8\u8BA4\u6743\u9650\u6A21\u5F0F:"}),status2?(0,import_jsx_runtime326.jsx)(ThemedText,{color:"warning",wrap:"wrap",children:status2}):null,(0,import_jsx_runtime326.jsx)(Select,{hideIndexes:!0,options,layout:"compact-vertical",defaultValue:"acceptEdits",onChange:value=>{handleSelection(value)},onCancel:()=>onDone({type:"exit"})})]})}function RouteSummary({snapshot:snapshot2}){let isZh7=resolveUiLocale()==="zh-CN",routeProfile=snapshot2.currentEnvProfile??snapshot2.currentProfile,currentSlots=routeProfile?getProviderModelSlotDefaults(routeProfile.modelRouting):null,migrationHint=getProviderMigrationHint(snapshot2.currentEnvProfile??snapshot2.activeSavedProfile??snapshot2.currentProfile,{hasSavedProfile:snapshot2.activeSavedProfile!==null}),fallback=isZh7?"Provider \u9ED8\u8BA4":"provider default",noneText=isZh7?"\u65E0":"none";return routeProfile?(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u6458\u8981":"Route summary"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5DF2\u4FDD\u5B58\u7684\u5F53\u524D\u914D\u7F6E:":"Active saved profile:"})," ",snapshot2.activeSavedProfile?.name??noneText]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5F53\u524D API \u73AF\u5883:":"Live API config:"})," ",snapshot2.currentEnvProfile?.name??noneText]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6765\u6E90:":"Source:"})," ",getProviderSourceLabel(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6765\u6E90\u8BF4\u660E:":"Source detail:"})," ",getProviderSourceDescription(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6A21\u578B\u6A21\u5F0F:":"Model mode:"})," ",getProviderExperienceLabel(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6A21\u5F0F\u8BF4\u660E:":"Mode note:"})," ",getProviderExperienceDescription(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u7B56\u7565:":"Routing strategy:"})," ",getProviderRoutingStrategyLabel(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u4E3B\u6A21\u578B:":"Primary:"})," ",getRoutingDisplayValue2(routeProfile.modelRouting.primaryModel,fallback)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"Sonnet:"})," ",getRoutingDisplayValue2(currentSlots?.sonnetModel,fallback)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"Haiku:"})," ",getRoutingDisplayValue2(currentSlots?.haikuModel,fallback)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"Opus:"})," ",getRoutingDisplayValue2(currentSlots?.opusModel,fallback)]}),migrationHint?(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8FC1\u79FB\u5EFA\u8BAE:":"Migration:"})," ",migrationHint]}):null]}):(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u6458\u8981":"Route summary"}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u672A\u627E\u5230\u5F53\u524D\u8DEF\u7531\u3002":"No active route was found."})]})}function Onboarding({onDone,initialToolPermissionContext}){let isZh7=resolveUiLocale()==="zh-CN",[snapshot2,setSnapshot]=import_react190.default.useState(getProviderSnapshot),authDecision=import_react190.default.useMemo(()=>resolveAuthBootstrapDecision(isZh7?"zh-CN":"en"),[isZh7,snapshot2.currentProfile?.id,snapshot2.activeSavedProfile?.id]),[mode,setMode]=import_react190.default.useState(()=>snapshot2.currentProfile||authDecision.skipLogin?"choice":"wizard"),[pendingResult,setPendingResult]=import_react190.default.useState(null),readiness=getReadiness(snapshot2),cloudAutoReady=isOfficialCloudAutoProfile(snapshot2.currentProfile),startupOptions=[{label:isZh7?cloudAutoReady?"\u4F7F\u7528 Auto \u8FDB\u5165\u4F1A\u8BDD\uFF08\u63A8\u8350\uFF09":"\u4F7F\u7528 Auto \u5F00\u59CB\uFF08\u63A8\u8350\uFF09":cloudAutoReady?"Enter with Auto (recommended)":"Start with Auto (recommended)",value:"auto",description:isZh7?cloudAutoReady?`${OFFICIAL_AUTO_COMBO.pitch.zh} \xB7 \u5DF2\u5C31\u7EEA\uFF0C\u76F4\u63A5\u8FDB\u5165\u3002`:`${OFFICIAL_AUTO_COMBO.pitch.zh} \xB7 \u767B\u5F55 Cloud \u540E\u9ED8\u8BA4 Auto \u7EC4\u5408\u3002`:cloudAutoReady?`${OFFICIAL_AUTO_COMBO.pitch.en} \xB7 ready, enter now.`:`${OFFICIAL_AUTO_COMBO.pitch.en} \xB7 Cloud login defaults to Auto combo.`},...authDecision.skipLogin&&readiness.canEnterChat&&!cloudAutoReady?[{label:isZh7?"\u8FDB\u5165\u4F1A\u8BDD\uFF08\u5F53\u524D\u8DEF\u7531\uFF09":"Enter chat (current route)",value:"continue",description:isZh7?`${authDecision.summary} \xB7 \u4FDD\u6301\u73B0\u6709 BYOK / \u81EA\u5B9A\u4E49\u69FD\u4F4D\u3002`:`${authDecision.summary} \xB7 keep current BYOK / custom slots.`}]:[],{label:isZh7?"Clavue Cloud \u767B\u5F55":"Clavue Cloud sign-in",value:"cloud",description:isZh7?"\u4F1A\u5458\u767B\u5F55\u540E\u81EA\u52A8\u5957\u7528 Auto \u7EC4\u5408\uFF08\u5B98\u65B9\u4EA7\u54C1\u6A21\u578B\uFF09\u3002\u4F1A\u8BDD\u5185\u4E5F\u53EF /account login\u3002":"After membership login, Auto combo is applied (official product models). Or /account login in chat."},{label:isZh7?"\u7B2C\u4E09\u65B9 / API Key\uFF08\u8FDB\u9636\uFF09":"Third-party / API key (advanced)",value:"configure",description:isZh7?"\u81EA\u5907 OpenAI / Claude / Grok / \u7F51\u5173\u3002\u989D\u5EA6\u4E0D\u8DB3\u65F6\u7684\u5B89\u5168\u7F51\uFF1B\u975E\u5FC5\u586B\u3002":"Bring OpenAI / Claude / Grok / gateway keys. Safety net when quota is low \u2014 optional."},{label:isZh7?"\u9000\u51FA":"Exit",value:"exit",description:isZh7?"\u6682\u4E0D\u8FDB\u5165 Clavue\u3002":"Do not enter Clavue right now."}];function refreshSnapshot(){let nextSnapshot=getProviderSnapshot();return setSnapshot(nextSnapshot),nextSnapshot}return __name(refreshSnapshot,"refreshSnapshot"),mode==="done"?(0,import_jsx_runtime326.jsx)(SetupComplete,{onEnter:()=>onDone(pendingResult??{type:"continue"})}):mode==="permissions"?(0,import_jsx_runtime326.jsx)(PermissionQuickSetup,{onDone:result2=>{if(result2.type==="continue"){setPendingResult(result2),setMode("done");return}onDone(result2)},initialToolPermissionContext}):mode==="wizard"?(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:1}),(0,import_jsx_runtime326.jsx)(ReadinessPanel,{readiness}),(0,import_jsx_runtime326.jsx)(QuickStart,{blocked:snapshot2.currentProfile===null,cloudAuto:!1}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["\u8FDB\u9636\u8DEF\u5F84\uFF1A\u914D\u7F6E\u81EA\u6709 API\u3002\u65B0\u624B\u66F4\u63A8\u8350\u8FD4\u56DE\u9009\u300C\u4F7F\u7528 Auto\u300D\u5E76"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/account login"}),"\u3002\u540E\u7EED\u53EF\u7528"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"clavue provider"})," \u91CD\u5F00\u6B64\u9762\u677F\u3002"]}):(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["Advanced path: bring your own API. New users should prefer Auto +"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/account login"}),". Reopen later with"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"clavue provider"}),"."]})}),(0,import_jsx_runtime326.jsx)(ProviderConfigManager,{onDone:configured=>{let nextSnapshot=refreshSnapshot();if(configured&&getReadiness(nextSnapshot).canEnterChat){setMode("permissions");return}if(nextSnapshot.currentProfile){setMode("choice");return}onDone({type:"exit"})}})]}):(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:1}),(0,import_jsx_runtime326.jsx)(ReadinessPanel,{readiness}),(0,import_jsx_runtime326.jsx)(RouteSummary,{snapshot:snapshot2}),(0,import_jsx_runtime326.jsx)(QuickStart,{blocked:snapshot2.currentProfile===null,cloudAuto:cloudAutoReady||authDecision.activeTrack==="membership"}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["\u5FC3\u667A\uFF1A\u9ED8\u8BA4 ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"Auto"}),"\uFF08\u5B98\u65B9\u7EC4\u5408\u6A21\u578B\uFF09\u3002\u8FDB\u9636\u518D\u78B0 /provider\u3002\u6743\u9650\u7528"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),"\u3002"]}):(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["Mental model: default ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"Auto"})," ","(official multi-model combo). Touch /provider only when advanced. Permissions: ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),"."]})}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?`Cloud: ${membershipAccountWebUrl("zh")} \xB7 ${membershipPricingWebUrl("zh")}`:`Cloud: ${membershipAccountWebUrl("en")} \xB7 ${membershipPricingWebUrl("en")}`}),(0,import_jsx_runtime326.jsx)(Select,{hideIndexes:!0,options:startupOptions,layout:"compact-vertical",onChange:value=>{if(value==="auto"){ensureOfficialAutoOnCloudProfile({activate:!0});let next=refreshSnapshot();if(getReadiness(next).canEnterChat){setMode("permissions");return}if(authDecision.hasMembershipSession){setMode("permissions");return}if(next.currentProfile){setMode("permissions");return}setMode("wizard");return}if(value==="continue"){setMode("permissions");return}if(value==="cloud"){if(ensureOfficialAutoOnCloudProfile({activate:!0}),refreshSnapshot(),snapshot2.currentProfile?.id===MEMBERSHIP_CLOUD_PROFILE_ID&&readiness.canEnterChat){setMode("permissions");return}if(readiness.canEnterChat){setMode("permissions");return}refreshSnapshot(),setMode("wizard");return}if(value==="configure"){refreshSnapshot(),setMode("wizard");return}onDone({type:"exit"})},onCancel:()=>onDone({type:"exit"})})]})}var import_react190,import_jsx_runtime326,init_Onboarding=__esm({"src/components/Onboarding.tsx"(){import_react190=__toESM(require_react());init_select();init_ink();init_ProviderConfigManager();init_StatusIcon();init_WelcomeV2();init_bypassSafety();init_permissionSetup();init_zeroConfigPreset();init_uiLocale();init_settings2();init_Tool();init_providerProfileMetadata();init_providerCredentials();init_providerProfiles();init_authPolicy();init_config2();init_officialAutoCombo();import_jsx_runtime326=__toESM(require_jsx_runtime());__name(getRoutingDisplayValue2,"getRoutingDisplayValue");__name(getProviderSnapshot,"getProviderSnapshot");__name(isValidHttpUrl,"isValidHttpUrl");__name(getProviderStartupLocalIssues,"getProviderStartupLocalIssues");__name(getReadiness,"getReadiness");__name(ReadinessPanel,"ReadinessPanel");__name(QuickStart,"QuickStart");__name(SetupProgress,"SetupProgress");__name(SetupComplete,"SetupComplete");__name(saveDefaultPermissionMode,"saveDefaultPermissionMode");__name(installFirstRunPermissionPreset,"installFirstRunPermissionPreset");__name(PermissionQuickSetup,"PermissionQuickSetup");__name(RouteSummary,"RouteSummary");__name(Onboarding,"Onboarding")}});function PermissionRequestTitle({title,subtitle,color:color3="permission",workerBadge}){return(0,import_jsx_runtime327.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime327.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,children:[(0,import_jsx_runtime327.jsx)(ThemedText,{bold:!0,color:color3,children:title}),workerBadge&&(0,import_jsx_runtime327.jsxs)(ThemedText,{dimColor:!0,children:["\xB7 ","@",workerBadge.name]})]}),subtitle!=null&&(typeof subtitle=="string"?(0,import_jsx_runtime327.jsx)(ThemedText,{dimColor:!0,wrap:"truncate-start",children:subtitle}):subtitle)]})}var import_jsx_runtime327,init_PermissionRequestTitle=__esm({"src/components/permissions/PermissionRequestTitle.tsx"(){init_ink();import_jsx_runtime327=__toESM(require_jsx_runtime());__name(PermissionRequestTitle,"PermissionRequestTitle")}});function PermissionDialog({title,subtitle,color:color3="permission",titleColor,innerPaddingX=1,workerBadge,titleRight,children}){return(0,import_jsx_runtime328.jsxs)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:color3,borderLeft:!1,borderRight:!1,borderBottom:!1,marginTop:1,children:[(0,import_jsx_runtime328.jsx)(ThemedBox_default,{paddingX:1,flexDirection:"column",children:(0,import_jsx_runtime328.jsxs)(ThemedBox_default,{justifyContent:"space-between",children:[(0,import_jsx_runtime328.jsx)(PermissionRequestTitle,{title,subtitle,color:titleColor,workerBadge}),titleRight]})}),(0,import_jsx_runtime328.jsx)(ThemedBox_default,{flexDirection:"column",paddingX:innerPaddingX,children})]})}var import_jsx_runtime328,init_PermissionDialog=__esm({"src/components/permissions/PermissionDialog.tsx"(){init_ink();init_PermissionRequestTitle();import_jsx_runtime328=__toESM(require_jsx_runtime());__name(PermissionDialog,"PermissionDialog")}});function hasHooks(settings){if(settings===null||settings.disableAllHooks)return!1;if(settings.statusLine||settings.fileSuggestion)return!0;if(!settings.hooks)return!1;for(let hookConfig of Object.values(settings.hooks))if(hookConfig.length>0)return!0;return!1}function getHooksSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasHooks(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasHooks(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasBashPermission(rules){return rules.some(rule=>rule.ruleBehavior==="allow"&&(rule.ruleValue.toolName===BASH_TOOL_NAME||rule.ruleValue.toolName.startsWith(BASH_TOOL_NAME+"(")))}function getBashPermissionSources(){let sources=[],projectRules=getPermissionRulesForSource("projectSettings");hasBashPermission(projectRules)&&sources.push(".clavue/settings.json");let localRules=getPermissionRulesForSource("localSettings");return hasBashPermission(localRules)&&sources.push(".clavue/settings.local.json"),sources}function hasOtelHeadersHelper(settings){return!!settings?.otelHeadersHelper}function getOtelHeadersHelperSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasOtelHeadersHelper(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasOtelHeadersHelper(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasApiKeyHelper(settings){return!!settings?.apiKeyHelper}function getApiKeyHelperSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasApiKeyHelper(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasApiKeyHelper(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasAwsCommands(settings){return!!(settings?.awsAuthRefresh||settings?.awsCredentialExport)}function getAwsCommandsSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasAwsCommands(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasAwsCommands(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasGcpCommands(settings){return!!settings?.gcpAuthRefresh}function getGcpCommandsSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasGcpCommands(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasGcpCommands(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasDangerousEnvVars(settings){return settings?.env?Object.keys(settings.env).some(key=>!SAFE_ENV_VARS3.has(key.toUpperCase())):!1}function getDangerousEnvVarsSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasDangerousEnvVars(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasDangerousEnvVars(localSettings)&&sources.push(".clavue/settings.local.json"),sources}var init_utils14=__esm({"src/components/TrustDialog/utils.ts"(){init_settings2();init_toolName();init_managedEnvConstants();init_permissionsLoader();__name(hasHooks,"hasHooks");__name(getHooksSources,"getHooksSources");__name(hasBashPermission,"hasBashPermission");__name(getBashPermissionSources,"getBashPermissionSources");__name(hasOtelHeadersHelper,"hasOtelHeadersHelper");__name(getOtelHeadersHelperSources,"getOtelHeadersHelperSources");__name(hasApiKeyHelper,"hasApiKeyHelper");__name(getApiKeyHelperSources,"getApiKeyHelperSources");__name(hasAwsCommands,"hasAwsCommands");__name(getAwsCommandsSources,"getAwsCommandsSources");__name(hasGcpCommands,"hasGcpCommands");__name(getGcpCommandsSources,"getGcpCommandsSources");__name(hasDangerousEnvVars,"hasDangerousEnvVars");__name(getDangerousEnvVarsSources,"getDangerousEnvVarsSources")}});var TrustDialog_exports={};__export(TrustDialog_exports,{TrustDialog:()=>TrustDialog});import{homedir as homedir49}from"os";function TrustDialog({onDone,commands}){let{servers:projectServers}=getMcpConfigsByScope("project"),hasMcpServers=Object.keys(projectServers).length>0,hasHooks2=getHooksSources().length>0,bashSettingSources=getBashPermissionSources(),hasApiKeyHelper2=getApiKeyHelperSources().length>0,hasAwsCommands2=getAwsCommandsSources().length>0,hasGcpCommands2=getGcpCommandsSources().length>0,hasOtelHeadersHelper2=getOtelHeadersHelperSources().length>0,hasDangerousEnvVars2=getDangerousEnvVarsSources().length>0,hasSlashCommandBash=commands?.some(command8=>command8.type==="prompt"&&command8.loadedFrom==="commands"&&(command8.source==="projectSettings"||command8.source==="localSettings")&&command8.allowedTools?.some(tool=>tool===BASH_TOOL_NAME||tool.startsWith(BASH_TOOL_NAME+"(")))??!1,hasSkillsBash=commands?.some(command8=>command8.type==="prompt"&&(command8.loadedFrom==="skills"||command8.loadedFrom==="plugin")&&(command8.source==="projectSettings"||command8.source==="localSettings"||command8.source==="plugin")&&command8.allowedTools?.some(tool=>tool===BASH_TOOL_NAME||tool.startsWith(BASH_TOOL_NAME+"(")))??!1,hasAnyBashExecution=bashSettingSources.length>0||hasSlashCommandBash||hasSkillsBash,hasTrustDialogAccepted=checkHasTrustDialogAccepted();import_react191.default.useEffect(()=>{let isHomeDir=homedir49()===getCwd();logEvent("tengu_trust_dialog_shown",{isHomeDir,hasMcpServers,hasHooks:hasHooks2,hasBashExecution:hasAnyBashExecution,hasApiKeyHelper:hasApiKeyHelper2,hasAwsCommands:hasAwsCommands2,hasGcpCommands:hasGcpCommands2,hasOtelHeadersHelper:hasOtelHeadersHelper2,hasDangerousEnvVars:hasDangerousEnvVars2})},[hasMcpServers,hasHooks2,hasAnyBashExecution,hasApiKeyHelper2,hasAwsCommands2,hasGcpCommands2,hasOtelHeadersHelper2,hasDangerousEnvVars2]);function onChange(value){if(value==="exit"){gracefulShutdownSync(1);return}let isHomeDir=homedir49()===getCwd();logEvent("tengu_trust_dialog_accept",{isHomeDir,hasMcpServers,hasHooks:hasHooks2,hasBashExecution:hasAnyBashExecution,hasApiKeyHelper:hasApiKeyHelper2,hasAwsCommands:hasAwsCommands2,hasGcpCommands:hasGcpCommands2,hasOtelHeadersHelper:hasOtelHeadersHelper2,hasDangerousEnvVars:hasDangerousEnvVars2}),isHomeDir?setSessionTrustAccepted(!0):saveCurrentProjectConfig(current=>({...current,hasTrustDialogAccepted:!0})),onDone()}__name(onChange,"onChange");let exitState=useExitOnCtrlCDWithKeybindings(()=>gracefulShutdownSync(1));return useKeybinding("confirm:no",()=>{gracefulShutdownSync(0)},{context:"Confirmation"}),hasTrustDialogAccepted?(setTimeout(onDone),null):(0,import_jsx_runtime329.jsx)(PermissionDialog,{color:"warning",titleColor:"warning",title:"Accessing workspace:",children:(0,import_jsx_runtime329.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,paddingTop:1,children:[(0,import_jsx_runtime329.jsx)(ThemedText,{bold:!0,children:getFsImplementation().cwd()}),(0,import_jsx_runtime329.jsxs)(ThemedText,{children:["Quick safety check: Is this a project you created or one you trust? (Like your own code, a well-known open source project, or work from your team). If not, take a moment to review what","'","s in this folder first."]}),(0,import_jsx_runtime329.jsx)(ThemedText,{children:"Clavue will be able to read, edit, and execute files here."}),(0,import_jsx_runtime329.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime329.jsx)(Link,{url:"https://www.clavue.com",children:"Security guide"})}),(0,import_jsx_runtime329.jsx)(Select,{options:[{label:"Yes, I trust this folder",value:"enable_all"},{label:"No, exit",value:"exit"}],onChange:value=>onChange(value),onCancel:()=>onChange("exit")}),(0,import_jsx_runtime329.jsx)(ThemedText,{dimColor:!0,children:exitState.pending?(0,import_jsx_runtime329.jsxs)(import_jsx_runtime329.Fragment,{children:["Press ",exitState.keyName," again to exit"]}):(0,import_jsx_runtime329.jsx)(import_jsx_runtime329.Fragment,{children:"Enter to confirm \xB7 Esc to cancel"})})]})})}var import_react191,import_jsx_runtime329,init_TrustDialog=__esm({"src/components/TrustDialog/TrustDialog.tsx"(){import_react191=__toESM(require_react());init_analytics();init_state();init_useExitOnCtrlCDWithKeybindings();init_ink();init_useKeybinding();init_config8();init_toolName();init_config11();init_cwd2();init_fsOperations();init_gracefulShutdown();init_CustomSelect();init_PermissionDialog();init_utils14();import_jsx_runtime329=__toESM(require_jsx_runtime());__name(TrustDialog,"TrustDialog")}});var ApproveApiKey_exports={};__export(ApproveApiKey_exports,{ApproveApiKey:()=>ApproveApiKey});function ApproveApiKey({customApiKeyTruncated,onDone}){function onChange(value){switch(value){case"yes":{saveGlobalConfig(current=>({...current,customApiKeyResponses:{...current.customApiKeyResponses,approved:[...current.customApiKeyResponses?.approved??[],customApiKeyTruncated]}})),onDone(!0);break}case"no":{saveGlobalConfig(current=>({...current,customApiKeyResponses:{...current.customApiKeyResponses,rejected:[...current.customApiKeyResponses?.rejected??[],customApiKeyTruncated]}})),onDone(!1);break}}}return __name(onChange,"onChange"),(0,import_jsx_runtime330.jsxs)(Dialog,{title:"Detected a custom API key in your environment",color:"warning",onCancel:()=>onChange("no"),children:[(0,import_jsx_runtime330.jsxs)(ThemedText,{children:[(0,import_jsx_runtime330.jsx)(ThemedText,{bold:!0,children:"KQKD_API_KEY"}),(0,import_jsx_runtime330.jsxs)(ThemedText,{children:[": sk-ant-...",customApiKeyTruncated]})]}),(0,import_jsx_runtime330.jsx)(ThemedText,{children:"Do you want to use this API key?"}),(0,import_jsx_runtime330.jsx)(Select,{defaultValue:"no",defaultFocusValue:"no",options:[{label:"Yes",value:"yes"},{label:(0,import_jsx_runtime330.jsxs)(ThemedText,{children:["No (",(0,import_jsx_runtime330.jsx)(ThemedText,{bold:!0,children:"recommended"}),")"]}),value:"no"}],onChange:value=>onChange(value),onCancel:()=>onChange("no")})]})}var import_jsx_runtime330,init_ApproveApiKey=__esm({"src/components/ApproveApiKey.tsx"(){init_ink();init_config11();init_CustomSelect();init_Dialog();import_jsx_runtime330=__toESM(require_jsx_runtime());__name(ApproveApiKey,"ApproveApiKey")}});var BypassPermissionsModeDialog_exports={};__export(BypassPermissionsModeDialog_exports,{BypassPermissionsModeDialog:()=>BypassPermissionsModeDialog,__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__:()=>__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__});function BypassPermissionsModeDialog({onAccept}){import_react192.default.useEffect(()=>{logEvent("tengu_bypass_permissions_mode_dialog_shown",{})},[]);function onChange(value){switch(value){case"accept":{logEvent("tengu_bypass_permissions_mode_dialog_accept",{}),updateSettingsForSource("userSettings",{skipDangerousModePermissionPrompt:!0}),onAccept();break}case"decline":{gracefulShutdownSync(1);break}}}__name(onChange,"onChange");let handleEscape=(0,import_react192.useCallback)(()=>{gracefulShutdownSync(0)},[]),isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime331.jsxs)(Dialog,{title:isZh7?"\u8B66\u544A:\u514B\u62C9\u7EF4\u5DF2\u8FDB\u5165\u8DF3\u8FC7\u6743\u9650\u6A21\u5F0F":BYPASS_PERMISSIONS_TITLE_EN,color:"error",onCancel:handleEscape,children:[(0,import_jsx_runtime331.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime331.jsx)(ThemedText,{children:isZh7?(0,import_jsx_runtime331.jsxs)(import_jsx_runtime331.Fragment,{children:["\u5728\u8DF3\u8FC7\u6743\u9650\u6A21\u5F0F\u4E0B,\u514B\u62C9\u7EF4\u6267\u884C\u6F5C\u5728\u5371\u9669\u547D\u4EE4\u524D\u4E0D\u4F1A\u518D\u5411\u4F60\u786E\u8BA4\u3002",(0,import_jsx_runtime331.jsx)(Newline,{}),"\u8BE5\u6A21\u5F0F\u5E94\u4EC5\u5728\u7F51\u7EDC\u53D7\u9650\u3001\u53EF\u88AB\u8FD8\u539F\u7684\u6C99\u7BB1\u5BB9\u5668\u6216\u865A\u62DF\u673A\u4E2D\u4F7F\u7528\u3002"]}):(0,import_jsx_runtime331.jsxs)(import_jsx_runtime331.Fragment,{children:["In Bypass Permissions mode, Clavue will not ask for your approval before running potentially dangerous commands.",(0,import_jsx_runtime331.jsx)(Newline,{}),"This mode should only be used in a sandboxed container/VM that has restricted internet access and can easily be restored if damaged."]})}),(0,import_jsx_runtime331.jsx)(ThemedText,{children:isZh7?"\u7EE7\u7EED\u5373\u8868\u793A\u4F60\u63A5\u53D7\u5728\u8DF3\u8FC7\u6743\u9650\u6A21\u5F0F\u4E0B\u4EA7\u751F\u7684\u5168\u90E8\u540E\u679C\u3002":"By proceeding, you accept all responsibility for actions taken while running in Bypass Permissions mode."}),(0,import_jsx_runtime331.jsx)(Link,{url:"https://www.clavue.com"})]}),(0,import_jsx_runtime331.jsx)(Select,{options:[{label:isZh7?"\u5426,\u9000\u51FA":"No, exit",value:"decline"},{label:isZh7?"\u662F,\u6211\u63A5\u53D7":"Yes, I accept",value:"accept"}],onChange:value=>onChange(value)})]})}var import_react192,import_jsx_runtime331,BYPASS_PERMISSIONS_TITLE_EN,__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__,init_BypassPermissionsModeDialog=__esm({"src/components/BypassPermissionsModeDialog.tsx"(){import_react192=__toESM(require_react());init_analytics();init_ink();init_gracefulShutdown();init_settings2();init_uiLocale();init_CustomSelect();init_Dialog();import_jsx_runtime331=__toESM(require_jsx_runtime()),BYPASS_PERMISSIONS_TITLE_EN="WARNING: Clavue running in Bypass Permissions mode";__name(BypassPermissionsModeDialog,"BypassPermissionsModeDialog");__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__=BYPASS_PERMISSIONS_TITLE_EN}});var AutoModeOptInDialog_exports={};__export(AutoModeOptInDialog_exports,{AUTO_MODE_DESCRIPTION:()=>AUTO_MODE_DESCRIPTION,AutoModeOptInDialog:()=>AutoModeOptInDialog});function AutoModeOptInDialog({onAccept,onDecline,declineExits}){import_react193.default.useEffect(()=>{logEvent("tengu_auto_mode_opt_in_dialog_shown",{})},[]);function onChange(value){switch(value){case"accept":{logEvent("tengu_auto_mode_opt_in_dialog_accept",{}),updateSettingsForSource("userSettings",{skipAutoPermissionPrompt:!0}),onAccept();break}case"accept-default":{logEvent("tengu_auto_mode_opt_in_dialog_accept_default",{}),updateSettingsForSource("userSettings",{skipAutoPermissionPrompt:!0,permissions:{defaultMode:"auto"}}),onAccept();break}case"decline":{logEvent("tengu_auto_mode_opt_in_dialog_decline",{}),onDecline();break}}}__name(onChange,"onChange");let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime332.jsxs)(Dialog,{title:isZh7?"\u542F\u7528\u81EA\u52A8\u6A21\u5F0F?":"Enable auto mode?",color:"warning",onCancel:onDecline,children:[(0,import_jsx_runtime332.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime332.jsx)(ThemedText,{children:AUTO_MODE_DESCRIPTION}),(0,import_jsx_runtime332.jsx)(Link,{url:"https://www.clavue.com"})]}),(0,import_jsx_runtime332.jsx)(Select,{options:[{label:isZh7?"\u662F,\u5E76\u8BBE\u4E3A\u9ED8\u8BA4\u6A21\u5F0F":"Yes, and make it my default mode",value:"accept-default"},{label:isZh7?"\u662F,\u542F\u7528\u81EA\u52A8\u6A21\u5F0F":"Yes, enable auto mode",value:"accept"},{label:declineExits?isZh7?"\u5426,\u9000\u51FA":"No, exit":isZh7?"\u5426,\u8FD4\u56DE":"No, go back",value:"decline"}],onChange:value=>onChange(value),onCancel:onDecline})]})}var import_react193,import_jsx_runtime332,AUTO_MODE_DESCRIPTION,init_AutoModeOptInDialog=__esm({"src/components/AutoModeOptInDialog.tsx"(){import_react193=__toESM(require_react());init_analytics();init_ink();init_settings2();init_uiLocale();init_CustomSelect();init_Dialog();import_jsx_runtime332=__toESM(require_jsx_runtime()),AUTO_MODE_DESCRIPTION="Auto mode lets Clavue handle permission prompts automatically \u2014 Clavue checks each tool call for risky actions and prompt injection before executing. Actions Clavue identifies as safe are executed, while actions Clavue identifies as risky are blocked and Clavue may try a different approach. Ideal for long-running tasks. Sessions are slightly more expensive. Clavue can make mistakes that allow harmful commands to run, it's recommended to only use in isolated environments. Shift+Tab to change mode.";__name(AutoModeOptInDialog,"AutoModeOptInDialog")}});var ClaudeInChromeOnboarding_exports={};__export(ClaudeInChromeOnboarding_exports,{ClaudeInChromeOnboarding:()=>ClaudeInChromeOnboarding,__CHROME_ONBOARDING_CONTRACT_LITERAL__:()=>__CHROME_ONBOARDING_CONTRACT_LITERAL__});function ClaudeInChromeOnboarding({onDone}){let[isExtensionInstalled,setIsExtensionInstalled]=import_react194.default.useState(!1);import_react194.default.useEffect(()=>{logEvent("tengu_claude_in_chrome_onboarding_shown",{}),isChromeExtensionInstalled().then(setIsExtensionInstalled),saveGlobalConfig(current=>({...current,hasCompletedClaudeInChromeOnboarding:!0}))},[]),useInput((_input,key)=>{key.return&&onDone()});let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime333.jsx)(Dialog,{title:isZh7?"Clavue \u6D4F\u89C8\u5668\u96C6\u6210(Beta)":TITLE_EN,onCancel:onDone,color:"chromeYellow",children:(0,import_jsx_runtime333.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime333.jsxs)(ThemedText,{children:[isZh7?"Clavue \u6D4F\u89C8\u5668\u96C6\u6210\u4E0E Chrome \u6269\u5C55\u534F\u540C\u5DE5\u4F5C,\u8BA9\u4F60\u76F4\u63A5\u5728 Clavue \u4E2D\u64CD\u63A7\u6D4F\u89C8\u5668:\u5BFC\u822A\u7F51\u7AD9\u3001\u586B\u5199\u8868\u5355\u3001\u622A\u5C4F\u3001\u5F55\u5236 GIF,\u4EE5\u53CA\u901A\u8FC7\u63A7\u5236\u53F0\u65E5\u5FD7\u548C\u7F51\u7EDC\u8BF7\u6C42\u8FDB\u884C\u8C03\u8BD5\u3002":`${INTEGRATION_LEAD_EN} You can navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.`,!isExtensionInstalled&&(0,import_jsx_runtime333.jsxs)(import_jsx_runtime333.Fragment,{children:[(0,import_jsx_runtime333.jsx)(Newline,{}),(0,import_jsx_runtime333.jsx)(Newline,{}),isZh7?"\u9700\u8981\u5B89\u88C5 Chrome \u6269\u5C55\u3002\u524D\u5F80 ":"Requires the Chrome extension. Get started at ",(0,import_jsx_runtime333.jsx)(Link,{url:CHROME_EXTENSION_URL2})]})]}),(0,import_jsx_runtime333.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u7AD9\u70B9\u7EA7\u6743\u9650\u7EE7\u627F\u81EA Chrome \u6269\u5C55\u3002\u5728 Chrome \u6269\u5C55\u8BBE\u7F6E\u91CC\u7BA1\u7406\u6743\u9650,\u53EF\u63A7\u5236 Clavue \u5728\u54EA\u4E9B\u7AD9\u70B9\u6D4F\u89C8\u3001\u70B9\u51FB\u6216\u8F93\u5165":"Site-level permissions are inherited from the Chrome extension. Manage permissions in the Chrome extension settings to control which sites Clavue can browse, click, and type on",isExtensionInstalled&&(0,import_jsx_runtime333.jsxs)(import_jsx_runtime333.Fragment,{children:[" ","(",(0,import_jsx_runtime333.jsx)(Link,{url:CHROME_PERMISSIONS_URL2}),")"]}),"."]}),(0,import_jsx_runtime333.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u66F4\u591A\u4FE1\u606F\u8BF7\u4F7F\u7528 ":"For more info, use ",(0,import_jsx_runtime333.jsx)(ThemedText,{bold:!0,color:"chromeYellow",children:"/chrome"})," ",isZh7?"\u6216\u8BBF\u95EE ":"or visit ",(0,import_jsx_runtime333.jsx)(Link,{url:"https://www.clavue.com"})]})]})})}var import_react194,import_jsx_runtime333,CHROME_EXTENSION_URL2,CHROME_PERMISSIONS_URL2,TITLE_EN,INTEGRATION_LEAD_EN,__CHROME_ONBOARDING_CONTRACT_LITERAL__,init_ClaudeInChromeOnboarding=__esm({"src/components/ClaudeInChromeOnboarding.tsx"(){import_react194=__toESM(require_react());init_analytics();init_ink();init_setup2();init_config11();init_uiLocale();init_Dialog();import_jsx_runtime333=__toESM(require_jsx_runtime()),CHROME_EXTENSION_URL2="https://claude.ai/chrome",CHROME_PERMISSIONS_URL2="https://clau.de/chrome/permissions",TITLE_EN="Clavue Browser Integration (Beta)",INTEGRATION_LEAD_EN="Clavue browser integration works with the Chrome extension to let you control your browser directly from Clavue.";__name(ClaudeInChromeOnboarding,"ClaudeInChromeOnboarding");__CHROME_ONBOARDING_CONTRACT_LITERAL__=INTEGRATION_LEAD_EN}});import{appendFileSync as appendFileSync10}from"fs";function completeOnboarding(){saveGlobalConfig(current=>({...current,hasCompletedOnboarding:!0,lastOnboardingVersion:"11.3.12"}))}function showDialog(root2,renderer){return new Promise(resolve64=>{let done=__name(result2=>{resolve64(result2)},"done");root2.render(renderer(done))})}async function exitWithError2(root2,message,beforeExit){return exitWithMessage(root2,message,{color:"error",beforeExit})}async function exitWithMessage(root2,message,options){let{Text:Text2}=await Promise.resolve().then(()=>(init_ink(),ink_exports)),color3=options?.color,exitCode=options?.exitCode??1;root2.render(color3?(0,import_jsx_runtime334.jsx)(Text2,{color:color3,children:message}):(0,import_jsx_runtime334.jsx)(Text2,{children:message})),root2.unmount(),await options?.beforeExit?.(),process.exit(exitCode)}function showSetupDialog(root2,renderer,options){return showDialog(root2,done=>(0,import_jsx_runtime334.jsx)(AppStateProvider,{onChangeAppState:options?.onChangeAppState,children:(0,import_jsx_runtime334.jsx)(KeybindingSetup,{children:renderer(done)})}))}async function renderAndRun(root2,element){root2.render(element),startDeferredPrefetches(),await root2.waitUntilExit(),await gracefulShutdown(0)}async function showSetupScreens(root2,permissionMode,initialToolPermissionContext,allowDangerouslySkipPermissions,commands,claudeInChrome,devChannels,explicitModelOverride=!1,userSpecifiedModel=null){if(isEnvTruthy2(!1)||process.env.IS_DEMO)return{onboardingShown:!1,providerProfileChanged:!1,resolvedProviderProfile:getResolvedCurrentProviderProfile(),nextMainLoopModel:null,nextPermissionMode:void 0,permissionModeNotice:void 0,nextToolPermissionContext:void 0};let config3=getGlobalConfig(),onboardingShown=!1,onboardingResult="continue",nextPermissionMode,permissionModeNotice,nextToolPermissionContext,providerProfileBeforeOnboarding=getResolvedCurrentProviderProfile(),providerProfileChanged=!1,resolvedProviderProfile=providerProfileBeforeOnboarding,nextMainLoopModel=null;{let{needsLanguageOnboarding:needsLanguageOnboarding2}=await Promise.resolve().then(()=>(init_applyUiLocale(),applyUiLocale_exports));if(needsLanguageOnboarding2()){onboardingShown=!0;let{LanguageOnboardingGate:LanguageOnboardingGate2}=await Promise.resolve().then(()=>(init_LanguageOnboardingGate(),LanguageOnboardingGate_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(LanguageOnboardingGate2,{onDone:()=>{done(void 0)}}))}}if(!config3.theme||!config3.hasCompletedOnboarding){onboardingShown=!0;let{Onboarding:Onboarding2}=await Promise.resolve().then(()=>(init_Onboarding(),Onboarding_exports)),onboardingScreenResult=await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(Onboarding2,{initialToolPermissionContext,onDone:result2=>{result2.type==="continue"&&completeOnboarding(),done(result2)}}),{onChangeAppState});onboardingResult=onboardingScreenResult.type,onboardingScreenResult.type==="continue"&&(nextPermissionMode=onboardingScreenResult.permissionMode,permissionModeNotice=onboardingScreenResult.permissionNotice,nextToolPermissionContext=onboardingScreenResult.toolPermissionContext),nextPermissionMode&&(permissionMode=nextPermissionMode),resolvedProviderProfile=getResolvedCurrentProviderProfile();let refreshPlan=getProviderSetupRefreshPlan({providerProfileBeforeOnboarding,resolvedProviderProfile,onboardingResult,explicitModelOverride,userSpecifiedModel});if(providerProfileChanged=refreshPlan.providerProfileChanged,nextMainLoopModel=refreshPlan.nextMainLoopModel,onboardingResult==="exit")return gracefulShutdownSync(0),{onboardingShown,providerProfileChanged,resolvedProviderProfile,nextMainLoopModel,nextPermissionMode,permissionModeNotice,nextToolPermissionContext}}if(!isEnvTruthy2(process.env.CLAUBBIT)){if(!checkHasTrustDialogAccepted()){let{TrustDialog:TrustDialog2}=await Promise.resolve().then(()=>(init_TrustDialog(),TrustDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(TrustDialog2,{commands,onDone:done}))}setSessionTrustAccepted(!0),resetGrowthBook(),initializeGrowthBook(),getSystemContext();let{errors:allErrors}=getSettingsWithAllErrors();if(allErrors.length===0&&await handleMcpjsonServerApprovals(root2),await shouldShowClaudeMdExternalIncludesWarning()){let externalIncludes=getExternalClaudeMdIncludes(await getMemoryFiles(!0)),{ClaudeMdExternalIncludesDialog:ClaudeMdExternalIncludesDialog2}=await Promise.resolve().then(()=>(init_ClaudeMdExternalIncludesDialog(),ClaudeMdExternalIncludesDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(ClaudeMdExternalIncludesDialog2,{onDone:done,isStandaloneDialog:!0,externalIncludes}))}}if(updateGithubRepoPathMapping(),applyConfigEnvironmentVariables(),setImmediate(()=>initializeTelemetryAfterTrust()),await isQualifiedForGrove()){let{GroveDialog:GroveDialog2}=await Promise.resolve().then(()=>(init_Grove(),Grove_exports));if(await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(GroveDialog2,{showIfAlreadyViewed:!1,location:onboardingShown?"onboarding":"policy_update_modal",onDone:done}))==="escape")return logEvent("tengu_grove_policy_exited",{}),gracefulShutdownSync(0),{onboardingShown,providerProfileChanged,resolvedProviderProfile,nextMainLoopModel,nextToolPermissionContext}}if(process.env.ANTHROPIC_API_KEY&&!isRunningOnHomespace()){let customApiKeyTruncated=normalizeApiKeyForConfig(process.env.ANTHROPIC_API_KEY);if(getCustomApiKeyStatus(customApiKeyTruncated)==="new"){let{ApproveApiKey:ApproveApiKey2}=await Promise.resolve().then(()=>(init_ApproveApiKey(),ApproveApiKey_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(ApproveApiKey2,{customApiKeyTruncated,onDone:done}),{onChangeAppState})}}if((permissionMode==="bypassPermissions"||allowDangerouslySkipPermissions)&&!hasSkipDangerousModePermissionPrompt()){let{BypassPermissionsModeDialog:BypassPermissionsModeDialog2}=await Promise.resolve().then(()=>(init_BypassPermissionsModeDialog(),BypassPermissionsModeDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(BypassPermissionsModeDialog2,{onAccept:done}))}if(permissionMode==="auto"&&!hasAutoModeOptIn()){let{AutoModeOptInDialog:AutoModeOptInDialog2}=await Promise.resolve().then(()=>(init_AutoModeOptInDialog(),AutoModeOptInDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(AutoModeOptInDialog2,{onAccept:done,onDecline:()=>gracefulShutdownSync(1),declineExits:!0}))}if(claudeInChrome&&!getGlobalConfig().hasCompletedClaudeInChromeOnboarding){let{ClaudeInChromeOnboarding:ClaudeInChromeOnboarding2}=await Promise.resolve().then(()=>(init_ClaudeInChromeOnboarding(),ClaudeInChromeOnboarding_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(ClaudeInChromeOnboarding2,{onDone:done}))}return{onboardingShown,providerProfileChanged,resolvedProviderProfile,nextMainLoopModel,nextPermissionMode,permissionModeNotice,nextToolPermissionContext}}function getRenderContext(exitOnCtrlC){let lastFlickerTime=0,baseOptions=getBaseRenderOptions(exitOnCtrlC);baseOptions.stdin&&logEvent("tengu_stdin_interactive",{});let fpsTracker=new FpsTracker,stats2=createStatsStore();setStatsStore(stats2);let frameTimingLogPath=process.env.CLAUDE_CODE_FRAME_TIMING_LOG;return{getFpsMetrics:__name(()=>fpsTracker.getMetrics(),"getFpsMetrics"),stats:stats2,renderOptions:{...baseOptions,onFrame:__name(event=>{if(fpsTracker.record(event.durationMs),stats2.observe("frame_duration_ms",event.durationMs),frameTimingLogPath&&event.phases){let line=JSON.stringify({total:event.durationMs,...event.phases,rss:process.memoryUsage.rss(),cpu:process.cpuUsage()})+`
11345
+ `)}var init_mcpServerApproval=__esm({"src/services/mcpServerApproval.tsx"(){init_config8();init_utils10();__name(handleMcpjsonServerApprovals,"handleMcpjsonServerApprovals")}});function setSessionStateChangedListener(cb){stateListener=cb}function setSessionMetadataChangedListener(cb){metadataListener=cb}function setPermissionModeChangedListener(cb){permissionModeListener=cb}function getSessionState(){return currentState}function notifySessionStateChanged(state4,details){currentState=state4,stateListener?.(state4,details),state4==="requires_action"&&details?(hasPendingAction=!0,metadataListener?.({pending_action:details})):hasPendingAction&&(hasPendingAction=!1,metadataListener?.({pending_action:null})),state4==="idle"&&metadataListener?.({task_summary:null}),isEnvTruthy2(process.env.CLAUDE_CODE_EMIT_SESSION_STATE_EVENTS)&&enqueueSdkEvent({type:"system",subtype:"session_state_changed",state:state4})}function notifySessionMetadataChanged(metadata){metadataListener?.(metadata)}function notifyPermissionModeChanged(mode){permissionModeListener?.(mode)}var stateListener,metadataListener,permissionModeListener,hasPendingAction,currentState,init_sessionState2=__esm({"src/utils/sessionState.ts"(){init_envUtils();init_sdkEventQueue();stateListener=null,metadataListener=null,permissionModeListener=null;__name(setSessionStateChangedListener,"setSessionStateChangedListener");__name(setSessionMetadataChangedListener,"setSessionMetadataChangedListener");__name(setPermissionModeChangedListener,"setPermissionModeChangedListener");hasPendingAction=!1,currentState="idle";__name(getSessionState,"getSessionState");__name(notifySessionStateChanged,"notifySessionStateChanged");__name(notifySessionMetadataChanged,"notifySessionMetadataChanged");__name(notifyPermissionModeChanged,"notifyPermissionModeChanged")}});function externalMetadataToAppState(metadata){return prev=>({...prev,...typeof metadata.permission_mode=="string"?{toolPermissionContext:{...prev.toolPermissionContext,mode:isDeprecatedPermissionMode(metadata.permission_mode)?"default":permissionModeFromString(metadata.permission_mode)}}:{},...typeof metadata.is_ultraplan_mode=="boolean"?{isUltraplanMode:metadata.is_ultraplan_mode}:{}})}function onChangeAppState({newState,oldState}){let prevMode=oldState.toolPermissionContext.mode,newMode=newState.toolPermissionContext.mode;if(prevMode!==newMode){let prevExternal=toExternalPermissionMode(prevMode),newExternal=toExternalPermissionMode(newMode);if(prevExternal!==newExternal){let isUltraplan=newExternal==="plan"&&newState.isUltraplanMode&&!oldState.isUltraplanMode?!0:null;notifySessionMetadataChanged({permission_mode:newExternal,is_ultraplan_mode:isUltraplan})}notifyPermissionModeChanged(newMode)}if(newState.mainLoopModel!==oldState.mainLoopModel&&newState.mainLoopModel===null&&(updateSettingsForSource("userSettings",{model:void 0}),setMainLoopModelOverride(null)),newState.mainLoopModel!==oldState.mainLoopModel&&newState.mainLoopModel!==null&&(updateSettingsForSource("userSettings",{model:newState.mainLoopModel}),setMainLoopModelOverride(newState.mainLoopModel)),newState.expandedView!==oldState.expandedView){let showExpandedTodos=newState.expandedView==="tasks",showSpinnerTree=newState.expandedView==="teammates";(getGlobalConfig().showExpandedTodos!==showExpandedTodos||getGlobalConfig().showSpinnerTree!==showSpinnerTree)&&saveGlobalConfig(current=>({...current,showExpandedTodos,showSpinnerTree}))}if(newState.verbose!==oldState.verbose&&getGlobalConfig().verbose!==newState.verbose){let verbose=newState.verbose;saveGlobalConfig(current=>({...current,verbose}))}if(process.env.USER_TYPE==="ant"&&newState.tungstenPanelVisible!==oldState.tungstenPanelVisible&&newState.tungstenPanelVisible!==void 0&&getGlobalConfig().tungstenPanelVisible!==newState.tungstenPanelVisible){let tungstenPanelVisible=newState.tungstenPanelVisible;saveGlobalConfig(current=>({...current,tungstenPanelVisible}))}if(newState.settings!==oldState.settings)try{clearApiKeyHelperCache(),clearAwsCredentialsCache(),clearGcpCredentialsCache(),newState.settings.env!==oldState.settings.env&&applyConfigEnvironmentVariables()}catch(error40){logError2(toError(error40))}}var init_onChangeAppState=__esm({"src/state/onChangeAppState.ts"(){init_state();init_auth6();init_config11();init_errors2();init_log3();init_managedEnv();init_PermissionMode();init_sessionState2();init_settings2();__name(externalMetadataToAppState,"externalMetadataToAppState");__name(onChangeAppState,"onChangeAppState")}});var init_terminalPreference=__esm({"src/utils/deepLink/terminalPreference.ts"(){init_config11();init_debug()}});var FpsTracker,init_fpsTracker=__esm({"src/utils/fpsTracker.ts"(){FpsTracker=class{static{__name(this,"FpsTracker")}frameDurations=[];firstRenderTime;lastRenderTime;record(durationMs){let now3=performance.now();this.firstRenderTime===void 0&&(this.firstRenderTime=now3),this.lastRenderTime=now3,this.frameDurations.push(durationMs)}getMetrics(){if(this.frameDurations.length===0||this.firstRenderTime===void 0||this.lastRenderTime===void 0)return;let totalTimeMs=this.lastRenderTime-this.firstRenderTime;if(totalTimeMs<=0)return;let averageFps=this.frameDurations.length/(totalTimeMs/1e3),sorted=this.frameDurations.slice().sort((a2,b3)=>b3-a2),p99Index=Math.max(0,Math.ceil(sorted.length*.01)-1),p99FrameTimeMs=sorted[p99Index],low1PctFps=p99FrameTimeMs>0?1e3/p99FrameTimeMs:0;return{averageFps:Math.round(averageFps*100)/100,low1PctFps:Math.round(low1PctFps*100)/100}}}}});import{realpath as realpath12}from"fs/promises";async function updateGithubRepoPathMapping(){try{let repo=await detectCurrentRepository();if(!repo){logForDebugging("Not in a GitHub repository, skipping path mapping update");return}let cwd6=getOriginalCwd(),basePath=findGitRoot(cwd6)??cwd6,currentPath;try{currentPath=(await realpath12(basePath)).normalize("NFC")}catch{currentPath=basePath}let repoKey=repo.toLowerCase(),existingPaths=getGlobalConfig().githubRepoPaths?.[repoKey]??[];if(existingPaths[0]===currentPath){logForDebugging(`Path ${currentPath} already tracked for repo ${repoKey}`);return}let withoutCurrent=existingPaths.filter(p=>p!==currentPath),updatedPaths=[currentPath,...withoutCurrent];saveGlobalConfig(current=>({...current,githubRepoPaths:{...current.githubRepoPaths,[repoKey]:updatedPaths}})),logForDebugging(`Added ${currentPath} to tracked paths for repo ${repoKey}`)}catch(error40){logForDebugging(`Error updating repo path mapping: ${error40}`)}}function getKnownPathsForRepo(repo){let config3=getGlobalConfig(),repoKey=repo.toLowerCase();return config3.githubRepoPaths?.[repoKey]??[]}async function filterExistingPaths(paths2){let results=await Promise.all(paths2.map(pathExists));return paths2.filter((_2,i3)=>results[i3])}async function validateRepoAtPath(path36,expectedRepo){try{let remoteUrl=await getRemoteUrlForDir(path36);if(!remoteUrl)return!1;let actualRepo=parseGitHubRepository(remoteUrl);return actualRepo?actualRepo.toLowerCase()===expectedRepo.toLowerCase():!1}catch{return!1}}function removePathFromRepo(repo,pathToRemove){let config3=getGlobalConfig(),repoKey=repo.toLowerCase(),existingPaths=config3.githubRepoPaths?.[repoKey]??[],updatedPaths=existingPaths.filter(path36=>path36!==pathToRemove);if(updatedPaths.length===existingPaths.length)return;let updatedMapping={...config3.githubRepoPaths};updatedPaths.length===0?delete updatedMapping[repoKey]:updatedMapping[repoKey]=updatedPaths,saveGlobalConfig(current=>({...current,githubRepoPaths:updatedMapping})),logForDebugging(`Removed ${pathToRemove} from tracked paths for repo ${repoKey}`)}var init_githubRepoPathMapping=__esm({"src/utils/githubRepoPathMapping.ts"(){init_state();init_config11();init_debug();init_detectRepository();init_file2();init_gitFilesystem();init_git();__name(updateGithubRepoPathMapping,"updateGithubRepoPathMapping");__name(getKnownPathsForRepo,"getKnownPathsForRepo");__name(filterExistingPaths,"filterExistingPaths");__name(validateRepoAtPath,"validateRepoAtPath");__name(removePathFromRepo,"removePathFromRepo")}});var BRAND_WORDMARK,TAGLINE_ZH,TAGLINE_EN,SLOGAN_ZH,BRAND_LOCKUP_COMPACT,BRAND_WORDMARK_BILINGUAL,FIRST_LAUNCH_TITLE_ZH,FIRST_LAUNCH_SUBTITLE,init_dragonArt=__esm({"src/constants/dragonArt.ts"(){BRAND_WORDMARK="CLAVUE",TAGLINE_ZH="\u9F8D\u884C\u4EE3\u7801 \xB7 \u6267\u884C\u4F18\u5148",TAGLINE_EN="Dragon code \xB7 execution-first",SLOGAN_ZH="\u7231\u6211\u4E2D\u534E \xB7 \u81EA\u5F3A\u4E0D\u606F",BRAND_LOCKUP_COMPACT=`\u9F8D ${BRAND_WORDMARK}`,BRAND_WORDMARK_BILINGUAL=`${BRAND_WORDMARK} \xB7 \u514B\u62C9\u7EF4`,FIRST_LAUNCH_TITLE_ZH=`\u9F8D ${BRAND_WORDMARK} \xB7 \u514B\u62C9\u7EF4`,FIRST_LAUNCH_SUBTITLE="Choose your language / \u9009\u62E9\u8BED\u8A00 / \u8A00\u8A9E\u3092\u9078\u3076"}});var LanguageOnboardingGate_exports={};__export(LanguageOnboardingGate_exports,{LanguageOnboardingGate:()=>LanguageOnboardingGate,shouldShowLanguageOnboarding:()=>shouldShowLanguageOnboarding});function LanguageOnboardingGate({onDone}){let[done,setDone]=(0,import_react189.useState)(!needsLanguageOnboarding());return done?null:(0,import_jsx_runtime324.jsxs)(ThemedBox_default,{flexDirection:"column",paddingX:1,paddingY:1,gap:1,children:[(0,import_jsx_runtime324.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:"center",marginY:1,gap:0,children:[(0,import_jsx_runtime324.jsx)(ThemedText,{color:"warning",bold:!0,children:"\u9F8D"}),(0,import_jsx_runtime324.jsx)(ThemedText,{children:" "}),(0,import_jsx_runtime324.jsx)(ThemedText,{bold:!0,color:"warning",children:BRAND_WORDMARK_BILINGUAL}),(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:"\u2500".repeat(18)})]}),(0,import_jsx_runtime324.jsxs)(ThemedBox_default,{flexDirection:"column",alignItems:"center",gap:0,children:[(0,import_jsx_runtime324.jsx)(ThemedText,{color:"error",bold:!0,children:TAGLINE_ZH}),(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:TAGLINE_EN}),(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:SLOGAN_ZH})]}),(0,import_jsx_runtime324.jsx)(ThemedBox_default,{flexDirection:"column",alignItems:"center",gap:0,children:(0,import_jsx_runtime324.jsx)(ThemedText,{dimColor:!0,children:FIRST_LAUNCH_SUBTITLE})}),(0,import_jsx_runtime324.jsx)(LanguagePicker,{primaryOnly:!0,initialLanguage:void 0,onCancel:()=>{applyUiLocale("zh-CN"),setDone(!0),onDone()},onComplete:lang=>{applyUiLocale(lang||"zh-CN"),setDone(!0),onDone()}})]})}function shouldShowLanguageOnboarding(){return needsLanguageOnboarding()}var import_react189,import_jsx_runtime324,init_LanguageOnboardingGate=__esm({"src/components/LanguageOnboardingGate.tsx"(){import_react189=__toESM(require_react());init_ink();init_dragonArt();init_applyUiLocale();init_LanguagePicker();import_jsx_runtime324=__toESM(require_jsx_runtime());__name(LanguageOnboardingGate,"LanguageOnboardingGate");__name(shouldShowLanguageOnboarding,"shouldShowLanguageOnboarding")}});function centerPlaque(content,contentWidth){let total=Math.max(0,PLAQUE_WIDTH-contentWidth),left=Math.floor(total/2),right=total-left;return" ".repeat(left)+content+" ".repeat(right)}function WelcomeHeader({isZh:isZh7}){let title=isZh7?`${APP_NAME} \xB7 ${"\u514B\u62C9\u7EF4"}`:APP_NAME;return(0,import_jsx_runtime325.jsxs)(import_jsx_runtime325.Fragment,{children:[(0,import_jsx_runtime325.jsxs)(ThemedText,{children:[(0,import_jsx_runtime325.jsx)(ThemedText,{color:"brand",bold:!0,children:title}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:" v11.3.13"})]}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:isZh7?WELCOME_SUBTITLE:isZh7?APP_BRAND_TAGLINE_ZH:"Execution-first AI coding CLI"})]})}function WelcomeV2(){let[theme2]=useTheme(),isZh7=resolveUiLocale()==="zh-CN",isLightTheme=["light","light-daltonized","light-ansi"].includes(theme2),wordmarkContent=isZh7?`${"\u9F8D"} ${APP_NAME} \xB7 ${"\u514B\u62C9\u7EF4"} ${"\u9F8D"}`:`${"\u9F8D"} ${APP_NAME} ${"\u9F8D"}`,wordmarkWidth=isZh7?21:14,taglineContent=isZh7?WELCOME_TAGLINE_ZH:"rise \xB7 code \xB7 ship",taglineWidth=isZh7?19:18,decorTop=isLightTheme?" ~ \xB7 ~ ":" * ~ \xB7 ~ * ",decorBot=isLightTheme?" ~~~ \xB7 ~~~ ":" \xB7 ~~~ \xB7 ~~~ \xB7 ";return(0,import_jsx_runtime325.jsxs)(ThemedBox_default,{width:WELCOME_V2_WIDTH,flexDirection:"column",children:[(0,import_jsx_runtime325.jsx)(WelcomeHeader,{isZh:isZh7}),(0,import_jsx_runtime325.jsxs)(ThemedBox_default,{marginTop:1,flexDirection:"column",children:[(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:decorTop}),(0,import_jsx_runtime325.jsx)(ThemedText,{color:"mascot_body",children:centerPlaque(wordmarkContent,wordmarkWidth)}),(0,import_jsx_runtime325.jsx)(ThemedText,{color:"mascot_body",children:centerPlaque(taglineContent,taglineWidth)}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:decorBot})]}),(0,import_jsx_runtime325.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\xB7 ${WELCOME_BRAND_FULL}`:`\xB7 ${WELCOME_BRAND_FULL}`})]})}var import_jsx_runtime325,WELCOME_SUBTITLE,WELCOME_TAGLINE_ZH,WELCOME_BRAND_FULL,WELCOME_V2_WIDTH,PLAQUE_WIDTH,init_WelcomeV2=__esm({"src/components/LogoV2/WelcomeV2.tsx"(){init_ink();init_branding();init_uiLocale();import_jsx_runtime325=__toESM(require_jsx_runtime()),WELCOME_SUBTITLE="\u4E2D\u6587\u4F18\u5148\u7684 AI \u7F16\u7801\u63A7\u5236\u53F0",WELCOME_TAGLINE_ZH="\u4E91\u8D77\u4E1C\u65B9 \xB7 \u9F99\u884C\u4EE3\u7801",WELCOME_BRAND_FULL="Clavue \xB7 \u9F8D",WELCOME_V2_WIDTH=60,PLAQUE_WIDTH=32;__name(centerPlaque,"centerPlaque");__name(WelcomeHeader,"WelcomeHeader");__name(WelcomeV2,"WelcomeV2")}});async function getBypassPermissionsStartupBlockReason(){if(process.platform!=="win32"&&typeof process.getuid=="function"&&process.getuid()===0&&process.env.IS_SANDBOX!=="1"&&!isEnvTruthy2(process.env.CLAUDE_CODE_BUBBLEWRAP))return"--dangerously-skip-permissions cannot be used with root/sudo privileges for security reasons";if(process.env.USER_TYPE!=="ant"||process.env.CLAUDE_CODE_ENTRYPOINT==="local-agent"||process.env.CLAUDE_CODE_ENTRYPOINT==="claude-desktop")return null;let[isDocker,hasInternet]=await Promise.all([envDynamic.getIsDocker(),env4.hasInternetAccess()]),isBubblewrap=envDynamic.getIsBubblewrapSandbox(),isSandbox=process.env.IS_SANDBOX==="1";return!(isDocker||isBubblewrap||isSandbox)||hasInternet?`--dangerously-skip-permissions can only be used in Docker/sandbox containers with no internet access but got Docker: ${isDocker}, Bubblewrap: ${isBubblewrap}, IS_SANDBOX: ${isSandbox}, hasInternet: ${hasInternet}`:null}var init_bypassSafety=__esm({"src/utils/permissions/bypassSafety.ts"(){init_env2();init_envDynamic();init_envUtils();__name(getBypassPermissionsStartupBlockReason,"getBypassPermissionsStartupBlockReason")}});var Onboarding_exports={};__export(Onboarding_exports,{Onboarding:()=>Onboarding});function getRoutingDisplayValue2(value,fallback){return String(value||"").trim()||fallback}function getProviderSnapshot(){let activeSavedProfile=getSavedActiveProviderProfile(),currentEnvProfile=getCurrentProviderProfile(),currentProfile=activeSavedProfile??currentEnvProfile??getResolvedCurrentProviderProfile();return{activeSavedProfile,currentEnvProfile,currentProfile}}function isValidHttpUrl(value){try{let url3=new URL(value);return url3.protocol==="http:"||url3.protocol==="https:"}catch{return!1}}function getProviderStartupLocalIssues(profile){if(!profile)return[];let isZh7=resolveUiLocale()==="zh-CN",baseUrl=String(profile.baseUrl||"").trim(),credential=String(profile.credential||"").trim(),issues=[];return baseUrl?isValidHttpUrl(baseUrl)||issues.push(isZh7?"[\u9519\u8BEF] API base URL \u5FC5\u987B\u4EE5 http:// \u6216 https:// \u5F00\u5934\u3002":"[ERROR] API base URL must start with http:// or https://."):issues.push(isZh7?"[\u9519\u8BEF] API base URL \u4E0D\u80FD\u4E3A\u7A7A\u3002":"[ERROR] API base URL is required."),credential?isPlaceholderProviderCredential(credential)&&issues.push(isZh7?"[\u9519\u8BEF] API \u51ED\u636E\u770B\u8D77\u6765\u50CF\u5360\u4F4D\u7B26,\u8BF7\u586B\u5165\u771F\u5B9E\u51ED\u636E\u3002":"[ERROR] API credential looks like a placeholder."):issues.push(isZh7?"[\u9519\u8BEF] API \u51ED\u636E\u4E0D\u80FD\u4E3A\u7A7A\u3002":"[ERROR] API credential is required."),[...issues,...getProviderLocalValidationWarnings(profile)]}function getReadiness(snapshot2){let isZh7=resolveUiLocale()==="zh-CN";if(!snapshot2.currentProfile)return{status:"error",label:isZh7?"\u9700\u8981\u914D\u7F6E":"Setup required",detail:isZh7?"Clavue \u5DF2\u5B89\u88C5,\u4F46\u8FD8\u6CA1\u6709\u53EF\u7528\u7684 Provider \u8DEF\u7531\u3002":"Clavue is installed, but no usable provider route is active yet.",canEnterChat:!1,issues:[]};let localIssues=getProviderStartupLocalIssues(snapshot2.currentProfile);return localIssues.length>0?{status:"error",label:isZh7?"\u9700\u8981\u4FEE\u590D":"Needs repair",detail:isZh7?"\u5DF2\u627E\u5230\u5F53\u524D Provider \u8DEF\u7531,\u4F46\u672C\u5730\u6821\u9A8C\u53D1\u73B0\u914D\u7F6E\u95EE\u9898\u3002\u8BF7\u5148\u4FEE\u590D\u518D\u8FDB\u5165\u4F1A\u8BDD\u3002":"The active provider route is present, but local checks found configuration problems. Fix it before entering chat.",canEnterChat:!1,issues:localIssues}:snapshot2.activeSavedProfile&&snapshot2.currentEnvProfile&&!areProviderProfilesEquivalent(snapshot2.activeSavedProfile,snapshot2.currentEnvProfile)?{status:"warning",label:isZh7?"\u9700\u8981\u590D\u6838":"Needs review",detail:isZh7?"\u5DF2\u4FDD\u5B58\u7684 Provider \u914D\u7F6E\u5DF2\u6FC0\u6D3B,\u4F46\u5F53\u524D\u73AF\u5883\u53D8\u91CF\u4E0E\u4E4B\u4E0D\u4E00\u81F4\u3002":"A saved profile is active, but the live environment currently differs from it.",issues:[isZh7?"[\u8B66\u544A] \u5DF2\u4FDD\u5B58\u7684 Provider \u914D\u7F6E\u4E0E\u5F53\u524D\u73AF\u5883\u4E0D\u5339\u914D\u3002":"[WARN] Saved provider profile and live API environment do not match."],canEnterChat:!0}:{status:"success",label:isZh7?"\u51C6\u5907\u5C31\u7EEA":"Ready",detail:isZh7?"\u5F53\u524D Provider \u8DEF\u7531\u5DF2\u6FC0\u6D3B\u3002Clavue \u5DF2\u6309\u5F00\u653E\u5DE5\u5177\u7B56\u7565\u52A0\u8F7D\u5B8C\u6574\u80FD\u529B\uFF1B\u6267\u884C\u8FB9\u754C\u7531 /permissions \u51B3\u5B9A\u3002":"A provider route is active. Clavue loads the full tool surface by default; /permissions controls execution approval.",canEnterChat:!0,issues:[]}}function ReadinessPanel({readiness}){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u72B6\u6001":"Route readiness"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{color:readiness.status,children:[(0,import_jsx_runtime326.jsx)(StatusIcon,{status:readiness.status,withSpace:!0}),readiness.label]}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:readiness.detail}),readiness.issues.slice(0,3).map(issue2=>(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:issue2},issue2))]})}function QuickStart({blocked,cloudAuto}){let isZh7=resolveUiLocale()==="zh-CN";if(cloudAuto){let bullets=officialAutoOnboardingBullets(isZh7?"zh-CN":"en");return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:0,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u63A8\u8350\uFF1AAuto \u4E00\u952E\u4E0A\u624B":"Recommended: Auto in one step"}),(0,import_jsx_runtime326.jsx)(ThemedText,{color:"success",wrap:"wrap",children:isZh7?OFFICIAL_AUTO_COMBO.pitch.zh:OFFICIAL_AUTO_COMBO.pitch.en}),bullets.map((line,i3)=>(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,children:[i3+1,". "]}),line]},line)),(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,wrap:"wrap",children:[isZh7?"Chrome \u663E\u793A\uFF1A":"Chrome shows: ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:OFFICIAL_AUTO_COMBO.modelsLineExample})]})]})}return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:0,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5FEB\u901F\u4E0A\u624B":"Quick start"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"1. "}),blocked?isZh7?"Clavue Cloud \u767B\u5F55\uFF08Auto\uFF09\u6216\u914D\u7F6E\u7B2C\u4E09\u65B9 Key":"Sign in to Clavue Cloud (Auto) or add a third-party key":isZh7?"\u786E\u8BA4\u8DEF\u7531\uFF1BCloud \u7528\u6237\u4FDD\u6301 Auto \u5373\u53EF":"Confirm the route; Cloud users can stay on Auto"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"2. "}),isZh7?"\u9009 ":"Pick ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),isZh7?" \u6743\u9650\u6A21\u5F0F\u540E\u5F00\u59CB\u5199\u4EE3\u7801":" then start coding"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"3. "}),isZh7?"\u8FDB\u9636\u518D\u6539\u6A21\u578B\u69FD\u4F4D\uFF1B\u9ED8\u8BA4 Auto \u5DF2\u8DB3\u591F":"Only tweak model slots later \u2014 Auto is enough to start"]})]})}function SetupProgress({step:step2}){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime326.jsx)(ThemedBox_default,{children:[{id:1,label:"Provider"},{id:2,label:isZh7?"\u6743\u9650":"Permissions"},{id:3,label:isZh7?"\u5F00\u59CB":"Start"}].map((item,index)=>(0,import_jsx_runtime326.jsxs)(ThemedText,{color:item.id===step2?"success":void 0,dimColor:item.id>step2,children:[index>0?" ":"",item.id<=step2?"\u25CF":"\u25CB"," ",item.id,". ",item.label]},item.id))})}function SetupComplete({onEnter}){let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:3}),(0,import_jsx_runtime326.jsxs)(ThemedText,{color:"success",children:[(0,import_jsx_runtime326.jsx)(StatusIcon,{status:"success",withSpace:!0}),isZh7?"\u914D\u7F6E\u5B8C\u6210 \xB7 Auto \u5C31\u7EEA":"Setup complete \xB7 Auto ready"]}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?"\u9ED8\u8BA4 Auto \u7EC4\u5408\u5DF2\u5C31\u7EEA\uFF08\u5B98\u65B9\u4EA7\u54C1\u6A21\u578B\uFF09\u3002\u8FDB\u5165\u540E\u76F4\u63A5\u63D0\u9700\u6C42\u5373\u53EF\uFF1B\u4E0D\u5FC5\u5148\u8C03\u6A21\u578B\u77E9\u9635\u3002":"Default Auto combo is ready (official product models). Just ask for work \u2014 no model matrix first."}),(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:0,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5EFA\u8BAE\u4E0B\u4E00\u6B65":"Suggested next steps"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"1. "}),isZh7?"\u76F4\u63A5\u63CF\u8FF0\u4EFB\u52A1\uFF08\u68C0\u67E5 / \u6539\u4EE3\u7801 / \u8DD1\u6D4B\u8BD5\uFF09":"Describe a task (inspect / edit / run tests)"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"2. "}),(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/init"}),isZh7?" \u53EF\u9009\uFF1A\u5199\u9879\u76EE\u89C4\u5219":" optional: project rules"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"3. "}),isZh7?"\u989D\u5EA6\u7D27\u65F6 /account switch\uFF1B\u8FDB\u9636\u624D /provider":"If quota is low: /account switch; /provider only when advanced"]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:"4. "}),(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/provider current"}),isZh7?" \u67E5\u770B\u8DEF\u7531\uFF0C":" to inspect routing, ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),isZh7?" \u8C03\u6574\u6267\u884C\u8FB9\u754C":" to adjust execution approval"]})]}),(0,import_jsx_runtime326.jsx)(Select,{hideIndexes:!0,options:[{label:isZh7?"\u7528 Auto \u8FDB\u5165\u4F1A\u8BDD":"Enter with Auto",value:"enter",description:isZh7?"\u5B98\u65B9\u7EC4\u5408\u5DF2\u5C31\u7EEA \u2014 \u76F4\u63A5\u63D0\u9700\u6C42\u5373\u53EF\u3002":"Official Auto combo ready \u2014 just ask for work."}],layout:"compact-vertical",defaultValue:"enter",onChange:value=>{value==="enter"&&onEnter()},onCancel:onEnter})]})}function saveDefaultPermissionMode(mode){return updateSettingsForSource("userSettings",{permissions:{defaultMode:mode}}).error}function installFirstRunPermissionPreset(mode,baseContext){try{if(mode==="acceptEdits")return{context:applyZeroConfigPermissionPreset(baseContext).context};if(mode==="bypassPermissions")return{context:applyAutonomousDevelopmentPermissionPreset(baseContext).context};let error40=saveDefaultPermissionMode(mode);return error40?{error:error40}:{context:{...baseContext,mode}}}catch(error40){return{error:error40 instanceof Error?error40:new Error(String(error40))}}}function PermissionQuickSetup({onDone,initialToolPermissionContext}){let[status2,setStatus]=import_react190.default.useState(null),options=[{label:"\u9AD8\u6548\u5F00\u53D1\uFF08\u63A8\u8350\uFF09",value:"acceptEdits",description:"\u81EA\u52A8\u63A5\u53D7\u6587\u4EF6\u7F16\u8F91\uFF1B\u8FD0\u884C\u547D\u4EE4\u524D\u4ECD\u4F1A\u786E\u8BA4\uFF0C\u9002\u5408\u5927\u591A\u6570\u9879\u76EE\u3002"},{label:"\u901A\u7528\u6388\u6743\uFF08\u6700\u65B9\u4FBF\uFF09",value:"bypassPermissions",description:"\u81EA\u52A8\u5141\u8BB8 Tool use\uFF0C\u5305\u62EC Web Search\uFF1B\u4EC5\u7528\u4E8E\u4F60\u5B8C\u5168\u4FE1\u4EFB\u3001\u53EF\u6062\u590D\u7684\u73AF\u5883\u3002"},{label:"\u9ED8\u8BA4\u5B89\u5168\u6A21\u5F0F",value:"default",description:"\u6BCF\u6B21\u654F\u611F\u6587\u4EF6\u7F16\u8F91\u6216\u547D\u4EE4\u6267\u884C\u524D\u90FD\u5148\u8BE2\u95EE\u3002"},{label:"\u8BA1\u5212\u6A21\u5F0F",value:"plan",description:"\u9ED8\u8BA4\u5148\u5206\u6790\u548C\u89C4\u5212\uFF0C\u5B9E\u65BD\u524D\u518D\u786E\u8BA4\u3002"},{label:"\u8DF3\u8FC7\uFF08\u7A0D\u540E\u7528 /approvals \u8BBE\u7F6E\uFF09",value:"skip",description:"\u8FDB\u5165\u4F1A\u8BDD\u540E\u53EF\u8FD0\u884C /approvals \u6216 /permissions \u4FEE\u6539\u3002"},{label:"\u9000\u51FA",value:"exit",description:"\u6682\u4E0D\u8FDB\u5165 Clavue\u3002"}];async function handleSelection(value){if(value==="exit"){onDone({type:"exit"});return}if(value==="skip"){onDone({type:"continue"});return}if(value==="bypassPermissions"){let blockReason=await getBypassPermissionsStartupBlockReason();if(blockReason){setStatus(`\u6700\u5927\u6743\u9650\u5F53\u524D\u4E0D\u53EF\u7528\uFF1A${blockReason}`);return}if(await shouldDisableBypassPermissions()){setStatus("\u6700\u5927\u6743\u9650\u5F53\u524D\u5DF2\u88AB\u7EC4\u7EC7\u7B56\u7565\u7981\u7528\u3002\u8BF7\u9009\u62E9\u9AD8\u6548\u5F00\u53D1\u6216\u9ED8\u8BA4\u5B89\u5168\u6A21\u5F0F\u3002");return}}let result2=installFirstRunPermissionPreset(value,initialToolPermissionContext??getEmptyToolPermissionContext());if(result2.error){setStatus(`\u6743\u9650\u6A21\u5F0F\u4FDD\u5B58\u5931\u8D25\uFF1A${result2.error.message}`);return}onDone({type:"continue",permissionMode:value,permissionNotice:value==="bypassPermissions"?"\u5DF2\u542F\u7528\u6700\u5927\u6743\u9650\u6A21\u5F0F\u3002\u53EA\u5728\u5B8C\u5168\u4FE1\u4EFB\u7684\u9879\u76EE\u548C\u73AF\u5883\u4E2D\u4F7F\u7528\u3002":value==="acceptEdits"?"\u5DF2\u5B89\u88C5\u96F6\u914D\u7F6E\u5F00\u53D1\u6743\u9650\uFF0C\u5E76\u5C06\u9ED8\u8BA4\u6743\u9650\u6A21\u5F0F\u8BBE\u4E3A acceptEdits\u3002":`\u5DF2\u5C06\u9ED8\u8BA4\u6743\u9650\u6A21\u5F0F\u8BBE\u4E3A ${value}\u3002`,toolPermissionContext:result2.context})}return __name(handleSelection,"handleSelection"),(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:2}),(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"\u{1F6E1} \u6743\u9650\u914D\u7F6E\u7BA1\u7406"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,wrap:"wrap",children:["\u9009\u62E9 Clavue \u9ED8\u8BA4\u5982\u4F55\u5904\u7406\u6587\u4EF6\u7F16\u8F91\u548C\u547D\u4EE4\u6267\u884C\u6743\u9650\u3002\u540E\u7EED\u53EF\u5728\u4F1A\u8BDD\u4E2D\u4F7F\u7528"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/approvals"})," \u6216"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"})," \u968F\u65F6\u8C03\u6574\u3002"]}),(0,import_jsx_runtime326.jsx)(ThemedText,{wrap:"wrap",children:"? \u8BF7\u9009\u62E9\u9ED8\u8BA4\u6743\u9650\u6A21\u5F0F:"}),status2?(0,import_jsx_runtime326.jsx)(ThemedText,{color:"warning",wrap:"wrap",children:status2}):null,(0,import_jsx_runtime326.jsx)(Select,{hideIndexes:!0,options,layout:"compact-vertical",defaultValue:"acceptEdits",onChange:value=>{handleSelection(value)},onCancel:()=>onDone({type:"exit"})})]})}function RouteSummary({snapshot:snapshot2}){let isZh7=resolveUiLocale()==="zh-CN",routeProfile=snapshot2.currentEnvProfile??snapshot2.currentProfile,currentSlots=routeProfile?getProviderModelSlotDefaults(routeProfile.modelRouting):null,migrationHint=getProviderMigrationHint(snapshot2.currentEnvProfile??snapshot2.activeSavedProfile??snapshot2.currentProfile,{hasSavedProfile:snapshot2.activeSavedProfile!==null}),fallback=isZh7?"Provider \u9ED8\u8BA4":"provider default",noneText=isZh7?"\u65E0":"none";return routeProfile?(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u6458\u8981":"Route summary"}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5DF2\u4FDD\u5B58\u7684\u5F53\u524D\u914D\u7F6E:":"Active saved profile:"})," ",snapshot2.activeSavedProfile?.name??noneText]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u5F53\u524D API \u73AF\u5883:":"Live API config:"})," ",snapshot2.currentEnvProfile?.name??noneText]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6765\u6E90:":"Source:"})," ",getProviderSourceLabel(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6765\u6E90\u8BF4\u660E:":"Source detail:"})," ",getProviderSourceDescription(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6A21\u578B\u6A21\u5F0F:":"Model mode:"})," ",getProviderExperienceLabel(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6A21\u5F0F\u8BF4\u660E:":"Mode note:"})," ",getProviderExperienceDescription(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u7B56\u7565:":"Routing strategy:"})," ",getProviderRoutingStrategyLabel(routeProfile)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u4E3B\u6A21\u578B:":"Primary:"})," ",getRoutingDisplayValue2(routeProfile.modelRouting.primaryModel,fallback)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"Sonnet:"})," ",getRoutingDisplayValue2(currentSlots?.sonnetModel,fallback)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"Haiku:"})," ",getRoutingDisplayValue2(currentSlots?.haikuModel,fallback)]}),(0,import_jsx_runtime326.jsxs)(ThemedText,{wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:"Opus:"})," ",getRoutingDisplayValue2(currentSlots?.opusModel,fallback)]}),migrationHint?(0,import_jsx_runtime326.jsxs)(ThemedText,{dimColor:!0,wrap:"wrap",children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8FC1\u79FB\u5EFA\u8BAE:":"Migration:"})," ",migrationHint]}):null]}):(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(ThemedText,{bold:!0,children:isZh7?"\u8DEF\u7531\u6458\u8981":"Route summary"}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u672A\u627E\u5230\u5F53\u524D\u8DEF\u7531\u3002":"No active route was found."})]})}function Onboarding({onDone,initialToolPermissionContext}){let isZh7=resolveUiLocale()==="zh-CN",[snapshot2,setSnapshot]=import_react190.default.useState(getProviderSnapshot),authDecision=import_react190.default.useMemo(()=>resolveAuthBootstrapDecision(isZh7?"zh-CN":"en"),[isZh7,snapshot2.currentProfile?.id,snapshot2.activeSavedProfile?.id]),[mode,setMode]=import_react190.default.useState(()=>snapshot2.currentProfile||authDecision.skipLogin?"choice":"wizard"),[pendingResult,setPendingResult]=import_react190.default.useState(null),readiness=getReadiness(snapshot2),cloudAutoReady=isOfficialCloudAutoProfile(snapshot2.currentProfile),startupOptions=[{label:isZh7?cloudAutoReady?"\u4F7F\u7528 Auto \u8FDB\u5165\u4F1A\u8BDD\uFF08\u63A8\u8350\uFF09":"\u4F7F\u7528 Auto \u5F00\u59CB\uFF08\u63A8\u8350\uFF09":cloudAutoReady?"Enter with Auto (recommended)":"Start with Auto (recommended)",value:"auto",description:isZh7?cloudAutoReady?`${OFFICIAL_AUTO_COMBO.pitch.zh} \xB7 \u5DF2\u5C31\u7EEA\uFF0C\u76F4\u63A5\u8FDB\u5165\u3002`:`${OFFICIAL_AUTO_COMBO.pitch.zh} \xB7 \u767B\u5F55 Cloud \u540E\u9ED8\u8BA4 Auto \u7EC4\u5408\u3002`:cloudAutoReady?`${OFFICIAL_AUTO_COMBO.pitch.en} \xB7 ready, enter now.`:`${OFFICIAL_AUTO_COMBO.pitch.en} \xB7 Cloud login defaults to Auto combo.`},...authDecision.skipLogin&&readiness.canEnterChat&&!cloudAutoReady?[{label:isZh7?"\u8FDB\u5165\u4F1A\u8BDD\uFF08\u5F53\u524D\u8DEF\u7531\uFF09":"Enter chat (current route)",value:"continue",description:isZh7?`${authDecision.summary} \xB7 \u4FDD\u6301\u73B0\u6709 BYOK / \u81EA\u5B9A\u4E49\u69FD\u4F4D\u3002`:`${authDecision.summary} \xB7 keep current BYOK / custom slots.`}]:[],{label:isZh7?"Clavue Cloud \u767B\u5F55":"Clavue Cloud sign-in",value:"cloud",description:isZh7?"\u4F1A\u5458\u767B\u5F55\u540E\u81EA\u52A8\u5957\u7528 Auto \u7EC4\u5408\uFF08\u5B98\u65B9\u4EA7\u54C1\u6A21\u578B\uFF09\u3002\u4F1A\u8BDD\u5185\u4E5F\u53EF /account login\u3002":"After membership login, Auto combo is applied (official product models). Or /account login in chat."},{label:isZh7?"\u7B2C\u4E09\u65B9 / API Key\uFF08\u8FDB\u9636\uFF09":"Third-party / API key (advanced)",value:"configure",description:isZh7?"\u81EA\u5907 OpenAI / Claude / Grok / \u7F51\u5173\u3002\u989D\u5EA6\u4E0D\u8DB3\u65F6\u7684\u5B89\u5168\u7F51\uFF1B\u975E\u5FC5\u586B\u3002":"Bring OpenAI / Claude / Grok / gateway keys. Safety net when quota is low \u2014 optional."},{label:isZh7?"\u9000\u51FA":"Exit",value:"exit",description:isZh7?"\u6682\u4E0D\u8FDB\u5165 Clavue\u3002":"Do not enter Clavue right now."}];function refreshSnapshot(){let nextSnapshot=getProviderSnapshot();return setSnapshot(nextSnapshot),nextSnapshot}return __name(refreshSnapshot,"refreshSnapshot"),mode==="done"?(0,import_jsx_runtime326.jsx)(SetupComplete,{onEnter:()=>onDone(pendingResult??{type:"continue"})}):mode==="permissions"?(0,import_jsx_runtime326.jsx)(PermissionQuickSetup,{onDone:result2=>{if(result2.type==="continue"){setPendingResult(result2),setMode("done");return}onDone(result2)},initialToolPermissionContext}):mode==="wizard"?(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:1}),(0,import_jsx_runtime326.jsx)(ReadinessPanel,{readiness}),(0,import_jsx_runtime326.jsx)(QuickStart,{blocked:snapshot2.currentProfile===null,cloudAuto:!1}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["\u8FDB\u9636\u8DEF\u5F84\uFF1A\u914D\u7F6E\u81EA\u6709 API\u3002\u65B0\u624B\u66F4\u63A8\u8350\u8FD4\u56DE\u9009\u300C\u4F7F\u7528 Auto\u300D\u5E76"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/account login"}),"\u3002\u540E\u7EED\u53EF\u7528"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"clavue provider"})," \u91CD\u5F00\u6B64\u9762\u677F\u3002"]}):(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["Advanced path: bring your own API. New users should prefer Auto +"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/account login"}),". Reopen later with"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"clavue provider"}),"."]})}),(0,import_jsx_runtime326.jsx)(ProviderConfigManager,{onDone:configured=>{let nextSnapshot=refreshSnapshot();if(configured&&getReadiness(nextSnapshot).canEnterChat){setMode("permissions");return}if(nextSnapshot.currentProfile){setMode("choice");return}onDone({type:"exit"})}})]}):(0,import_jsx_runtime326.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime326.jsx)(WelcomeV2,{}),(0,import_jsx_runtime326.jsx)(SetupProgress,{step:1}),(0,import_jsx_runtime326.jsx)(ReadinessPanel,{readiness}),(0,import_jsx_runtime326.jsx)(RouteSummary,{snapshot:snapshot2}),(0,import_jsx_runtime326.jsx)(QuickStart,{blocked:snapshot2.currentProfile===null,cloudAuto:cloudAutoReady||authDecision.activeTrack==="membership"}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["\u5FC3\u667A\uFF1A\u9ED8\u8BA4 ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"Auto"}),"\uFF08\u5B98\u65B9\u7EC4\u5408\u6A21\u578B\uFF09\u3002\u8FDB\u9636\u518D\u78B0 /provider\u3002\u6743\u9650\u7528"," ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),"\u3002"]}):(0,import_jsx_runtime326.jsxs)(import_jsx_runtime326.Fragment,{children:["Mental model: default ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"Auto"})," ","(official multi-model combo). Touch /provider only when advanced. Permissions: ",(0,import_jsx_runtime326.jsx)(ThemedText,{color:"permission",children:"/permissions"}),"."]})}),(0,import_jsx_runtime326.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:isZh7?`Cloud: ${membershipAccountWebUrl("zh")} \xB7 ${membershipPricingWebUrl("zh")}`:`Cloud: ${membershipAccountWebUrl("en")} \xB7 ${membershipPricingWebUrl("en")}`}),(0,import_jsx_runtime326.jsx)(Select,{hideIndexes:!0,options:startupOptions,layout:"compact-vertical",onChange:value=>{if(value==="auto"){ensureOfficialAutoOnCloudProfile({activate:!0});let next=refreshSnapshot();if(getReadiness(next).canEnterChat){setMode("permissions");return}if(authDecision.hasMembershipSession){setMode("permissions");return}if(next.currentProfile){setMode("permissions");return}setMode("wizard");return}if(value==="continue"){setMode("permissions");return}if(value==="cloud"){if(ensureOfficialAutoOnCloudProfile({activate:!0}),refreshSnapshot(),snapshot2.currentProfile?.id===MEMBERSHIP_CLOUD_PROFILE_ID&&readiness.canEnterChat){setMode("permissions");return}if(readiness.canEnterChat){setMode("permissions");return}refreshSnapshot(),setMode("wizard");return}if(value==="configure"){refreshSnapshot(),setMode("wizard");return}onDone({type:"exit"})},onCancel:()=>onDone({type:"exit"})})]})}var import_react190,import_jsx_runtime326,init_Onboarding=__esm({"src/components/Onboarding.tsx"(){import_react190=__toESM(require_react());init_select();init_ink();init_ProviderConfigManager();init_StatusIcon();init_WelcomeV2();init_bypassSafety();init_permissionSetup();init_zeroConfigPreset();init_uiLocale();init_settings2();init_Tool();init_providerProfileMetadata();init_providerCredentials();init_providerProfiles();init_authPolicy();init_config2();init_officialAutoCombo();import_jsx_runtime326=__toESM(require_jsx_runtime());__name(getRoutingDisplayValue2,"getRoutingDisplayValue");__name(getProviderSnapshot,"getProviderSnapshot");__name(isValidHttpUrl,"isValidHttpUrl");__name(getProviderStartupLocalIssues,"getProviderStartupLocalIssues");__name(getReadiness,"getReadiness");__name(ReadinessPanel,"ReadinessPanel");__name(QuickStart,"QuickStart");__name(SetupProgress,"SetupProgress");__name(SetupComplete,"SetupComplete");__name(saveDefaultPermissionMode,"saveDefaultPermissionMode");__name(installFirstRunPermissionPreset,"installFirstRunPermissionPreset");__name(PermissionQuickSetup,"PermissionQuickSetup");__name(RouteSummary,"RouteSummary");__name(Onboarding,"Onboarding")}});function PermissionRequestTitle({title,subtitle,color:color3="permission",workerBadge}){return(0,import_jsx_runtime327.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime327.jsxs)(ThemedBox_default,{flexDirection:"row",gap:1,children:[(0,import_jsx_runtime327.jsx)(ThemedText,{bold:!0,color:color3,children:title}),workerBadge&&(0,import_jsx_runtime327.jsxs)(ThemedText,{dimColor:!0,children:["\xB7 ","@",workerBadge.name]})]}),subtitle!=null&&(typeof subtitle=="string"?(0,import_jsx_runtime327.jsx)(ThemedText,{dimColor:!0,wrap:"truncate-start",children:subtitle}):subtitle)]})}var import_jsx_runtime327,init_PermissionRequestTitle=__esm({"src/components/permissions/PermissionRequestTitle.tsx"(){init_ink();import_jsx_runtime327=__toESM(require_jsx_runtime());__name(PermissionRequestTitle,"PermissionRequestTitle")}});function PermissionDialog({title,subtitle,color:color3="permission",titleColor,innerPaddingX=1,workerBadge,titleRight,children}){return(0,import_jsx_runtime328.jsxs)(ThemedBox_default,{flexDirection:"column",borderStyle:"round",borderColor:color3,borderLeft:!1,borderRight:!1,borderBottom:!1,marginTop:1,children:[(0,import_jsx_runtime328.jsx)(ThemedBox_default,{paddingX:1,flexDirection:"column",children:(0,import_jsx_runtime328.jsxs)(ThemedBox_default,{justifyContent:"space-between",children:[(0,import_jsx_runtime328.jsx)(PermissionRequestTitle,{title,subtitle,color:titleColor,workerBadge}),titleRight]})}),(0,import_jsx_runtime328.jsx)(ThemedBox_default,{flexDirection:"column",paddingX:innerPaddingX,children})]})}var import_jsx_runtime328,init_PermissionDialog=__esm({"src/components/permissions/PermissionDialog.tsx"(){init_ink();init_PermissionRequestTitle();import_jsx_runtime328=__toESM(require_jsx_runtime());__name(PermissionDialog,"PermissionDialog")}});function hasHooks(settings){if(settings===null||settings.disableAllHooks)return!1;if(settings.statusLine||settings.fileSuggestion)return!0;if(!settings.hooks)return!1;for(let hookConfig of Object.values(settings.hooks))if(hookConfig.length>0)return!0;return!1}function getHooksSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasHooks(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasHooks(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasBashPermission(rules){return rules.some(rule=>rule.ruleBehavior==="allow"&&(rule.ruleValue.toolName===BASH_TOOL_NAME||rule.ruleValue.toolName.startsWith(BASH_TOOL_NAME+"(")))}function getBashPermissionSources(){let sources=[],projectRules=getPermissionRulesForSource("projectSettings");hasBashPermission(projectRules)&&sources.push(".clavue/settings.json");let localRules=getPermissionRulesForSource("localSettings");return hasBashPermission(localRules)&&sources.push(".clavue/settings.local.json"),sources}function hasOtelHeadersHelper(settings){return!!settings?.otelHeadersHelper}function getOtelHeadersHelperSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasOtelHeadersHelper(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasOtelHeadersHelper(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasApiKeyHelper(settings){return!!settings?.apiKeyHelper}function getApiKeyHelperSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasApiKeyHelper(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasApiKeyHelper(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasAwsCommands(settings){return!!(settings?.awsAuthRefresh||settings?.awsCredentialExport)}function getAwsCommandsSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasAwsCommands(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasAwsCommands(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasGcpCommands(settings){return!!settings?.gcpAuthRefresh}function getGcpCommandsSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasGcpCommands(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasGcpCommands(localSettings)&&sources.push(".clavue/settings.local.json"),sources}function hasDangerousEnvVars(settings){return settings?.env?Object.keys(settings.env).some(key=>!SAFE_ENV_VARS3.has(key.toUpperCase())):!1}function getDangerousEnvVarsSources(){let sources=[],projectSettings=getSettingsForSource("projectSettings");hasDangerousEnvVars(projectSettings)&&sources.push(".clavue/settings.json");let localSettings=getSettingsForSource("localSettings");return hasDangerousEnvVars(localSettings)&&sources.push(".clavue/settings.local.json"),sources}var init_utils14=__esm({"src/components/TrustDialog/utils.ts"(){init_settings2();init_toolName();init_managedEnvConstants();init_permissionsLoader();__name(hasHooks,"hasHooks");__name(getHooksSources,"getHooksSources");__name(hasBashPermission,"hasBashPermission");__name(getBashPermissionSources,"getBashPermissionSources");__name(hasOtelHeadersHelper,"hasOtelHeadersHelper");__name(getOtelHeadersHelperSources,"getOtelHeadersHelperSources");__name(hasApiKeyHelper,"hasApiKeyHelper");__name(getApiKeyHelperSources,"getApiKeyHelperSources");__name(hasAwsCommands,"hasAwsCommands");__name(getAwsCommandsSources,"getAwsCommandsSources");__name(hasGcpCommands,"hasGcpCommands");__name(getGcpCommandsSources,"getGcpCommandsSources");__name(hasDangerousEnvVars,"hasDangerousEnvVars");__name(getDangerousEnvVarsSources,"getDangerousEnvVarsSources")}});var TrustDialog_exports={};__export(TrustDialog_exports,{TrustDialog:()=>TrustDialog});import{homedir as homedir49}from"os";function TrustDialog({onDone,commands}){let{servers:projectServers}=getMcpConfigsByScope("project"),hasMcpServers=Object.keys(projectServers).length>0,hasHooks2=getHooksSources().length>0,bashSettingSources=getBashPermissionSources(),hasApiKeyHelper2=getApiKeyHelperSources().length>0,hasAwsCommands2=getAwsCommandsSources().length>0,hasGcpCommands2=getGcpCommandsSources().length>0,hasOtelHeadersHelper2=getOtelHeadersHelperSources().length>0,hasDangerousEnvVars2=getDangerousEnvVarsSources().length>0,hasSlashCommandBash=commands?.some(command8=>command8.type==="prompt"&&command8.loadedFrom==="commands"&&(command8.source==="projectSettings"||command8.source==="localSettings")&&command8.allowedTools?.some(tool=>tool===BASH_TOOL_NAME||tool.startsWith(BASH_TOOL_NAME+"(")))??!1,hasSkillsBash=commands?.some(command8=>command8.type==="prompt"&&(command8.loadedFrom==="skills"||command8.loadedFrom==="plugin")&&(command8.source==="projectSettings"||command8.source==="localSettings"||command8.source==="plugin")&&command8.allowedTools?.some(tool=>tool===BASH_TOOL_NAME||tool.startsWith(BASH_TOOL_NAME+"(")))??!1,hasAnyBashExecution=bashSettingSources.length>0||hasSlashCommandBash||hasSkillsBash,hasTrustDialogAccepted=checkHasTrustDialogAccepted();import_react191.default.useEffect(()=>{let isHomeDir=homedir49()===getCwd();logEvent("tengu_trust_dialog_shown",{isHomeDir,hasMcpServers,hasHooks:hasHooks2,hasBashExecution:hasAnyBashExecution,hasApiKeyHelper:hasApiKeyHelper2,hasAwsCommands:hasAwsCommands2,hasGcpCommands:hasGcpCommands2,hasOtelHeadersHelper:hasOtelHeadersHelper2,hasDangerousEnvVars:hasDangerousEnvVars2})},[hasMcpServers,hasHooks2,hasAnyBashExecution,hasApiKeyHelper2,hasAwsCommands2,hasGcpCommands2,hasOtelHeadersHelper2,hasDangerousEnvVars2]);function onChange(value){if(value==="exit"){gracefulShutdownSync(1);return}let isHomeDir=homedir49()===getCwd();logEvent("tengu_trust_dialog_accept",{isHomeDir,hasMcpServers,hasHooks:hasHooks2,hasBashExecution:hasAnyBashExecution,hasApiKeyHelper:hasApiKeyHelper2,hasAwsCommands:hasAwsCommands2,hasGcpCommands:hasGcpCommands2,hasOtelHeadersHelper:hasOtelHeadersHelper2,hasDangerousEnvVars:hasDangerousEnvVars2}),isHomeDir?setSessionTrustAccepted(!0):saveCurrentProjectConfig(current=>({...current,hasTrustDialogAccepted:!0})),onDone()}__name(onChange,"onChange");let exitState=useExitOnCtrlCDWithKeybindings(()=>gracefulShutdownSync(1));return useKeybinding("confirm:no",()=>{gracefulShutdownSync(0)},{context:"Confirmation"}),hasTrustDialogAccepted?(setTimeout(onDone),null):(0,import_jsx_runtime329.jsx)(PermissionDialog,{color:"warning",titleColor:"warning",title:"Accessing workspace:",children:(0,import_jsx_runtime329.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,paddingTop:1,children:[(0,import_jsx_runtime329.jsx)(ThemedText,{bold:!0,children:getFsImplementation().cwd()}),(0,import_jsx_runtime329.jsxs)(ThemedText,{children:["Quick safety check: Is this a project you created or one you trust? (Like your own code, a well-known open source project, or work from your team). If not, take a moment to review what","'","s in this folder first."]}),(0,import_jsx_runtime329.jsx)(ThemedText,{children:"Clavue will be able to read, edit, and execute files here."}),(0,import_jsx_runtime329.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime329.jsx)(Link,{url:"https://www.clavue.com",children:"Security guide"})}),(0,import_jsx_runtime329.jsx)(Select,{options:[{label:"Yes, I trust this folder",value:"enable_all"},{label:"No, exit",value:"exit"}],onChange:value=>onChange(value),onCancel:()=>onChange("exit")}),(0,import_jsx_runtime329.jsx)(ThemedText,{dimColor:!0,children:exitState.pending?(0,import_jsx_runtime329.jsxs)(import_jsx_runtime329.Fragment,{children:["Press ",exitState.keyName," again to exit"]}):(0,import_jsx_runtime329.jsx)(import_jsx_runtime329.Fragment,{children:"Enter to confirm \xB7 Esc to cancel"})})]})})}var import_react191,import_jsx_runtime329,init_TrustDialog=__esm({"src/components/TrustDialog/TrustDialog.tsx"(){import_react191=__toESM(require_react());init_analytics();init_state();init_useExitOnCtrlCDWithKeybindings();init_ink();init_useKeybinding();init_config8();init_toolName();init_config11();init_cwd2();init_fsOperations();init_gracefulShutdown();init_CustomSelect();init_PermissionDialog();init_utils14();import_jsx_runtime329=__toESM(require_jsx_runtime());__name(TrustDialog,"TrustDialog")}});var ApproveApiKey_exports={};__export(ApproveApiKey_exports,{ApproveApiKey:()=>ApproveApiKey});function ApproveApiKey({customApiKeyTruncated,onDone}){function onChange(value){switch(value){case"yes":{saveGlobalConfig(current=>({...current,customApiKeyResponses:{...current.customApiKeyResponses,approved:[...current.customApiKeyResponses?.approved??[],customApiKeyTruncated]}})),onDone(!0);break}case"no":{saveGlobalConfig(current=>({...current,customApiKeyResponses:{...current.customApiKeyResponses,rejected:[...current.customApiKeyResponses?.rejected??[],customApiKeyTruncated]}})),onDone(!1);break}}}return __name(onChange,"onChange"),(0,import_jsx_runtime330.jsxs)(Dialog,{title:"Detected a custom API key in your environment",color:"warning",onCancel:()=>onChange("no"),children:[(0,import_jsx_runtime330.jsxs)(ThemedText,{children:[(0,import_jsx_runtime330.jsx)(ThemedText,{bold:!0,children:"KQKD_API_KEY"}),(0,import_jsx_runtime330.jsxs)(ThemedText,{children:[": sk-ant-...",customApiKeyTruncated]})]}),(0,import_jsx_runtime330.jsx)(ThemedText,{children:"Do you want to use this API key?"}),(0,import_jsx_runtime330.jsx)(Select,{defaultValue:"no",defaultFocusValue:"no",options:[{label:"Yes",value:"yes"},{label:(0,import_jsx_runtime330.jsxs)(ThemedText,{children:["No (",(0,import_jsx_runtime330.jsx)(ThemedText,{bold:!0,children:"recommended"}),")"]}),value:"no"}],onChange:value=>onChange(value),onCancel:()=>onChange("no")})]})}var import_jsx_runtime330,init_ApproveApiKey=__esm({"src/components/ApproveApiKey.tsx"(){init_ink();init_config11();init_CustomSelect();init_Dialog();import_jsx_runtime330=__toESM(require_jsx_runtime());__name(ApproveApiKey,"ApproveApiKey")}});var BypassPermissionsModeDialog_exports={};__export(BypassPermissionsModeDialog_exports,{BypassPermissionsModeDialog:()=>BypassPermissionsModeDialog,__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__:()=>__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__});function BypassPermissionsModeDialog({onAccept}){import_react192.default.useEffect(()=>{logEvent("tengu_bypass_permissions_mode_dialog_shown",{})},[]);function onChange(value){switch(value){case"accept":{logEvent("tengu_bypass_permissions_mode_dialog_accept",{}),updateSettingsForSource("userSettings",{skipDangerousModePermissionPrompt:!0}),onAccept();break}case"decline":{gracefulShutdownSync(1);break}}}__name(onChange,"onChange");let handleEscape=(0,import_react192.useCallback)(()=>{gracefulShutdownSync(0)},[]),isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime331.jsxs)(Dialog,{title:isZh7?"\u8B66\u544A:\u514B\u62C9\u7EF4\u5DF2\u8FDB\u5165\u8DF3\u8FC7\u6743\u9650\u6A21\u5F0F":BYPASS_PERMISSIONS_TITLE_EN,color:"error",onCancel:handleEscape,children:[(0,import_jsx_runtime331.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime331.jsx)(ThemedText,{children:isZh7?(0,import_jsx_runtime331.jsxs)(import_jsx_runtime331.Fragment,{children:["\u5728\u8DF3\u8FC7\u6743\u9650\u6A21\u5F0F\u4E0B,\u514B\u62C9\u7EF4\u6267\u884C\u6F5C\u5728\u5371\u9669\u547D\u4EE4\u524D\u4E0D\u4F1A\u518D\u5411\u4F60\u786E\u8BA4\u3002",(0,import_jsx_runtime331.jsx)(Newline,{}),"\u8BE5\u6A21\u5F0F\u5E94\u4EC5\u5728\u7F51\u7EDC\u53D7\u9650\u3001\u53EF\u88AB\u8FD8\u539F\u7684\u6C99\u7BB1\u5BB9\u5668\u6216\u865A\u62DF\u673A\u4E2D\u4F7F\u7528\u3002"]}):(0,import_jsx_runtime331.jsxs)(import_jsx_runtime331.Fragment,{children:["In Bypass Permissions mode, Clavue will not ask for your approval before running potentially dangerous commands.",(0,import_jsx_runtime331.jsx)(Newline,{}),"This mode should only be used in a sandboxed container/VM that has restricted internet access and can easily be restored if damaged."]})}),(0,import_jsx_runtime331.jsx)(ThemedText,{children:isZh7?"\u7EE7\u7EED\u5373\u8868\u793A\u4F60\u63A5\u53D7\u5728\u8DF3\u8FC7\u6743\u9650\u6A21\u5F0F\u4E0B\u4EA7\u751F\u7684\u5168\u90E8\u540E\u679C\u3002":"By proceeding, you accept all responsibility for actions taken while running in Bypass Permissions mode."}),(0,import_jsx_runtime331.jsx)(Link,{url:"https://www.clavue.com"})]}),(0,import_jsx_runtime331.jsx)(Select,{options:[{label:isZh7?"\u5426,\u9000\u51FA":"No, exit",value:"decline"},{label:isZh7?"\u662F,\u6211\u63A5\u53D7":"Yes, I accept",value:"accept"}],onChange:value=>onChange(value)})]})}var import_react192,import_jsx_runtime331,BYPASS_PERMISSIONS_TITLE_EN,__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__,init_BypassPermissionsModeDialog=__esm({"src/components/BypassPermissionsModeDialog.tsx"(){import_react192=__toESM(require_react());init_analytics();init_ink();init_gracefulShutdown();init_settings2();init_uiLocale();init_CustomSelect();init_Dialog();import_jsx_runtime331=__toESM(require_jsx_runtime()),BYPASS_PERMISSIONS_TITLE_EN="WARNING: Clavue running in Bypass Permissions mode";__name(BypassPermissionsModeDialog,"BypassPermissionsModeDialog");__BYPASS_PERMISSIONS_DIALOG_CONTRACT_LITERAL__=BYPASS_PERMISSIONS_TITLE_EN}});var AutoModeOptInDialog_exports={};__export(AutoModeOptInDialog_exports,{AUTO_MODE_DESCRIPTION:()=>AUTO_MODE_DESCRIPTION,AutoModeOptInDialog:()=>AutoModeOptInDialog});function AutoModeOptInDialog({onAccept,onDecline,declineExits}){import_react193.default.useEffect(()=>{logEvent("tengu_auto_mode_opt_in_dialog_shown",{})},[]);function onChange(value){switch(value){case"accept":{logEvent("tengu_auto_mode_opt_in_dialog_accept",{}),updateSettingsForSource("userSettings",{skipAutoPermissionPrompt:!0}),onAccept();break}case"accept-default":{logEvent("tengu_auto_mode_opt_in_dialog_accept_default",{}),updateSettingsForSource("userSettings",{skipAutoPermissionPrompt:!0,permissions:{defaultMode:"auto"}}),onAccept();break}case"decline":{logEvent("tengu_auto_mode_opt_in_dialog_decline",{}),onDecline();break}}}__name(onChange,"onChange");let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime332.jsxs)(Dialog,{title:isZh7?"\u542F\u7528\u81EA\u52A8\u6A21\u5F0F?":"Enable auto mode?",color:"warning",onCancel:onDecline,children:[(0,import_jsx_runtime332.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime332.jsx)(ThemedText,{children:AUTO_MODE_DESCRIPTION}),(0,import_jsx_runtime332.jsx)(Link,{url:"https://www.clavue.com"})]}),(0,import_jsx_runtime332.jsx)(Select,{options:[{label:isZh7?"\u662F,\u5E76\u8BBE\u4E3A\u9ED8\u8BA4\u6A21\u5F0F":"Yes, and make it my default mode",value:"accept-default"},{label:isZh7?"\u662F,\u542F\u7528\u81EA\u52A8\u6A21\u5F0F":"Yes, enable auto mode",value:"accept"},{label:declineExits?isZh7?"\u5426,\u9000\u51FA":"No, exit":isZh7?"\u5426,\u8FD4\u56DE":"No, go back",value:"decline"}],onChange:value=>onChange(value),onCancel:onDecline})]})}var import_react193,import_jsx_runtime332,AUTO_MODE_DESCRIPTION,init_AutoModeOptInDialog=__esm({"src/components/AutoModeOptInDialog.tsx"(){import_react193=__toESM(require_react());init_analytics();init_ink();init_settings2();init_uiLocale();init_CustomSelect();init_Dialog();import_jsx_runtime332=__toESM(require_jsx_runtime()),AUTO_MODE_DESCRIPTION="Auto mode lets Clavue handle permission prompts automatically \u2014 Clavue checks each tool call for risky actions and prompt injection before executing. Actions Clavue identifies as safe are executed, while actions Clavue identifies as risky are blocked and Clavue may try a different approach. Ideal for long-running tasks. Sessions are slightly more expensive. Clavue can make mistakes that allow harmful commands to run, it's recommended to only use in isolated environments. Shift+Tab to change mode.";__name(AutoModeOptInDialog,"AutoModeOptInDialog")}});var ClaudeInChromeOnboarding_exports={};__export(ClaudeInChromeOnboarding_exports,{ClaudeInChromeOnboarding:()=>ClaudeInChromeOnboarding,__CHROME_ONBOARDING_CONTRACT_LITERAL__:()=>__CHROME_ONBOARDING_CONTRACT_LITERAL__});function ClaudeInChromeOnboarding({onDone}){let[isExtensionInstalled,setIsExtensionInstalled]=import_react194.default.useState(!1);import_react194.default.useEffect(()=>{logEvent("tengu_claude_in_chrome_onboarding_shown",{}),isChromeExtensionInstalled().then(setIsExtensionInstalled),saveGlobalConfig(current=>({...current,hasCompletedClaudeInChromeOnboarding:!0}))},[]),useInput((_input,key)=>{key.return&&onDone()});let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime333.jsx)(Dialog,{title:isZh7?"Clavue \u6D4F\u89C8\u5668\u96C6\u6210(Beta)":TITLE_EN,onCancel:onDone,color:"chromeYellow",children:(0,import_jsx_runtime333.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[(0,import_jsx_runtime333.jsxs)(ThemedText,{children:[isZh7?"Clavue \u6D4F\u89C8\u5668\u96C6\u6210\u4E0E Chrome \u6269\u5C55\u534F\u540C\u5DE5\u4F5C,\u8BA9\u4F60\u76F4\u63A5\u5728 Clavue \u4E2D\u64CD\u63A7\u6D4F\u89C8\u5668:\u5BFC\u822A\u7F51\u7AD9\u3001\u586B\u5199\u8868\u5355\u3001\u622A\u5C4F\u3001\u5F55\u5236 GIF,\u4EE5\u53CA\u901A\u8FC7\u63A7\u5236\u53F0\u65E5\u5FD7\u548C\u7F51\u7EDC\u8BF7\u6C42\u8FDB\u884C\u8C03\u8BD5\u3002":`${INTEGRATION_LEAD_EN} You can navigate websites, fill forms, capture screenshots, record GIFs, and debug with console logs and network requests.`,!isExtensionInstalled&&(0,import_jsx_runtime333.jsxs)(import_jsx_runtime333.Fragment,{children:[(0,import_jsx_runtime333.jsx)(Newline,{}),(0,import_jsx_runtime333.jsx)(Newline,{}),isZh7?"\u9700\u8981\u5B89\u88C5 Chrome \u6269\u5C55\u3002\u524D\u5F80 ":"Requires the Chrome extension. Get started at ",(0,import_jsx_runtime333.jsx)(Link,{url:CHROME_EXTENSION_URL2})]})]}),(0,import_jsx_runtime333.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u7AD9\u70B9\u7EA7\u6743\u9650\u7EE7\u627F\u81EA Chrome \u6269\u5C55\u3002\u5728 Chrome \u6269\u5C55\u8BBE\u7F6E\u91CC\u7BA1\u7406\u6743\u9650,\u53EF\u63A7\u5236 Clavue \u5728\u54EA\u4E9B\u7AD9\u70B9\u6D4F\u89C8\u3001\u70B9\u51FB\u6216\u8F93\u5165":"Site-level permissions are inherited from the Chrome extension. Manage permissions in the Chrome extension settings to control which sites Clavue can browse, click, and type on",isExtensionInstalled&&(0,import_jsx_runtime333.jsxs)(import_jsx_runtime333.Fragment,{children:[" ","(",(0,import_jsx_runtime333.jsx)(Link,{url:CHROME_PERMISSIONS_URL2}),")"]}),"."]}),(0,import_jsx_runtime333.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u66F4\u591A\u4FE1\u606F\u8BF7\u4F7F\u7528 ":"For more info, use ",(0,import_jsx_runtime333.jsx)(ThemedText,{bold:!0,color:"chromeYellow",children:"/chrome"})," ",isZh7?"\u6216\u8BBF\u95EE ":"or visit ",(0,import_jsx_runtime333.jsx)(Link,{url:"https://www.clavue.com"})]})]})})}var import_react194,import_jsx_runtime333,CHROME_EXTENSION_URL2,CHROME_PERMISSIONS_URL2,TITLE_EN,INTEGRATION_LEAD_EN,__CHROME_ONBOARDING_CONTRACT_LITERAL__,init_ClaudeInChromeOnboarding=__esm({"src/components/ClaudeInChromeOnboarding.tsx"(){import_react194=__toESM(require_react());init_analytics();init_ink();init_setup2();init_config11();init_uiLocale();init_Dialog();import_jsx_runtime333=__toESM(require_jsx_runtime()),CHROME_EXTENSION_URL2="https://claude.ai/chrome",CHROME_PERMISSIONS_URL2="https://clau.de/chrome/permissions",TITLE_EN="Clavue Browser Integration (Beta)",INTEGRATION_LEAD_EN="Clavue browser integration works with the Chrome extension to let you control your browser directly from Clavue.";__name(ClaudeInChromeOnboarding,"ClaudeInChromeOnboarding");__CHROME_ONBOARDING_CONTRACT_LITERAL__=INTEGRATION_LEAD_EN}});import{appendFileSync as appendFileSync10}from"fs";function completeOnboarding(){saveGlobalConfig(current=>({...current,hasCompletedOnboarding:!0,lastOnboardingVersion:"11.3.13"}))}function showDialog(root2,renderer){return new Promise(resolve64=>{let done=__name(result2=>{resolve64(result2)},"done");root2.render(renderer(done))})}async function exitWithError2(root2,message,beforeExit){return exitWithMessage(root2,message,{color:"error",beforeExit})}async function exitWithMessage(root2,message,options){let{Text:Text2}=await Promise.resolve().then(()=>(init_ink(),ink_exports)),color3=options?.color,exitCode=options?.exitCode??1;root2.render(color3?(0,import_jsx_runtime334.jsx)(Text2,{color:color3,children:message}):(0,import_jsx_runtime334.jsx)(Text2,{children:message})),root2.unmount(),await options?.beforeExit?.(),process.exit(exitCode)}function showSetupDialog(root2,renderer,options){return showDialog(root2,done=>(0,import_jsx_runtime334.jsx)(AppStateProvider,{onChangeAppState:options?.onChangeAppState,children:(0,import_jsx_runtime334.jsx)(KeybindingSetup,{children:renderer(done)})}))}async function renderAndRun(root2,element){root2.render(element),startDeferredPrefetches(),await root2.waitUntilExit(),await gracefulShutdown(0)}async function showSetupScreens(root2,permissionMode,initialToolPermissionContext,allowDangerouslySkipPermissions,commands,claudeInChrome,devChannels,explicitModelOverride=!1,userSpecifiedModel=null){if(isEnvTruthy2(!1)||process.env.IS_DEMO)return{onboardingShown:!1,providerProfileChanged:!1,resolvedProviderProfile:getResolvedCurrentProviderProfile(),nextMainLoopModel:null,nextPermissionMode:void 0,permissionModeNotice:void 0,nextToolPermissionContext:void 0};let config3=getGlobalConfig(),onboardingShown=!1,onboardingResult="continue",nextPermissionMode,permissionModeNotice,nextToolPermissionContext,providerProfileBeforeOnboarding=getResolvedCurrentProviderProfile(),providerProfileChanged=!1,resolvedProviderProfile=providerProfileBeforeOnboarding,nextMainLoopModel=null;{let{needsLanguageOnboarding:needsLanguageOnboarding2}=await Promise.resolve().then(()=>(init_applyUiLocale(),applyUiLocale_exports));if(needsLanguageOnboarding2()){onboardingShown=!0;let{LanguageOnboardingGate:LanguageOnboardingGate2}=await Promise.resolve().then(()=>(init_LanguageOnboardingGate(),LanguageOnboardingGate_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(LanguageOnboardingGate2,{onDone:()=>{done(void 0)}}))}}if(!config3.theme||!config3.hasCompletedOnboarding){onboardingShown=!0;let{Onboarding:Onboarding2}=await Promise.resolve().then(()=>(init_Onboarding(),Onboarding_exports)),onboardingScreenResult=await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(Onboarding2,{initialToolPermissionContext,onDone:result2=>{result2.type==="continue"&&completeOnboarding(),done(result2)}}),{onChangeAppState});onboardingResult=onboardingScreenResult.type,onboardingScreenResult.type==="continue"&&(nextPermissionMode=onboardingScreenResult.permissionMode,permissionModeNotice=onboardingScreenResult.permissionNotice,nextToolPermissionContext=onboardingScreenResult.toolPermissionContext),nextPermissionMode&&(permissionMode=nextPermissionMode),resolvedProviderProfile=getResolvedCurrentProviderProfile();let refreshPlan=getProviderSetupRefreshPlan({providerProfileBeforeOnboarding,resolvedProviderProfile,onboardingResult,explicitModelOverride,userSpecifiedModel});if(providerProfileChanged=refreshPlan.providerProfileChanged,nextMainLoopModel=refreshPlan.nextMainLoopModel,onboardingResult==="exit")return gracefulShutdownSync(0),{onboardingShown,providerProfileChanged,resolvedProviderProfile,nextMainLoopModel,nextPermissionMode,permissionModeNotice,nextToolPermissionContext}}if(!isEnvTruthy2(process.env.CLAUBBIT)){if(!checkHasTrustDialogAccepted()){let{TrustDialog:TrustDialog2}=await Promise.resolve().then(()=>(init_TrustDialog(),TrustDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(TrustDialog2,{commands,onDone:done}))}setSessionTrustAccepted(!0),resetGrowthBook(),initializeGrowthBook(),getSystemContext();let{errors:allErrors}=getSettingsWithAllErrors();if(allErrors.length===0&&await handleMcpjsonServerApprovals(root2),await shouldShowClaudeMdExternalIncludesWarning()){let externalIncludes=getExternalClaudeMdIncludes(await getMemoryFiles(!0)),{ClaudeMdExternalIncludesDialog:ClaudeMdExternalIncludesDialog2}=await Promise.resolve().then(()=>(init_ClaudeMdExternalIncludesDialog(),ClaudeMdExternalIncludesDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(ClaudeMdExternalIncludesDialog2,{onDone:done,isStandaloneDialog:!0,externalIncludes}))}}if(updateGithubRepoPathMapping(),applyConfigEnvironmentVariables(),setImmediate(()=>initializeTelemetryAfterTrust()),await isQualifiedForGrove()){let{GroveDialog:GroveDialog2}=await Promise.resolve().then(()=>(init_Grove(),Grove_exports));if(await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(GroveDialog2,{showIfAlreadyViewed:!1,location:onboardingShown?"onboarding":"policy_update_modal",onDone:done}))==="escape")return logEvent("tengu_grove_policy_exited",{}),gracefulShutdownSync(0),{onboardingShown,providerProfileChanged,resolvedProviderProfile,nextMainLoopModel,nextToolPermissionContext}}if(process.env.ANTHROPIC_API_KEY&&!isRunningOnHomespace()){let customApiKeyTruncated=normalizeApiKeyForConfig(process.env.ANTHROPIC_API_KEY);if(getCustomApiKeyStatus(customApiKeyTruncated)==="new"){let{ApproveApiKey:ApproveApiKey2}=await Promise.resolve().then(()=>(init_ApproveApiKey(),ApproveApiKey_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(ApproveApiKey2,{customApiKeyTruncated,onDone:done}),{onChangeAppState})}}if((permissionMode==="bypassPermissions"||allowDangerouslySkipPermissions)&&!hasSkipDangerousModePermissionPrompt()){let{BypassPermissionsModeDialog:BypassPermissionsModeDialog2}=await Promise.resolve().then(()=>(init_BypassPermissionsModeDialog(),BypassPermissionsModeDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(BypassPermissionsModeDialog2,{onAccept:done}))}if(permissionMode==="auto"&&!hasAutoModeOptIn()){let{AutoModeOptInDialog:AutoModeOptInDialog2}=await Promise.resolve().then(()=>(init_AutoModeOptInDialog(),AutoModeOptInDialog_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(AutoModeOptInDialog2,{onAccept:done,onDecline:()=>gracefulShutdownSync(1),declineExits:!0}))}if(claudeInChrome&&!getGlobalConfig().hasCompletedClaudeInChromeOnboarding){let{ClaudeInChromeOnboarding:ClaudeInChromeOnboarding2}=await Promise.resolve().then(()=>(init_ClaudeInChromeOnboarding(),ClaudeInChromeOnboarding_exports));await showSetupDialog(root2,done=>(0,import_jsx_runtime334.jsx)(ClaudeInChromeOnboarding2,{onDone:done}))}return{onboardingShown,providerProfileChanged,resolvedProviderProfile,nextMainLoopModel,nextPermissionMode,permissionModeNotice,nextToolPermissionContext}}function getRenderContext(exitOnCtrlC){let lastFlickerTime=0,baseOptions=getBaseRenderOptions(exitOnCtrlC);baseOptions.stdin&&logEvent("tengu_stdin_interactive",{});let fpsTracker=new FpsTracker,stats2=createStatsStore();setStatsStore(stats2);let frameTimingLogPath=process.env.CLAUDE_CODE_FRAME_TIMING_LOG;return{getFpsMetrics:__name(()=>fpsTracker.getMetrics(),"getFpsMetrics"),stats:stats2,renderOptions:{...baseOptions,onFrame:__name(event=>{if(fpsTracker.record(event.durationMs),stats2.observe("frame_duration_ms",event.durationMs),frameTimingLogPath&&event.phases){let line=JSON.stringify({total:event.durationMs,...event.phases,rss:process.memoryUsage.rss(),cpu:process.cpuUsage()})+`
11346
11346
  `;appendFileSync10(frameTimingLogPath,line)}if(!isSynchronizedOutputSupported())for(let flicker of event.flickers){if(flicker.reason==="resize")continue;let now3=Date.now();now3-lastFlickerTime<1e3&&logEvent("tengu_flicker",{desiredHeight:flicker.desiredHeight,actualHeight:flicker.availableHeight,reason:flicker.reason}),lastFlickerTime=now3}},"onFrame")}}}var import_jsx_runtime334,init_interactiveHelpers=__esm({"src/interactiveHelpers.tsx"(){init_analytics();init_gracefulShutdown();init_state();init_stats4();init_context();init_init2();init_capabilities();init_KeybindingProviderSetup();init_main3();init_growthbook();init_grove();init_mcpServerApproval();init_AppState();init_onChangeAppState();init_authPortable();init_claudemd();init_config11();init_terminalPreference();init_envUtils();init_fpsTracker();init_githubRepoPathMapping();init_managedEnv();init_providerProfiles();init_providerStartup();init_renderOptions();init_allErrors();init_settings2();import_jsx_runtime334=__toESM(require_jsx_runtime());__name(completeOnboarding,"completeOnboarding");__name(showDialog,"showDialog");__name(exitWithError2,"exitWithError");__name(exitWithMessage,"exitWithMessage");__name(showSetupDialog,"showSetupDialog");__name(renderAndRun,"renderAndRun");__name(showSetupScreens,"showSetupScreens");__name(getRenderContext,"getRenderContext")}});function treeify(obj,options={}){let{showValues=!0,hideFunctions=!1,themeName="dark",treeCharColors={}}=options,lines=[],visited=new WeakSet;function colorize2(text3,colorKey){return colorKey?color(colorKey,themeName)(text3):text3}__name(colorize2,"colorize");function growBranch(node,prefix,_isLast,depth=0){if(typeof node=="string"){lines.push(prefix+colorize2(node,treeCharColors.value));return}if(typeof node!="object"||node===null){if(showValues){let valueStr=String(node);lines.push(prefix+colorize2(valueStr,treeCharColors.value))}return}if(visited.has(node)){lines.push(prefix+colorize2("[Circular]",treeCharColors.value));return}visited.add(node);let keys3=Object.keys(node).filter(key=>{let value=node[key];return!(hideFunctions&&typeof value=="function")});keys3.forEach((key,index)=>{let value=node[key],isLastKey=index===keys3.length-1,nodePrefix=depth===0&&index===0?"":prefix,treeChar=isLastKey?DEFAULT_TREE_CHARS.lastBranch:DEFAULT_TREE_CHARS.branch,coloredTreeChar=colorize2(treeChar,treeCharColors.treeChar),coloredKey=key.trim()===""?"":colorize2(key,treeCharColors.key),line=nodePrefix+coloredTreeChar+(coloredKey?" "+coloredKey:""),shouldAddColon=key.trim()!=="";if(value&&typeof value=="object"&&visited.has(value)){let coloredValue=colorize2("[Circular]",treeCharColors.value);lines.push(line+(shouldAddColon?": ":line?" ":"")+coloredValue)}else if(value&&typeof value=="object"&&!Array.isArray(value)){lines.push(line);let continuationChar=isLastKey?DEFAULT_TREE_CHARS.empty:DEFAULT_TREE_CHARS.line,coloredContinuation=colorize2(continuationChar,treeCharColors.treeChar),nextPrefix=nodePrefix+coloredContinuation+" ";growBranch(value,nextPrefix,isLastKey,depth+1)}else if(Array.isArray(value))lines.push(line+(shouldAddColon?": ":line?" ":"")+"[Array("+value.length+")]");else if(showValues){let valueStr=typeof value=="function"?"[Function]":String(value),coloredValue=colorize2(valueStr,treeCharColors.value);line+=(shouldAddColon?": ":line?" ":"")+coloredValue,lines.push(line)}else lines.push(line)})}__name(growBranch,"growBranch");let keys2=Object.keys(obj);if(keys2.length===0)return colorize2("(empty)",treeCharColors.value);if(keys2.length===1&&keys2[0]!==void 0&&keys2[0].trim()===""&&typeof obj[keys2[0]]=="string"){let firstKey=keys2[0],coloredTreeChar=colorize2(DEFAULT_TREE_CHARS.lastBranch,treeCharColors.treeChar),coloredValue=colorize2(obj[firstKey],treeCharColors.value);return coloredTreeChar+" "+coloredValue}return growBranch(obj,"",!0),lines.join(`
11347
11347
  `)}var DEFAULT_TREE_CHARS,init_treeify=__esm({"src/utils/treeify.ts"(){init_figures();init_color();DEFAULT_TREE_CHARS={branch:figures_default.lineUpDownRight,lastBranch:figures_default.lineUpRight,line:figures_default.lineVertical,empty:" "};__name(treeify,"treeify")}});function buildNestedTree(errors){let tree={};return errors.forEach(error40=>{if(!error40.path){tree[""]=error40.message;return}let pathParts=error40.path.split("."),modifiedPath=error40.path;if(error40.invalidValue!==null&&error40.invalidValue!==void 0&&pathParts.length>0){let newPathParts=[];for(let i3=0;i3<pathParts.length;i3++){let part=pathParts[i3];if(!part)continue;let numericPart=parseInt(part,10);if(!isNaN(numericPart)&&i3===pathParts.length-1){let displayValue;typeof error40.invalidValue=="string"?displayValue=`"${error40.invalidValue}"`:error40.invalidValue===null?displayValue="null":error40.invalidValue===void 0?displayValue="undefined":displayValue=String(error40.invalidValue),newPathParts.push(displayValue)}else newPathParts.push(part)}modifiedPath=newPathParts.join(".")}setWith_default(tree,modifiedPath,error40.message,Object)}),tree}function ValidationErrorsList({errors}){let[themeName]=useTheme();if(errors.length===0)return null;let errorsByFile=errors.reduce((acc,error40)=>{let file2=error40.file||"(file not specified)";return acc[file2]||(acc[file2]=[]),acc[file2].push(error40),acc},{}),sortedFiles=Object.keys(errorsByFile).sort();return(0,import_jsx_runtime335.jsx)(ThemedBox_default,{flexDirection:"column",children:sortedFiles.map(file2=>{let fileErrors=errorsByFile[file2]||[];fileErrors.sort((a2,b3)=>!a2.path&&b3.path?-1:a2.path&&!b3.path?1:(a2.path||"").localeCompare(b3.path||""));let errorTree=buildNestedTree(fileErrors),suggestionPairs=new Map;fileErrors.forEach(error40=>{if(error40.suggestion||error40.docLink){let key=`${error40.suggestion||""}|${error40.docLink||""}`;suggestionPairs.has(key)||suggestionPairs.set(key,{suggestion:error40.suggestion,docLink:error40.docLink})}});let treeOutput=treeify(errorTree,{showValues:!0,themeName,treeCharColors:{treeChar:"inactive",key:"text",value:"inactive"}});return(0,import_jsx_runtime335.jsxs)(ThemedBox_default,{flexDirection:"column",children:[(0,import_jsx_runtime335.jsx)(ThemedText,{children:file2}),(0,import_jsx_runtime335.jsx)(ThemedBox_default,{marginLeft:1,children:(0,import_jsx_runtime335.jsx)(ThemedText,{dimColor:!0,children:treeOutput})}),suggestionPairs.size>0&&(0,import_jsx_runtime335.jsx)(ThemedBox_default,{flexDirection:"column",marginTop:1,children:Array.from(suggestionPairs.values()).map((pair,index)=>(0,import_jsx_runtime335.jsxs)(ThemedBox_default,{flexDirection:"column",marginBottom:1,children:[pair.suggestion&&(0,import_jsx_runtime335.jsx)(ThemedText,{dimColor:!0,wrap:"wrap",children:pair.suggestion}),pair.docLink&&(0,import_jsx_runtime335.jsxs)(ThemedText,{dimColor:!0,wrap:"wrap",children:["Learn more: ",pair.docLink]})]},`suggestion-pair-${index}`))})]},file2)})})}var import_jsx_runtime335,init_ValidationErrorsList=__esm({"src/components/ValidationErrorsList.tsx"(){init_setWith();init_ink();init_treeify();import_jsx_runtime335=__toESM(require_jsx_runtime());__name(buildNestedTree,"buildNestedTree");__name(ValidationErrorsList,"ValidationErrorsList")}});var InvalidSettingsDialog_exports={};__export(InvalidSettingsDialog_exports,{InvalidSettingsDialog:()=>InvalidSettingsDialog});function InvalidSettingsDialog({settingsErrors,onContinue,onExit:onExit2}){function handleSelect(value){value==="exit"?onExit2():onContinue()}__name(handleSelect,"handleSelect");let isZh7=resolveUiLocale()==="zh-CN";return(0,import_jsx_runtime336.jsxs)(Dialog,{title:isZh7?"\u8BBE\u7F6E\u9519\u8BEF":"Settings Error",onCancel:onExit2,color:"warning",children:[(0,import_jsx_runtime336.jsx)(ValidationErrorsList,{errors:settingsErrors}),(0,import_jsx_runtime336.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u51FA\u9519\u7684\u6587\u4EF6\u4F1A\u88AB\u6574\u4F53\u8DF3\u8FC7,\u800C\u4E0D\u662F\u53EA\u8DF3\u8FC7\u5176\u4E2D\u9519\u8BEF\u7684\u8BBE\u7F6E\u9879\u3002":"Files with errors are skipped entirely, not just the invalid settings."}),(0,import_jsx_runtime336.jsx)(Select,{options:[{label:isZh7?"\u9000\u51FA\u5E76\u624B\u52A8\u4FEE\u590D":"Exit and fix manually",value:"exit"},{label:isZh7?"\u4E0D\u52A0\u8F7D\u8FD9\u4E9B\u8BBE\u7F6E\u7EE7\u7EED":"Continue without these settings",value:"continue"}],onChange:handleSelect})]})}var import_jsx_runtime336,init_InvalidSettingsDialog=__esm({"src/components/InvalidSettingsDialog.tsx"(){init_ink();init_uiLocale();init_CustomSelect();init_Dialog();init_ValidationErrorsList();import_jsx_runtime336=__toESM(require_jsx_runtime());__name(InvalidSettingsDialog,"InvalidSettingsDialog")}});function useTeleportResume(source){let[isResuming,setIsResuming]=(0,import_react195.useState)(!1),[error40,setError]=(0,import_react195.useState)(null),[selectedSession,setSelectedSession]=(0,import_react195.useState)(null),resumeSession=(0,import_react195.useCallback)(async session2=>{setIsResuming(!0),setError(null),setSelectedSession(session2),logEvent("tengu_teleport_resume_session",{source,session_id:session2.id});try{let result2=await teleportResumeCodeSession(session2.id);return setTeleportedSessionInfo({sessionId:session2.id}),setIsResuming(!1),result2}catch(err2){let teleportError={message:err2 instanceof TeleportOperationError?err2.message:errorMessage(err2),formattedMessage:err2 instanceof TeleportOperationError?err2.formattedMessage:void 0,isOperationError:err2 instanceof TeleportOperationError};return setError(teleportError),setIsResuming(!1),null}},[source]),clearError=(0,import_react195.useCallback)(()=>{setError(null)},[]);return{resumeSession,isResuming,error:error40,selectedSession,clearError}}var import_react195,init_useTeleportResume=__esm({"src/hooks/useTeleportResume.tsx"(){import_react195=__toESM(require_react());init_state();init_analytics();init_errors2();init_teleport();__name(useTeleportResume,"useTeleportResume")}});function getUpdatedString(){return resolveUiLocale()==="zh-CN"?"\u66F4\u65B0":"Updated"}function ResumeTask({onSelect,onCancel,isEmbedded=!1}){let{rows}=useTerminalSize(),[sessions3,setSessions]=(0,import_react196.useState)([]),[currentRepo,setCurrentRepo]=(0,import_react196.useState)(null),[loading,setLoading]=(0,import_react196.useState)(!0),[loadErrorType,setLoadErrorType]=(0,import_react196.useState)(null),[retrying,setRetrying]=(0,import_react196.useState)(!1),[hasCompletedTeleportErrorFlow,setHasCompletedTeleportErrorFlow]=(0,import_react196.useState)(!1),[focusedIndex,setFocusedIndex]=(0,import_react196.useState)(1),escKey=useShortcutDisplay("confirm:no","Confirmation","Esc"),loadSessions=(0,import_react196.useCallback)(async()=>{try{setLoading(!0),setLoadErrorType(null);let detectedRepo=await detectCurrentRepository();setCurrentRepo(detectedRepo),logForDebugging(`Current repository: ${detectedRepo||"not detected"}`);let codeSessions=await fetchCodeSessionsFromSessionsAPI(),filteredSessions=codeSessions;detectedRepo&&(filteredSessions=codeSessions.filter(session2=>session2.repo?`${session2.repo.owner.login}/${session2.repo.name}`===detectedRepo:!1),logForDebugging(`Filtered ${filteredSessions.length} sessions for repo ${detectedRepo} from ${codeSessions.length} total`));let sortedSessions=[...filteredSessions].sort((a2,b3)=>{let dateA=new Date(a2.updated_at);return new Date(b3.updated_at).getTime()-dateA.getTime()});setSessions(sortedSessions)}catch(err2){let errorMessage3=err2 instanceof Error?err2.message:String(err2);logForDebugging(`Error loading code sessions: ${errorMessage3}`),setLoadErrorType(determineErrorType(errorMessage3))}finally{setLoading(!1),setRetrying(!1)}},[]),handleRetry=__name(()=>{setRetrying(!0),loadSessions()},"handleRetry");useKeybinding("confirm:no",onCancel,{context:"Confirmation"}),useInput((input2,key)=>{if(key.ctrl&&input2==="r"&&loadErrorType){handleRetry();return}if(loadErrorType!==null&&key.return){onCancel();return}});let handleErrorComplete=(0,import_react196.useCallback)(()=>{setHasCompletedTeleportErrorFlow(!0),loadSessions()},[setHasCompletedTeleportErrorFlow,loadSessions]);if(!hasCompletedTeleportErrorFlow)return(0,import_jsx_runtime337.jsx)(TeleportError,{onComplete:handleErrorComplete});let isZh7=resolveUiLocale()==="zh-CN";if(loading)return(0,import_jsx_runtime337.jsxs)(ThemedBox_default,{flexDirection:"column",padding:1,children:[(0,import_jsx_runtime337.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime337.jsx)(Spinner,{}),(0,import_jsx_runtime337.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6B63\u5728\u52A0\u8F7D\u514B\u62C9\u7EF4\u4F1A\u8BDD\u2026":"Loading Clavue sessions\u2026"})]}),(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:retrying?isZh7?"\u6B63\u5728\u91CD\u8BD5\u2026":"Retrying\u2026":isZh7?"\u6B63\u5728\u62C9\u53D6\u4F60\u7684\u514B\u62C9\u7EF4\u4F1A\u8BDD\u2026":"Fetching your Clavue sessions\u2026"})]});if(loadErrorType)return(0,import_jsx_runtime337.jsxs)(ThemedBox_default,{flexDirection:"column",padding:1,children:[(0,import_jsx_runtime337.jsx)(ThemedText,{bold:!0,color:"error",children:isZh7?"\u52A0\u8F7D\u514B\u62C9\u7EF4\u4F1A\u8BDD\u51FA\u9519":"Error loading Clavue sessions"}),renderErrorSpecificGuidance(loadErrorType,isZh7),(0,import_jsx_runtime337.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u6309 ":"Press ",(0,import_jsx_runtime337.jsx)(ThemedText,{bold:!0,children:"Ctrl+R"}),isZh7?" \u91CD\u8BD5 \xB7 \u6309 ":" to retry \xB7 Press ",(0,import_jsx_runtime337.jsx)(ThemedText,{bold:!0,children:escKey}),isZh7?" \u53D6\u6D88":" to cancel"]})]});if(sessions3.length===0)return(0,import_jsx_runtime337.jsxs)(ThemedBox_default,{flexDirection:"column",padding:1,children:[(0,import_jsx_runtime337.jsxs)(ThemedText,{bold:!0,children:[isZh7?"\u672A\u627E\u5230\u514B\u62C9\u7EF4\u4F1A\u8BDD":"No Clavue sessions found",currentRepo&&(0,import_jsx_runtime337.jsx)(ThemedText,{children:isZh7?`(${currentRepo})`:` for ${currentRepo}`})]}),(0,import_jsx_runtime337.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime337.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u6309 ":"Press ",(0,import_jsx_runtime337.jsx)(ThemedText,{bold:!0,children:escKey}),isZh7?" \u53D6\u6D88":" to cancel"]})})]});let sessionMetadata=sessions3.map(session2=>({...session2,timeString:formatRelativeTime(new Date(session2.updated_at))})),updatedLabel=getUpdatedString(),maxTimeStringLength=Math.max(updatedLabel.length,...sessionMetadata.map(meta=>meta.timeString.length)),options=sessionMetadata.map(({timeString,title,id})=>({label:`${timeString.padEnd(maxTimeStringLength," ")} ${title}`,value:id})),layoutOverhead=7,maxVisibleOptions=Math.max(1,isEmbedded?Math.min(sessions3.length,5,rows-6-layoutOverhead):Math.min(sessions3.length,rows-1-layoutOverhead)),maxHeight=maxVisibleOptions+layoutOverhead,showScrollPosition=sessions3.length>maxVisibleOptions;return(0,import_jsx_runtime337.jsxs)(ThemedBox_default,{flexDirection:"column",padding:1,height:maxHeight,children:[(0,import_jsx_runtime337.jsxs)(ThemedText,{bold:!0,children:[isZh7?"\u9009\u62E9\u8981\u6062\u590D\u7684\u4F1A\u8BDD":"Select a session to resume",showScrollPosition&&(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:isZh7?` (${focusedIndex} / ${sessions3.length})`:` (${focusedIndex} of ${sessions3.length})`}),currentRepo&&(0,import_jsx_runtime337.jsxs)(ThemedText,{dimColor:!0,children:[" (",currentRepo,")"]}),":"]}),(0,import_jsx_runtime337.jsxs)(ThemedBox_default,{flexDirection:"column",marginTop:1,flexGrow:1,children:[(0,import_jsx_runtime337.jsx)(ThemedBox_default,{marginLeft:2,children:(0,import_jsx_runtime337.jsxs)(ThemedText,{bold:!0,children:[updatedLabel.padEnd(maxTimeStringLength," "),SPACE_BETWEEN_TABLE_COLUMNS,isZh7?"\u4F1A\u8BDD\u6807\u9898":"Session Title"]})}),(0,import_jsx_runtime337.jsx)(Select,{visibleOptionCount:maxVisibleOptions,options,onChange:value=>{let session2=sessions3.find(s2=>s2.id===value);session2&&onSelect(session2)},onFocus:value=>{let index=options.findIndex(o2=>o2.value===value);index>=0&&setFocusedIndex(index+1)}})]}),(0,import_jsx_runtime337.jsx)(ThemedBox_default,{flexDirection:"row",children:(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:(0,import_jsx_runtime337.jsxs)(Byline,{children:[(0,import_jsx_runtime337.jsx)(KeyboardShortcutHint,{shortcut:"\u2191/\u2193",action:"select"}),(0,import_jsx_runtime337.jsx)(KeyboardShortcutHint,{shortcut:"Enter",action:"confirm"}),(0,import_jsx_runtime337.jsx)(ConfigurableShortcutHint,{action:"confirm:no",context:"Confirmation",fallback:"Esc",description:"cancel"})]})})})]})}function determineErrorType(errorMessage3){let message=errorMessage3.toLowerCase();return message.includes("fetch")||message.includes("network")||message.includes("timeout")?"network":message.includes("auth")||message.includes("token")||message.includes("permission")||message.includes("oauth")||message.includes("not authenticated")||message.includes("/login")||message.includes("console account")||message.includes("403")?"auth":message.includes("api")||message.includes("rate limit")||message.includes("500")||message.includes("529")?"api":"other"}function renderErrorSpecificGuidance(errorType,isZh7){switch(errorType){case"network":return(0,import_jsx_runtime337.jsx)(ThemedBox_default,{marginY:1,flexDirection:"column",children:(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u8BF7\u68C0\u67E5\u7F51\u7EDC\u8FDE\u63A5":"Check your internet connection"})});case"auth":return(0,import_jsx_runtime337.jsxs)(ThemedBox_default,{marginY:1,flexDirection:"column",children:[(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u4F20\u9001\u529F\u80FD\u9700\u8981\u4F7F\u7528\u5B98\u65B9\u8D26\u53F7":"Teleport requires an official account"}),(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:isZh7?(0,import_jsx_runtime337.jsxs)(import_jsx_runtime337.Fragment,{children:["\u8FD0\u884C ",(0,import_jsx_runtime337.jsx)(ThemedText,{bold:!0,children:"/login"})," \u5E76\u9009\u62E9\u5B98\u65B9\u8D26\u53F7\u8BA2\u9605\u8BA4\u8BC1"]}):(0,import_jsx_runtime337.jsxs)(import_jsx_runtime337.Fragment,{children:["Run ",(0,import_jsx_runtime337.jsx)(ThemedText,{bold:!0,children:"/login"})," and select official account subscription auth"]})})]});case"api":return(0,import_jsx_runtime337.jsx)(ThemedBox_default,{marginY:1,flexDirection:"column",children:(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u62B1\u6B49,\u514B\u62C9\u7EF4\u9047\u5230\u4E86\u9519\u8BEF":"Sorry, Clavue encountered an error"})});case"other":return(0,import_jsx_runtime337.jsx)(ThemedBox_default,{marginY:1,flexDirection:"row",children:(0,import_jsx_runtime337.jsx)(ThemedText,{dimColor:!0,children:isZh7?"\u62B1\u6B49,\u514B\u62C9\u7EF4\u9047\u5230\u4E86\u9519\u8BEF":"Sorry, Clavue encountered an error"})})}}var import_react196,import_jsx_runtime337,SPACE_BETWEEN_TABLE_COLUMNS,init_ResumeTask=__esm({"src/components/ResumeTask.tsx"(){import_react196=__toESM(require_react());init_useTerminalSize();init_api2();init_ink();init_useKeybinding();init_useShortcutDisplay();init_debug();init_detectRepository();init_format();init_uiLocale();init_ConfigurableShortcutHint();init_CustomSelect();init_Byline();init_KeyboardShortcutHint();init_Spinner2();init_TeleportError();import_jsx_runtime337=__toESM(require_jsx_runtime());__name(getUpdatedString,"getUpdatedString");SPACE_BETWEEN_TABLE_COLUMNS=" ";__name(ResumeTask,"ResumeTask");__name(determineErrorType,"determineErrorType");__name(renderErrorSpecificGuidance,"renderErrorSpecificGuidance")}});var TeleportResumeWrapper_exports={};__export(TeleportResumeWrapper_exports,{TeleportResumeWrapper:()=>TeleportResumeWrapper});function TeleportResumeWrapper({onComplete,onCancel,onError,isEmbedded=!1,source}){let{resumeSession,isResuming,error:error40,selectedSession}=useTeleportResume(source);(0,import_react197.useEffect)(()=>{logEvent("tengu_teleport_started",{source})},[source]);let handleSelect=__name(async session2=>{let result2=await resumeSession(session2);result2?onComplete(result2):error40&&onError&&onError(error40.message,error40.formattedMessage)},"handleSelect"),handleCancel=__name(()=>{logEvent("tengu_teleport_cancelled",{}),onCancel()},"handleCancel");useKeybinding("app:interrupt",handleCancel,{context:"Global",isActive:!!error40&&!onError});let isZh7=resolveUiLocale()==="zh-CN";return isResuming&&selectedSession?(0,import_jsx_runtime338.jsxs)(ThemedBox_default,{flexDirection:"column",padding:1,children:[(0,import_jsx_runtime338.jsxs)(ThemedBox_default,{flexDirection:"row",children:[(0,import_jsx_runtime338.jsx)(Spinner,{}),(0,import_jsx_runtime338.jsx)(ThemedText,{bold:!0,children:isZh7?"\u6B63\u5728\u6062\u590D\u4F1A\u8BDD\u2026":"Resuming session\u2026"})]}),(0,import_jsx_runtime338.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u6B63\u5728\u52A0\u8F7D "${selectedSession.title}"\u2026`:`Loading "${selectedSession.title}"\u2026`})]}):error40&&!onError?(0,import_jsx_runtime338.jsxs)(ThemedBox_default,{flexDirection:"column",padding:1,children:[(0,import_jsx_runtime338.jsx)(ThemedText,{bold:!0,color:"error",children:isZh7?"\u6062\u590D\u4F1A\u8BDD\u5931\u8D25":"Failed to resume session"}),(0,import_jsx_runtime338.jsx)(ThemedText,{dimColor:!0,children:error40.message}),(0,import_jsx_runtime338.jsx)(ThemedBox_default,{marginTop:1,children:(0,import_jsx_runtime338.jsxs)(ThemedText,{dimColor:!0,children:[isZh7?"\u6309 ":"Press ",(0,import_jsx_runtime338.jsx)(ThemedText,{bold:!0,children:"Esc"}),isZh7?" \u53D6\u6D88":" to cancel"]})})]}):(0,import_jsx_runtime338.jsx)(ResumeTask,{onSelect:handleSelect,onCancel:handleCancel,isEmbedded})}var import_react197,import_jsx_runtime338,init_TeleportResumeWrapper=__esm({"src/components/TeleportResumeWrapper.tsx"(){import_react197=__toESM(require_react());init_analytics();init_useTeleportResume();init_ink();init_useKeybinding();init_uiLocale();init_ResumeTask();init_Spinner2();import_jsx_runtime338=__toESM(require_jsx_runtime());__name(TeleportResumeWrapper,"TeleportResumeWrapper")}});var TeleportRepoMismatchDialog_exports={};__export(TeleportRepoMismatchDialog_exports,{TeleportRepoMismatchDialog:()=>TeleportRepoMismatchDialog});function TeleportRepoMismatchDialog({targetRepo,initialPaths,onSelectPath,onCancel}){let[availablePaths,setAvailablePaths]=(0,import_react198.useState)(initialPaths),[errorMessage3,setErrorMessage]=(0,import_react198.useState)(null),[validating,setValidating]=(0,import_react198.useState)(!1),handleChange4=(0,import_react198.useCallback)(async value=>{if(value==="cancel"){onCancel();return}if(setValidating(!0),setErrorMessage(null),await validateRepoAtPath(value,targetRepo)){onSelectPath(value);return}removePathFromRepo(targetRepo,value);let updatedPaths=availablePaths.filter(p=>p!==value);setAvailablePaths(updatedPaths),setValidating(!1),setErrorMessage(resolveUiLocale()==="zh-CN"?`${getDisplayPath(value)} \u5DF2\u4E0D\u518D\u5305\u542B\u6B63\u786E\u7684\u4ED3\u5E93,\u8BF7\u9009\u62E9\u5176\u4ED6\u8DEF\u5F84\u3002`:`${getDisplayPath(value)} no longer contains the correct repository. Select another path.`)},[targetRepo,availablePaths,onSelectPath,onCancel]),isZh7=resolveUiLocale()==="zh-CN",options=[...availablePaths.map(path36=>({label:(0,import_jsx_runtime339.jsxs)(ThemedText,{children:[isZh7?"\u4F7F\u7528 ":"Use ",(0,import_jsx_runtime339.jsx)(ThemedText,{bold:!0,children:getDisplayPath(path36)})]}),value:path36})),{label:isZh7?"\u53D6\u6D88":"Cancel",value:"cancel"}];return(0,import_jsx_runtime339.jsx)(Dialog,{title:isZh7?"\u4F20\u9001\u81F3\u4ED3\u5E93":"Teleport to Repo",onCancel,color:"background",children:availablePaths.length>0?(0,import_jsx_runtime339.jsxs)(import_jsx_runtime339.Fragment,{children:[(0,import_jsx_runtime339.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[errorMessage3&&(0,import_jsx_runtime339.jsx)(ThemedText,{color:"error",children:errorMessage3}),(0,import_jsx_runtime339.jsxs)(ThemedText,{children:[isZh7?"\u5728 ":"Open Clavue in ",(0,import_jsx_runtime339.jsx)(ThemedText,{bold:!0,children:targetRepo}),isZh7?" \u4E2D\u6253\u5F00\u514B\u62C9\u7EF4:":":"]})]}),validating?(0,import_jsx_runtime339.jsxs)(ThemedBox_default,{children:[(0,import_jsx_runtime339.jsx)(Spinner,{}),(0,import_jsx_runtime339.jsxs)(ThemedText,{children:[" ",isZh7?"\u6B63\u5728\u6821\u9A8C\u4ED3\u5E93\u2026":"Validating repository\u2026"]})]}):(0,import_jsx_runtime339.jsx)(Select,{options,onChange:value=>{handleChange4(value)}})]}):(0,import_jsx_runtime339.jsxs)(ThemedBox_default,{flexDirection:"column",gap:1,children:[errorMessage3&&(0,import_jsx_runtime339.jsx)(ThemedText,{color:"error",children:errorMessage3}),(0,import_jsx_runtime339.jsx)(ThemedText,{dimColor:!0,children:isZh7?`\u8BF7\u5728 ${targetRepo} \u7684\u672C\u5730\u68C0\u51FA\u76EE\u5F55\u4E2D\u8FD0\u884C clavue --teleport`:`Run clavue --teleport from a checkout of ${targetRepo}`})]})})}var import_react198,import_jsx_runtime339,init_TeleportRepoMismatchDialog=__esm({"src/components/TeleportRepoMismatchDialog.tsx"(){import_react198=__toESM(require_react());init_ink();init_file2();init_githubRepoPathMapping();init_uiLocale();init_CustomSelect();init_Dialog();init_Spinner2();import_jsx_runtime339=__toESM(require_jsx_runtime());__name(TeleportRepoMismatchDialog,"TeleportRepoMismatchDialog")}});async function launchInvalidSettingsDialog(root2,props){let{InvalidSettingsDialog:InvalidSettingsDialog2}=await Promise.resolve().then(()=>(init_InvalidSettingsDialog(),InvalidSettingsDialog_exports));return showSetupDialog(root2,done=>(0,import_jsx_runtime340.jsx)(InvalidSettingsDialog2,{settingsErrors:props.settingsErrors,onContinue:done,onExit:props.onExit}))}async function launchTeleportResumeWrapper(root2){let{TeleportResumeWrapper:TeleportResumeWrapper2}=await Promise.resolve().then(()=>(init_TeleportResumeWrapper(),TeleportResumeWrapper_exports));return showSetupDialog(root2,done=>(0,import_jsx_runtime340.jsx)(TeleportResumeWrapper2,{onComplete:done,onCancel:()=>done(null),source:"cliArg"}))}async function launchTeleportRepoMismatchDialog(root2,props){let{TeleportRepoMismatchDialog:TeleportRepoMismatchDialog2}=await Promise.resolve().then(()=>(init_TeleportRepoMismatchDialog(),TeleportRepoMismatchDialog_exports));return showSetupDialog(root2,done=>(0,import_jsx_runtime340.jsx)(TeleportRepoMismatchDialog2,{targetRepo:props.targetRepo,initialPaths:props.initialPaths,onSelectPath:done,onCancel:()=>done(null)}))}var import_jsx_runtime340,init_dialogLaunchers=__esm({"src/dialogLaunchers.tsx"(){init_interactiveHelpers();import_jsx_runtime340=__toESM(require_jsx_runtime());__name(launchInvalidSettingsDialog,"launchInvalidSettingsDialog");__name(launchTeleportResumeWrapper,"launchTeleportResumeWrapper");__name(launchTeleportRepoMismatchDialog,"launchTeleportRepoMismatchDialog")}});var init_bundled2=__esm({"src/plugins/bundled/index.ts"(){}});function handlePluginCommandError(error40,command8,plugin2){logError2(error40);let operation=plugin2?`${command8} plugin "${plugin2}"`:command8==="disable-all"?"disable all plugins":`${command8} plugins`;console.error(`${figures_default.cross} Failed to ${operation}: ${errorMessage(error40)}`);let telemetryFields=plugin2?(()=>{let{name,marketplace}=parsePluginIdentifier(plugin2);return{_PROTO_plugin_name:name,...marketplace&&{_PROTO_marketplace_name:marketplace},...buildPluginTelemetryFields(name,marketplace,getManagedPluginNames())}})():{};logEvent("tengu_plugin_command_failed",{command:command8,error_category:classifyPluginCommandError(error40),...telemetryFields}),process.exit(1)}async function installPlugin(plugin2,scope="user"){try{console.log(`Installing plugin "${plugin2}"...`);let result2=await installPluginOp(plugin2,scope);if(!result2.success)throw new Error(result2.message);console.log(`${figures_default.tick} ${result2.message}`);let{name,marketplace}=parsePluginIdentifier(result2.pluginId||plugin2);logEvent("tengu_plugin_installed_cli",{_PROTO_plugin_name:name,...marketplace&&{_PROTO_marketplace_name:marketplace},scope:result2.scope||scope,install_source:"cli-explicit",...buildPluginTelemetryFields(name,marketplace,getManagedPluginNames())}),process.exit(0)}catch(error40){handlePluginCommandError(error40,"install",plugin2)}}async function uninstallPlugin(plugin2,scope="user",keepData=!1){try{let result2=await uninstallPluginOp(plugin2,scope,!keepData);if(!result2.success)throw new Error(result2.message);console.log(`${figures_default.tick} ${result2.message}`);let{name,marketplace}=parsePluginIdentifier(result2.pluginId||plugin2);logEvent("tengu_plugin_uninstalled_cli",{_PROTO_plugin_name:name,...marketplace&&{_PROTO_marketplace_name:marketplace},scope:result2.scope||scope,...buildPluginTelemetryFields(name,marketplace,getManagedPluginNames())}),process.exit(0)}catch(error40){handlePluginCommandError(error40,"uninstall",plugin2)}}async function enablePlugin(plugin2,scope){try{let result2=await enablePluginOp(plugin2,scope);if(!result2.success)throw new Error(result2.message);console.log(`${figures_default.tick} ${result2.message}`);let{name,marketplace}=parsePluginIdentifier(result2.pluginId||plugin2);logEvent("tengu_plugin_enabled_cli",{_PROTO_plugin_name:name,...marketplace&&{_PROTO_marketplace_name:marketplace},scope:result2.scope,...buildPluginTelemetryFields(name,marketplace,getManagedPluginNames())}),process.exit(0)}catch(error40){handlePluginCommandError(error40,"enable",plugin2)}}async function disablePlugin(plugin2,scope){try{let result2=await disablePluginOp(plugin2,scope);if(!result2.success)throw new Error(result2.message);console.log(`${figures_default.tick} ${result2.message}`);let{name,marketplace}=parsePluginIdentifier(result2.pluginId||plugin2);logEvent("tengu_plugin_disabled_cli",{_PROTO_plugin_name:name,...marketplace&&{_PROTO_marketplace_name:marketplace},scope:result2.scope,...buildPluginTelemetryFields(name,marketplace,getManagedPluginNames())}),process.exit(0)}catch(error40){handlePluginCommandError(error40,"disable",plugin2)}}async function disableAllPlugins(){try{let result2=await disableAllPluginsOp();if(!result2.success)throw new Error(result2.message);console.log(`${figures_default.tick} ${result2.message}`),logEvent("tengu_plugin_disabled_all_cli",{}),process.exit(0)}catch(error40){handlePluginCommandError(error40,"disable-all")}}async function updatePluginCli(plugin2,scope){try{writeToStdout(`Checking for updates for plugin "${plugin2}" at ${scope} scope\u2026
11348
11348
  `);let result2=await updatePluginOp(plugin2,scope);if(!result2.success)throw new Error(result2.message);if(writeToStdout(`${figures_default.tick} ${result2.message}
@@ -12693,7 +12693,7 @@ ${customInstructions}`:customInstructions}}else logForDebugging(`[teammate] Cust
12693
12693
  Remote/SSH/teleport are not available as an Ink shell.
12694
12694
  Plan: docs/ink-to-pager-migration-plan.md
12695
12695
 
12696
- `),await gracefulShutdown(1);return}if(process.exitCode!==void 0){logForDebugging("Graceful shutdown initiated, skipping further initialization");return}if(initializeLspServerManager(),!isNonInteractiveSession){let{errors}=getSettingsWithErrors(),nonMcpErrors=errors.filter(e2=>!e2.mcpErrorMetadata);nonMcpErrors.length>0&&await launchInvalidSettingsDialog(root2,{settingsErrors:nonMcpErrors,onExit:__name(()=>gracefulShutdownSync(1),"onExit")})}let bgRefreshThrottleMs=getFeatureValue_CACHED_MAY_BE_STALE("tengu_cicada_nap_ms",0),lastPrefetched=getGlobalConfig().startupPrefetchedAt??0;if(isBareMode()||bgRefreshThrottleMs>0&&Date.now()-lastPrefetched<bgRefreshThrottleMs)logForDebugging(`Skipping startup prefetches, last ran ${Math.round((Date.now()-lastPrefetched)/1e3)}s ago`),resolveFastModeStatusFromCache();else{let lastPrefetchedInfo=lastPrefetched>0?` last ran ${Math.round((Date.now()-lastPrefetched)/1e3)}s ago`:"";logForDebugging(`Starting background startup prefetches${lastPrefetchedInfo}`),checkQuotaStatus().catch(error40=>logError2(error40)),fetchBootstrapData(),prefetchPassesEligibility(),getFeatureValue_CACHED_MAY_BE_STALE("tengu_miraculo_the_bard",!1)?resolveFastModeStatusFromCache():prefetchFastModeStatus(),bgRefreshThrottleMs>0&&saveGlobalConfig(current=>({...current,startupPrefetchedAt:Date.now()}))}isNonInteractiveSession||refreshExampleCommands();let{servers:existingMcpConfigs}=await mcpConfigPromise;logForDebugging(`[STARTUP] MCP configs resolved in ${mcpConfigResolvedMs}ms (awaited at +${Date.now()-mcpConfigStart}ms)`);let allMcpConfigs={...existingMcpConfigs,...dynamicMcpConfig},sdkMcpConfigs={},regularMcpConfigs={};for(let[name,config3]of Object.entries(allMcpConfigs)){let typedConfig=config3;typedConfig.type==="sdk"?sdkMcpConfigs[name]=typedConfig:regularMcpConfigs[name]=typedConfig}profileCheckpoint("action_mcp_configs_loaded");let localMcpPromise=isNonInteractiveSession?Promise.resolve({clients:[],tools:[],commands:[]}):prefetchAllMcpResources(regularMcpConfigs),claudeaiMcpPromise=isNonInteractiveSession?Promise.resolve({clients:[],tools:[],commands:[]}):claudeaiConfigPromise.then(configs=>Object.keys(configs).length>0?prefetchAllMcpResources(configs):{clients:[],tools:[],commands:[]}),mcpPromise=Promise.all([localMcpPromise,claudeaiMcpPromise]).then(([local,claudeai])=>({clients:[...local.clients,...\u0063laudeai.clients],tools:uniqBy_default([...local.tools,...\u0063laudeai.tools],"name"),commands:uniqBy_default([...local.commands,...\u0063laudeai.commands],"name")})),hooksPromise=initOnly||init2||maintenance||isNonInteractiveSession||options.continue||options.resume?null:processSessionStartHooks("startup",{agentType:mainThreadAgentDefinition?.agentType,model:resolvedInitialModel}),hookMessages=[];mcpPromise.catch(()=>{});let mcpClients=[],mcpTools=[],mcpCommands=[],{thinkingEnabled,thinkingConfig}=resolveThinkingConfig({thinkingOption:options.thinking,maxThinkingTokensOption:options.maxThinkingTokens,env:process.env},shouldEnableThinkingByDefault);logForDiagnosticsNoPII("info","started",{version:"11.3.12",is_native_binary:isInBundledMode()}),registerCleanup(async()=>{logForDiagnosticsNoPII("info","exited")}),logTenguInit({hasInitialPrompt:!!prompt,hasStdin:!!inputPrompt,verbose,debug:debug4,debugToStderr,print:print??!1,outputFormat:outputFormat??"text",inputFormat:inputFormat??"text",numAllowedTools:allowedTools.length,numDisallowedTools:disallowedTools.length,mcpClientCount:Object.keys(allMcpConfigs).length,worktreeEnabled,skipWebFetchPreflight:getInitialSettings().skipWebFetchPreflight,githubActionInputs:process.env.GITHUB_ACTION_INPUTS,dangerouslySkipPermissionsPassed:dangerouslySkipPermissions??!1,permissionMode,modeIsBypass:permissionMode==="bypassPermissions",allowDangerouslySkipPermissionsPassed:allowDangerouslySkipPermissions,systemPromptFlag:systemPrompt?options.systemPromptFile?"file":"flag":void 0,appendSystemPromptFlag:appendSystemPrompt?options.appendSystemPromptFile?"file":"flag":void 0,thinkingConfig,assistantActivationPath:void 0}),logContextMetrics(regularMcpConfigs,toolPermissionContext),logPermissionContextForAnts(null,"initialization"),logManagedSettings(),registerSession().then(registered2=>{registered2&&(sessionNameArg&&updateSessionName(sessionNameArg),countConcurrentSessions().then(count4=>{count4>=2&&logEvent("tengu_concurrent_sessions",{num_sessions:count4})}))}),isBareMode()||(isNonInteractiveSession?(await initializeVersionedPlugins(),profileCheckpoint("action_after_plugins_init"),cleanupOrphanedPluginVersionsInBackground().then(()=>getGlobExclusionsForPluginCache())):initializeVersionedPlugins().then(async()=>{profileCheckpoint("action_after_plugins_init"),await cleanupOrphanedPluginVersionsInBackground(),getGlobExclusionsForPluginCache()}));let setupTrigger=initOnly||init2?"init":maintenance?"maintenance":null;if(initOnly){applyConfigEnvironmentVariables(),await processSetupHooks("init",{forceSyncExecution:!0}),await processSessionStartHooks("startup",{forceSyncExecution:!0}),gracefulShutdownSync(0);return}if(isNonInteractiveSession){shouldSetFormattedOutputFlag({outputFormat})&&setHasFormattedOutput(!0),applyConfigEnvironmentVariables(),initializeTelemetryAfterTrust();let sessionStartHooksPromise=options.continue||options.resume||teleport||setupTrigger?void 0:processSessionStartHooks("startup");sessionStartHooksPromise?.catch(()=>{}),profileCheckpoint("before_validateForceLoginOrg");let orgValidation=await validateForceLoginOrg();orgValidation.valid===!1&&(process.stderr.write(orgValidation.message+`
12696
+ `),await gracefulShutdown(1);return}if(process.exitCode!==void 0){logForDebugging("Graceful shutdown initiated, skipping further initialization");return}if(initializeLspServerManager(),!isNonInteractiveSession){let{errors}=getSettingsWithErrors(),nonMcpErrors=errors.filter(e2=>!e2.mcpErrorMetadata);nonMcpErrors.length>0&&await launchInvalidSettingsDialog(root2,{settingsErrors:nonMcpErrors,onExit:__name(()=>gracefulShutdownSync(1),"onExit")})}let bgRefreshThrottleMs=getFeatureValue_CACHED_MAY_BE_STALE("tengu_cicada_nap_ms",0),lastPrefetched=getGlobalConfig().startupPrefetchedAt??0;if(isBareMode()||bgRefreshThrottleMs>0&&Date.now()-lastPrefetched<bgRefreshThrottleMs)logForDebugging(`Skipping startup prefetches, last ran ${Math.round((Date.now()-lastPrefetched)/1e3)}s ago`),resolveFastModeStatusFromCache();else{let lastPrefetchedInfo=lastPrefetched>0?` last ran ${Math.round((Date.now()-lastPrefetched)/1e3)}s ago`:"";logForDebugging(`Starting background startup prefetches${lastPrefetchedInfo}`),checkQuotaStatus().catch(error40=>logError2(error40)),fetchBootstrapData(),prefetchPassesEligibility(),getFeatureValue_CACHED_MAY_BE_STALE("tengu_miraculo_the_bard",!1)?resolveFastModeStatusFromCache():prefetchFastModeStatus(),bgRefreshThrottleMs>0&&saveGlobalConfig(current=>({...current,startupPrefetchedAt:Date.now()}))}isNonInteractiveSession||refreshExampleCommands();let{servers:existingMcpConfigs}=await mcpConfigPromise;logForDebugging(`[STARTUP] MCP configs resolved in ${mcpConfigResolvedMs}ms (awaited at +${Date.now()-mcpConfigStart}ms)`);let allMcpConfigs={...existingMcpConfigs,...dynamicMcpConfig},sdkMcpConfigs={},regularMcpConfigs={};for(let[name,config3]of Object.entries(allMcpConfigs)){let typedConfig=config3;typedConfig.type==="sdk"?sdkMcpConfigs[name]=typedConfig:regularMcpConfigs[name]=typedConfig}profileCheckpoint("action_mcp_configs_loaded");let localMcpPromise=isNonInteractiveSession?Promise.resolve({clients:[],tools:[],commands:[]}):prefetchAllMcpResources(regularMcpConfigs),claudeaiMcpPromise=isNonInteractiveSession?Promise.resolve({clients:[],tools:[],commands:[]}):claudeaiConfigPromise.then(configs=>Object.keys(configs).length>0?prefetchAllMcpResources(configs):{clients:[],tools:[],commands:[]}),mcpPromise=Promise.all([localMcpPromise,claudeaiMcpPromise]).then(([local,claudeai])=>({clients:[...local.clients,...\u0063laudeai.clients],tools:uniqBy_default([...local.tools,...\u0063laudeai.tools],"name"),commands:uniqBy_default([...local.commands,...\u0063laudeai.commands],"name")})),hooksPromise=initOnly||init2||maintenance||isNonInteractiveSession||options.continue||options.resume?null:processSessionStartHooks("startup",{agentType:mainThreadAgentDefinition?.agentType,model:resolvedInitialModel}),hookMessages=[];mcpPromise.catch(()=>{});let mcpClients=[],mcpTools=[],mcpCommands=[],{thinkingEnabled,thinkingConfig}=resolveThinkingConfig({thinkingOption:options.thinking,maxThinkingTokensOption:options.maxThinkingTokens,env:process.env},shouldEnableThinkingByDefault);logForDiagnosticsNoPII("info","started",{version:"11.3.13",is_native_binary:isInBundledMode()}),registerCleanup(async()=>{logForDiagnosticsNoPII("info","exited")}),logTenguInit({hasInitialPrompt:!!prompt,hasStdin:!!inputPrompt,verbose,debug:debug4,debugToStderr,print:print??!1,outputFormat:outputFormat??"text",inputFormat:inputFormat??"text",numAllowedTools:allowedTools.length,numDisallowedTools:disallowedTools.length,mcpClientCount:Object.keys(allMcpConfigs).length,worktreeEnabled,skipWebFetchPreflight:getInitialSettings().skipWebFetchPreflight,githubActionInputs:process.env.GITHUB_ACTION_INPUTS,dangerouslySkipPermissionsPassed:dangerouslySkipPermissions??!1,permissionMode,modeIsBypass:permissionMode==="bypassPermissions",allowDangerouslySkipPermissionsPassed:allowDangerouslySkipPermissions,systemPromptFlag:systemPrompt?options.systemPromptFile?"file":"flag":void 0,appendSystemPromptFlag:appendSystemPrompt?options.appendSystemPromptFile?"file":"flag":void 0,thinkingConfig,assistantActivationPath:void 0}),logContextMetrics(regularMcpConfigs,toolPermissionContext),logPermissionContextForAnts(null,"initialization"),logManagedSettings(),registerSession().then(registered2=>{registered2&&(sessionNameArg&&updateSessionName(sessionNameArg),countConcurrentSessions().then(count4=>{count4>=2&&logEvent("tengu_concurrent_sessions",{num_sessions:count4})}))}),isBareMode()||(isNonInteractiveSession?(await initializeVersionedPlugins(),profileCheckpoint("action_after_plugins_init"),cleanupOrphanedPluginVersionsInBackground().then(()=>getGlobExclusionsForPluginCache())):initializeVersionedPlugins().then(async()=>{profileCheckpoint("action_after_plugins_init"),await cleanupOrphanedPluginVersionsInBackground(),getGlobExclusionsForPluginCache()}));let setupTrigger=initOnly||init2?"init":maintenance?"maintenance":null;if(initOnly){applyConfigEnvironmentVariables(),await processSetupHooks("init",{forceSyncExecution:!0}),await processSessionStartHooks("startup",{forceSyncExecution:!0}),gracefulShutdownSync(0);return}if(isNonInteractiveSession){shouldSetFormattedOutputFlag({outputFormat})&&setHasFormattedOutput(!0),applyConfigEnvironmentVariables(),initializeTelemetryAfterTrust();let sessionStartHooksPromise=options.continue||options.resume||teleport||setupTrigger?void 0:processSessionStartHooks("startup");sessionStartHooksPromise?.catch(()=>{}),profileCheckpoint("before_validateForceLoginOrg");let orgValidation=await validateForceLoginOrg();orgValidation.valid===!1&&(process.stderr.write(orgValidation.message+`
12697
12697
  `),process.exit(1));let commandsHeadless=filterCommandsForHeadless(commands,{disableSlashCommands}),defaultState=getDefaultAppState(),headlessInitialState={...defaultState,mcp:{...defaultState.mcp,clients:mcpClients,commands:mcpCommands,tools:mcpTools},toolPermissionContext,effortValue:parseEffortValue(options.effort)??getInitialEffortSetting(),...isFastModeEnabled()&&{fastMode:getInitialFastModeSetting(effectiveModel??null)},...isAdvisorEnabled()&&advisorModel&&{advisorModel}},headlessStore=createStore(headlessInitialState,onChangeAppState);(toolPermissionContext.mode==="bypassPermissions"||allowDangerouslySkipPermissions)&&checkAndDisableBypassPermissions(toolPermissionContext),verifyAutoModeGateAccess(toolPermissionContext,headlessStore.getState().fastMode).then(({updateContext})=>{headlessStore.setState(prev=>{let nextCtx=updateContext(prev.toolPermissionContext);return nextCtx===prev.toolPermissionContext?prev:{...prev,toolPermissionContext:nextCtx}})}),options.sessionPersistence===!1&&setSessionPersistenceDisabled(!0),setSdkBetas(filterAllowedSdkBetas(betas));let connectMcpBatch=__name((configs,label2)=>Object.keys(configs).length===0?Promise.resolve():(headlessStore.setState(prev=>({...prev,mcp:{...prev.mcp,clients:[...prev.mcp.clients,...Object.entries(configs).map(([name,config3])=>({name,type:"pending",config:config3}))]}})),getMcpToolsCommandsAndResources(({client:client2,tools:tools2,commands:commands2})=>{headlessStore.setState(prev=>({...prev,mcp:{...prev.mcp,clients:prev.mcp.clients.some(c4=>c4.name===client2.name)?prev.mcp.clients.map(c4=>c4.name===client2.name?client2:c4):[...prev.mcp.clients,client2],tools:uniqBy_default([...prev.mcp.tools,...tools2],"name"),commands:uniqBy_default([...prev.mcp.commands,...commands2],"name")}}))},configs).catch(err2=>logForDebugging(`[MCP] ${label2} connect error: ${err2}`))),"connectMcpBatch");profileCheckpoint("before_connectMcp");{let budgetRaw=process.env.CLAVUE_HEADLESS_MCP_BUDGET_MS,budgetMs=budgetRaw===void 0||budgetRaw===""?8e3:parseInt(budgetRaw,10),regularConnect=connectMcpBatch(regularMcpConfigs,"regular");if(!Number.isFinite(budgetMs)||budgetMs<=0)await regularConnect;else{let budgetTimer,timedOut=await Promise.race([regularConnect.then(()=>!1),new Promise(resolve64=>{budgetTimer=setTimeout(()=>resolve64(!0),budgetMs)})]);budgetTimer&&clearTimeout(budgetTimer),timedOut&&logForDebugging(`[MCP] regular servers not ready after ${budgetMs}ms \u2014 proceeding with print; background connect continues`)}}profileCheckpoint("after_connectMcp");let CLAUDE_AI_MCP_TIMEOUT_MS=5e3,claudeaiConnect=claudeaiConfigPromise.then(claudeaiConfigs=>{if(Object.keys(claudeaiConfigs).length>0){let claudeaiSigs=new Set;for(let config3 of Object.values(claudeaiConfigs)){let sig=getMcpServerSignature(config3);sig&&claudeaiSigs.add(sig)}let suppressed=new Set;for(let[name,config3]of Object.entries(regularMcpConfigs)){if(!name.startsWith("plugin:"))continue;let sig=getMcpServerSignature(config3);sig&&claudeaiSigs.has(sig)&&suppressed.add(name)}if(suppressed.size>0){logForDebugging(`[MCP] Lazy dedup: suppressing ${suppressed.size} plugin server(s) that duplicate claude.ai connectors: ${[...suppressed].join(", ")}`);for(let c4 of headlessStore.getState().mcp.clients)!suppressed.has(c4.name)||c4.type!=="connected"||(c4.client.onclose=void 0,clearServerCache(c4.name,c4.config).catch(()=>{}));headlessStore.setState(prev=>{let{clients,tools:tools2,commands:commands2,resources}=prev.mcp;clients=clients.filter(c4=>!suppressed.has(c4.name)),tools2=tools2.filter(t8=>!t8.mcpInfo||!suppressed.has(t8.mcpInfo.serverName));for(let name of suppressed)commands2=excludeCommandsByServer(commands2,name),resources=excludeResourcesByServer(resources,name);return{...prev,mcp:{...prev.mcp,clients,tools:tools2,commands:commands2,resources}}})}}let nonPluginConfigs=pickBy_default(regularMcpConfigs,(_2,n4)=>!n4.startsWith("plugin:")),{servers:dedupedClaudeAi}=dedupClaudeAiMcpServers(claudeaiConfigs,nonPluginConfigs);return connectMcpBatch(dedupedClaudeAi,"claudeai")}),claudeaiTimer,claudeaiTimedOut=await Promise.race([claudeaiConnect.then(()=>!1),new Promise(resolve64=>{claudeaiTimer=setTimeout(r2=>r2(!0),CLAUDE_AI_MCP_TIMEOUT_MS,resolve64)})]);claudeaiTimer&&clearTimeout(claudeaiTimer),claudeaiTimedOut&&logForDebugging(`[MCP] claude.ai connectors not ready after ${CLAUDE_AI_MCP_TIMEOUT_MS}ms \u2014 proceeding; background connection continues`),profileCheckpoint("after_connectMcp_claudeai"),isBareMode()||(startDeferredPrefetches(),Promise.resolve().then(()=>(init_backgroundHousekeeping(),backgroundHousekeeping_exports)).then(m3=>m3.startBackgroundHousekeeping())),logSessionTelemetry(),profileCheckpoint("before_print_import");let{runHeadless:runHeadless2}=await Promise.resolve().then(()=>(init_print(),print_exports));profileCheckpoint("after_print_import"),await runHeadless2(inputPrompt,()=>headlessStore.getState(),headlessStore.setState,commandsHeadless,tools,sdkMcpConfigs,agentDefinitions.activeAgents,{continue:options.continue,resume:options.resume,verbose,outputFormat,jsonSchema,permissionPromptToolName:options.permissionPromptTool,allowedTools,thinkingConfig,maxTurns:options.maxTurns,maxBudgetUsd:options.maxBudgetUsd,taskBudget:options.taskBudget?{total:options.taskBudget}:void 0,systemPrompt,appendSystemPrompt,userSpecifiedModel:effectiveModel,fallbackModel:userSpecifiedFallbackModel,teleport,sdkUrl,replayUserMessages:effectiveReplayUserMessages,includePartialMessages:effectiveIncludePartialMessages,forkSession:options.forkSession||!1,resumeSessionAt:options.resumeSessionAt||void 0,rewindFiles:options.rewindFiles,enableAuthStatus:options.enableAuthStatus,agent:agentCli,workload:options.workload,setupTrigger:setupTrigger??void 0,sessionStartHooksPromise});return}logEvent("tengu_startup_manual_model_config",{cli_flag:options.model,env_var:process.env.ANTHROPIC_MODEL,settings_file:(getInitialSettings()||{}).model,subscriptionType:getSubscriptionType(),agent:agentSetting});let deprecationWarning=getModelDeprecationWarning(resolvedInitialModel),initialNotifications=buildInitialNotifications({permissionModeNotification,deprecationWarning,overlyBroadBashPermissions},{uniq,plural}),agentSwarmsEnabled=isAgentSwarmsEnabled(),effectiveToolPermissionContext=resolveEffectiveToolPermissionContext({toolPermissionContext,agentSwarmsEnabled,planModeRequired:agentSwarmsEnabled&&getTeammateUtils().isPlanModeRequired()}),initialIsBriefOnly=!1,fullRemoteControlCcrMirror=resolveReplBridgeFlags({remoteControl,remoteControlAtStartup:getRemoteControlAtStartup2(),kairosEnabled,ccrMirrorFeatureEnabled:!1,isCcrMirrorEnabledImpl:__name(()=>{let{isCcrMirrorEnabled:isCcrMirrorEnabled2}=(init_bridgeEnabled(),__toCommonJS(bridgeEnabled_exports));return isCcrMirrorEnabled2()},"isCcrMirrorEnabledImpl")}),fullRemoteControl=fullRemoteControlCcrMirror.fullRemoteControl,ccrMirrorEnabled=fullRemoteControlCcrMirror.ccrMirrorEnabled,initialState={settings:getInitialSettings(),tasks:{},agentNameRegistry:new Map,verbose:verbose??getGlobalConfig().verbose??!1,mainLoopModel:initialMainLoopModel,mainLoopModelForSession:null,providerContinuity:null,isBriefOnly:initialIsBriefOnly,expandedView:getGlobalConfig().showSpinnerTree?"teammates":getGlobalConfig().showExpandedTodos?"tasks":"none",showTeammateMessagePreview:isAgentSwarmsEnabled()?!1:void 0,selectedIPAgentIndex:-1,coordinatorTaskIndex:-1,viewSelectionMode:"none",footerSelection:null,toolPermissionContext:effectiveToolPermissionContext,agent:mainThreadAgentDefinition?.agentType,agentDefinitions,mcp:{clients:[],tools:[],commands:[],resources:{},pluginReconnectKey:0},plugins:{enabled:[],disabled:[],commands:[],errors:[],installationStatus:{marketplaces:[],plugins:[]},needsRefresh:!1},statusLineText:void 0,kairosEnabled,remoteSessionUrl:void 0,remoteCwd:void 0,remoteConnectionStatus:"connecting",remoteBackgroundTaskCount:0,replBridgeEnabled:fullRemoteControl||ccrMirrorEnabled,replBridgeExplicit:remoteControl,replBridgeOutboundOnly:ccrMirrorEnabled,replBridgeConnected:!1,replBridgeSessionActive:!1,replBridgeReconnecting:!1,replBridgeConnectUrl:void 0,replBridgeSessionUrl:void 0,replBridgeEnvironmentId:void 0,replBridgeSessionId:void 0,replBridgeError:void 0,replBridgeInitialName:remoteControlName,showRemoteCallout:!1,notifications:{current:null,queue:initialNotifications},elicitation:{queue:[]},todos:{},remoteAgentTaskSuggestions:[],fileHistory:{snapshots:[],trackedFiles:new Set,snapshotSequence:0},attribution:createEmptyAttributionState(),thinkingEnabled,promptSuggestionEnabled:shouldEnablePromptSuggestion(),sessionHooks:new Map,inbox:{messages:[]},promptSuggestion:{text:null,promptId:null,shownAt:0,acceptedAt:0,generationRequestId:null},speculation:IDLE_SPECULATION_STATE,speculationSessionTimeSavedMs:0,skillImprovement:{suggestion:null},workerSandboxPermissions:{queue:[],selectedIndex:0},pendingWorkerRequest:null,pendingSandboxRequest:null,authVersion:0,initialMessage:inputPrompt?{message:createUserMessage({content:String(inputPrompt)})}:null,effortValue:parseEffortValue(options.effort)??getInitialEffortSetting(),activeOverlays:new Set,fastMode:getInitialFastModeSetting(resolvedInitialModel),...isAdvisorEnabled()&&advisorModel&&{advisorModel},teamContext:computeInitialTeamContext?.()};inputPrompt&&addToHistory(String(inputPrompt));let initialTools=mcpTools;saveGlobalConfig(current=>({...current,numStartups:(current.numStartups??0)+1})),setImmediate(()=>{logStartupTelemetry(),logSessionTelemetry()});let sessionUploaderPromise=null,uploaderReady=sessionUploaderPromise?sessionUploaderPromise.then(mod=>mod.createSessionTurnUploader()).catch(()=>null):null,sessionConfig={debug:debug4||debugToStderr,commands:[...commands,...mcpCommands],initialTools,mcpClients,autoConnectIdeFlag:ide2,mainThreadAgentDefinition,disableSlashCommands,dynamicMcpConfig,strictMcpConfig,systemPrompt,appendSystemPrompt,taskListId,thinkingConfig,...uploaderReady&&{onTurnComplete:__name(messages=>{uploaderReady.then(uploader=>uploader?.(messages))},"onTurnComplete")}},resumeContext={modeApi:coordinatorModeModule,mainThreadAgentDefinition,agentDefinitions,currentCwd:currentCwd2,cliAgents,initialState};if(options.continue){let resumeSucceeded=!1;try{let resumeStart=performance.now(),{clearSessionCaches:clearSessionCaches2}=await Promise.resolve().then(()=>(init_caches(),caches_exports));clearSessionCaches2();let result2=await loadConversationForResume(void 0,void 0);if(!result2)return logEvent("tengu_continue",{success:!1}),await exitWithError2(root2,"No conversation found to continue");let loaded=await processResumedConversation(result2,{forkSession:!!options.forkSession,includeAttribution:!0,transcriptPath:result2.fullPath},resumeContext);loaded.restoredAgentDef&&(mainThreadAgentDefinition=loaded.restoredAgentDef),logEvent("tengu_continue",{success:!0,resume_duration_ms:Math.round(performance.now()-resumeStart)}),resumeSucceeded=!0,await launchRepl(root2,{getFpsMetrics,stats:stats2,initialState:loaded.initialState},{...sessionConfig,mainThreadAgentDefinition:loaded.restoredAgentDef??mainThreadAgentDefinition,initialMessages:loaded.messages,initialFileHistorySnapshots:loaded.fileHistorySnapshots,initialContentReplacements:loaded.contentReplacements,initialAgentName:loaded.agentName,initialAgentColor:loaded.agentColor},renderAndRun)}catch(error40){resumeSucceeded||logEvent("tengu_continue",{success:!1}),logError2(error40),process.exit(1)}}else if(options.resume||options.fromPr||teleport||remote!==null){let{clearSessionCaches:clearSessionCaches2}=await Promise.resolve().then(()=>(init_caches(),caches_exports));clearSessionCaches2();let messages=null,processedResume,maybeSessionId=validateUuid2(options.resume),searchTerm,matchedLog=null,filterByPr;if(options.fromPr&&(options.fromPr===!0?filterByPr=!0:typeof options.fromPr=="string"&&(filterByPr=options.fromPr)),options.resume&&typeof options.resume=="string"&&!maybeSessionId){let trimmedValue=options.resume.trim();if(trimmedValue){let matches2=await searchSessionsByCustomTitle(trimmedValue,{exact:!0});matches2.length===1?(matchedLog=matches2[0],maybeSessionId=getSessionIdFromLog(matchedLog)??null):searchTerm=trimmedValue}}if((remote!==null||teleport)&&(await waitForPolicyLimitsToLoad(),!isPolicyAllowed("allow_remote_sessions")))return await exitWithError2(root2,"Error: Remote sessions are disabled by your organization's policy.",()=>gracefulShutdown(1));if(remote!==null){let hasInitialPrompt=remote.length>0,isRemoteTuiEnabled=getFeatureValue_CACHED_MAY_BE_STALE("tengu_remote_backend",!1);if(!isRemoteTuiEnabled&&!hasInitialPrompt)return await exitWithError2(root2,`Error: --remote requires a description.
12698
12698
  Usage: clavue --remote "your task description"`,()=>gracefulShutdown(1));logEvent("tengu_remote_create_session",{has_initial_prompt:String(hasInitialPrompt)});let currentBranch=await getBranch(),createdSession=await teleportToRemoteWithErrorHandling(root2,hasInitialPrompt?remote:null,new AbortController().signal,currentBranch||void 0);if(!createdSession)return logEvent("tengu_remote_create_session_error",{error:"unable_to_create_session"}),await exitWithError2(root2,"Error: Unable to create remote session",()=>gracefulShutdown(1));logEvent("tengu_remote_create_session_success",{session_id:createdSession.id}),isRemoteTuiEnabled||(process.stdout.write(`Created remote session: ${createdSession.title}
12699
12699
  `),process.stdout.write(`View: ${getRemoteSessionUrl(createdSession.id)}?m=0
@@ -12707,7 +12707,7 @@ Usage: clavue --remote "your task description"`,()=>gracefulShutdown(1));logEven
12707
12707
  Run: clavue --resume
12708
12708
  Or: clavue --resume <session-uuid>
12709
12709
  Plan: docs/ink-to-pager-migration-plan.md (Phase 1b)
12710
- `)),await gracefulShutdown(1);return}}else{let pendingHookMessages=hooksPromise&&hookMessages.length===0?hooksPromise:void 0;profileCheckpoint("action_after_hooks");let deepLinkBanner=null,initialMessages=deepLinkBanner?[deepLinkBanner,...hookMessages]:hookMessages.length>0?hookMessages:void 0;await launchRepl(root2,{getFpsMetrics,stats:stats2,initialState},{...sessionConfig,initialMessages,pendingHookMessages},renderAndRun)}}).version("11.3.12 (Clavue)","-v, --version","Output the version number"),program2.option("-w, --worktree [name]","Create a new git worktree for this session (optionally specify a name)"),program2.option("--tmux","Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux."),program2.option("--split <direction>","Open Clavue in a tmux/zellij/wezterm pane: right, left, down, up"),program2.option("--size <fraction>","Fraction a --split pane takes (0.2 to 0.95)"),program2.option("-g, --goto [file:line:column]","Queue a file for the pager / CLAVUE_IPC; omit the path to reseed the last mutation"),program2.option("--status","Print whether a clavue window is live (ipc / phase / last mutation) and exit"),program2.option("--timing","Record pager launch stages; alone, print the last recording"),canUserConfigureAdvisor()&&program2.addOption(new Option("--advisor <model>","Enable the server-side advisor tool with the specified model (alias or full ID).").hideHelp()),program2.addOption(new Option("--enable-auto-mode","Opt in to auto mode")),program2.addOption(new Option("--messaging-socket-path <path>","Unix domain socket path for the UDS messaging server (defaults to a tmp path)")),program2.addOption(new Option("--agent-id <id>","Teammate agent ID").hideHelp()),program2.addOption(new Option("--agent-name <name>","Teammate display name").hideHelp()),program2.addOption(new Option("--team-name <name>","Team name for swarm coordination").hideHelp()),program2.addOption(new Option("--agent-color <color>","Teammate UI color").hideHelp()),program2.addOption(new Option("--plan-mode-required","Require plan mode before implementation").hideHelp()),program2.addOption(new Option("--parent-session-id <id>","Parent session ID for analytics correlation").hideHelp()),program2.addOption(new Option("--teammate-mode <mode>",'How to spawn teammates: "tmux", "in-process", or "auto"').choices(["auto","tmux","in-process"]).hideHelp()),program2.addOption(new Option("--agent-type <type>","Custom agent type for this teammate").hideHelp()),program2.addOption(new Option("--sdk-url <url>","Use remote WebSocket endpoint for SDK I/O streaming (only with -p and stream-json format)").hideHelp()),program2.addOption(new Option("--teleport [session]","Resume a teleport session, optionally specify session ID").hideHelp()),program2.addOption(new Option("--remote [description]","Create a remote session with the given description").hideHelp()),profileCheckpoint("run_main_options_built");let isPrintMode=process.argv.includes("-p")||process.argv.includes("--print"),isCcUrl=process.argv.some(a2=>a2.startsWith("cc://")||a2.startsWith("cc+unix://"));if(isPrintMode&&!isCcUrl)return profileCheckpoint("run_before_parse"),await program2.parseAsync(process.argv),profileCheckpoint("run_after_parse"),program2;let mcp2=program2.command("mcp").description("Configure and manage MCP servers").configureHelp(createSortedHelpConfig()).enablePositionalOptions();mcp2.command("serve").description("Start the Clavue MCP server").option("-d, --debug","Enable debug mode",()=>!0).option("--verbose","Override verbose mode setting from config",()=>!0).action(async({debug:debug4,verbose})=>{let{mcpServeHandler:mcpServeHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpServeHandler2({debug:debug4,verbose})}),registerMcpAddCommand(mcp2),isXaaEnabled()&&registerMcpXaaIdpCommand(mcp2),mcp2.command("remove <name>").description("Remove an MCP server").option("-s, --scope <scope>","Configuration scope (local, user, or project) - if not specified, removes from whichever scope it exists in").action(async(name,options)=>{let{mcpRemoveHandler:mcpRemoveHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpRemoveHandler2(name,options)}),mcp2.command("list").description("List configured MCP servers. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async()=>{let{mcpListHandler:mcpListHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpListHandler2()}),mcp2.command("get <name>").description("Get details about an MCP server. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async name=>{let{mcpGetHandler:mcpGetHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpGetHandler2(name)}),mcp2.command("doctor [name]").description("Diagnose MCP server configuration and connectivity (connect + tools/list). Note: stdio servers are spawned for health checks \u2014 only use in directories you trust.").option("--json","Machine-readable JSON report",()=>!0).action(async(name,options)=>{let{mcpDoctorHandler:mcpDoctorHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpDoctorHandler2(name,options)}),mcp2.command("add-json <name> <json>").description("Add an MCP server (stdio or SSE) with a JSON string").option("-s, --scope <scope>","Configuration scope (local, user, or project)","local").option("--client-secret","Prompt for OAuth client secret (or set MCP_CLIENT_SECRET env var)").action(async(name,json2,options)=>{let{mcpAddJsonHandler:mcpAddJsonHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpAddJsonHandler2(name,json2,options)});let addFromDesktopAction=__name(async options=>{let{mcpAddFromDesktopHandler:mcpAddFromDesktopHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpAddFromDesktopHandler2(options)},"addFromDesktopAction");mcp2.command("add-from-clavue-desktop").description("Import MCP servers from Clavue Desktop (Mac and WSL only)").option("-s, --scope <scope>","Configuration scope (local, user, or project)","local").action(addFromDesktopAction),mcp2.command("add-from-claude-desktop",{hidden:!0}).description("Import MCP servers from Clavue Desktop (Mac and WSL only)").option("-s, --scope <scope>","Configuration scope (local, user, or project)","local").action(addFromDesktopAction),mcp2.command("reset-project-choices").description("Reset all approved and rejected project-scoped (.mcp.json) servers within this project").action(async()=>{let{mcpResetChoicesHandler:mcpResetChoicesHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpResetChoicesHandler2()});let auth2=program2.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());auth2.command("login").description("Sign in with the official account flow").option("--email <email>","Pre-populate email address on the login page").option("--sso","Force SSO login flow").option("--console","Use direct API billing instead of subscription auth").option("--claudeai","Use official account subscription auth (default)").action(async({email:email3,sso,console:useConsole,claudeai})=>{let{authLogin:authLogin2}=await Promise.resolve().then(()=>(init_auth4(),auth_exports));await authLogin2({email:email3,sso,console:useConsole,claudeai})}),auth2.command("status").description("Show authentication status").option("--json","Output as JSON (default)").option("--text","Output as human-readable text").action(async opts=>{let{authStatus:authStatus2}=await Promise.resolve().then(()=>(init_auth4(),auth_exports));await authStatus2(opts)}),auth2.command("logout").description("Log out from Clavue").action(async()=>{let{authLogout:authLogout2}=await Promise.resolve().then(()=>(init_auth4(),auth_exports));await authLogout2()});let browserCmd=program2.command("browser").description("Clavue Browser Runtime: native agent browser start/stop/status/doctor").configureHelp(createSortedHelpConfig());browserCmd.command("start").description("Launch agent-owned Chromium (dedicated profile) and write runtime.json").action(async()=>{let{browserCliStart:browserCliStart2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(await browserCliStart2())}),browserCmd.command("stop").description("Stop agent-owned native browser if runtime.json pid is ours").action(async()=>{let{browserCliStop:browserCliStop2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(browserCliStop2())}),browserCmd.command("status").description("Show browser backend status (host:port only, no cookies)").action(async()=>{let{browserCliStatus:browserCliStatus2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(browserCliStatus2())}),browserCmd.command("doctor").description("Diagnose gate, binary discovery, and env matrix").action(async()=>{let{browserCliDoctor:browserCliDoctor2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(browserCliDoctor2())});let coworkOption=__name(()=>new Option("--cowork","Use cowork_plugins directory").hideHelp(),"coworkOption"),pluginCmd=program2.command("plugin").alias("plugins").description("Manage Clavue plugins").configureHelp(createSortedHelpConfig());pluginCmd.command("validate <path>").description("Validate a plugin or marketplace manifest").addOption(coworkOption()).action(async(manifestPath,options)=>{let{pluginValidateHandler:pluginValidateHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginValidateHandler2(manifestPath,options)}),pluginCmd.command("list").description("List installed plugins").option("--json","Output as JSON").option("--available","Include available plugins from marketplaces (requires --json)").addOption(coworkOption()).action(async options=>{let{pluginListHandler:pluginListHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginListHandler2(options)}),pluginCmd.command("discover").description("Browse the curated Discover plugin catalog (localized; cached under ~/.clavue/cache/plugin-discover)").option("--json","Output catalog document as JSON").option("--refresh","Force network fetch (ignore disk cache TTL)").option("--locale <locale>","Catalog locale: zh (default), zh-TW, or en").action(async options=>{let{pluginDiscoverHandler:pluginDiscoverHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginDiscoverHandler2(options)});let marketplaceCmd=pluginCmd.command("marketplace").description("Manage Clavue marketplaces").configureHelp(createSortedHelpConfig());marketplaceCmd.command("add <source>").description("Add a marketplace from a URL, path, or GitHub repo").addOption(coworkOption()).option("--sparse <paths...>","Limit checkout to specific directories via git sparse-checkout (for monorepos). Example: --sparse .clavue-plugin plugins").option("--scope <scope>","Where to declare the marketplace: user (default), project, or local").action(async(source,options)=>{let{marketplaceAddHandler:marketplaceAddHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceAddHandler2(source,options)}),marketplaceCmd.command("list").description("List all configured marketplaces").option("--json","Output as JSON").addOption(coworkOption()).action(async options=>{let{marketplaceListHandler:marketplaceListHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceListHandler2(options)}),marketplaceCmd.command("remove <name>").alias("rm").description("Remove a configured marketplace").addOption(coworkOption()).action(async(name,options)=>{let{marketplaceRemoveHandler:marketplaceRemoveHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceRemoveHandler2(name,options)}),marketplaceCmd.command("update [name]").description("Update marketplace(s) from their source - updates all if no name specified").addOption(coworkOption()).action(async(name,options)=>{let{marketplaceUpdateHandler:marketplaceUpdateHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceUpdateHandler2(name,options)}),pluginCmd.command("install <plugin>").alias("i").description("Install a plugin from available marketplaces (use plugin@marketplace for specific marketplace)").option("-s, --scope <scope>","Installation scope: user, project, or local","user").addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginInstallHandler:pluginInstallHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginInstallHandler2(plugin2,options)}),pluginCmd.command("uninstall <plugin>").alias("remove").alias("rm").description("Uninstall an installed plugin").option("-s, --scope <scope>","Uninstall from scope: user, project, or local","user").option("--keep-data","Preserve the plugin's persistent data directory (~/.clavue/plugins/data/{id}/)").addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginUninstallHandler:pluginUninstallHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginUninstallHandler2(plugin2,options)}),pluginCmd.command("enable <plugin>").description("Enable a disabled plugin").option("-s, --scope <scope>",`Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginEnableHandler:pluginEnableHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginEnableHandler2(plugin2,options)}),pluginCmd.command("disable [plugin]").description("Disable an enabled plugin").option("-a, --all","Disable all enabled plugins").option("-s, --scope <scope>",`Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginDisableHandler:pluginDisableHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginDisableHandler2(plugin2,options)}),pluginCmd.command("update <plugin>").description("Update a plugin to the latest version (restart required to apply)").option("-s, --scope <scope>",`Installation scope: ${VALID_UPDATE_SCOPES.join(", ")} (default: user)`).addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginUpdateHandler:pluginUpdateHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginUpdateHandler2(plugin2,options)}),program2.command("provider [args...]").allowUnknownOption(!0).description("Open provider setup or run non-interactive provider profile actions").action(async args=>{let providerArgs=Array.isArray(args)?args:[];if(providerArgs.length>0){let{providerCommandHandler:providerCommandHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await providerCommandHandler2(providerArgs);return}let{providerSetupHandler:providerSetupHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await providerSetupHandler2()}),program2.command("team [args...]").description("Inspect local agent-team readiness and status").action(async args=>{let{teamCommandHandler:teamCommandHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await teamCommandHandler2(Array.isArray(args)?args:[])}),program2.command("repair [args...]").allowUnknownOption(!0).description("Repair Clavue setup, permissions, and CCJK compatibility").action(async args=>{let{repairCommandHandler:repairCommandHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await repairCommandHandler2(Array.isArray(args)?args:[])}),program2.command("setup-token").description("Set up a long-lived authentication token (requires official account subscription)").action(async()=>{let{setupTokenHandler:setupTokenHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await setupTokenHandler2()});let worktreeCmd=program2.command("worktree").description("Inspect and clean up agent worktrees").configureHelp(createSortedHelpConfig());worktreeCmd.command("list").alias("ls").description("List agent worktrees with their branch and cleanliness").option("--json","Output as JSON").action(async options=>{let{worktreeListHandler:worktreeListHandler2}=await Promise.resolve().then(()=>(init_worktree2(),worktree_exports2));await worktreeListHandler2({json:options.json}),process.exit(process.exitCode??0)}),worktreeCmd.command("rm <slug>").alias("remove").description("Remove one agent worktree by slug").option("--force","Remove even with uncommitted or unpushed work").action(async(slug,options)=>{let{worktreeRemoveHandler:worktreeRemoveHandler2}=await Promise.resolve().then(()=>(init_worktree2(),worktree_exports2));await worktreeRemoveHandler2(slug,{force:options.force}),process.exit(process.exitCode??0)}),worktreeCmd.command("gc").description("Remove stale auto-created worktrees that are clean and fully pushed").option("--days <number>","Age threshold in days","30").option("--dry-run","Show what would be removed without removing it").action(async options=>{let{worktreeGcHandler:worktreeGcHandler2}=await Promise.resolve().then(()=>(init_worktree2(),worktree_exports2));await worktreeGcHandler2({days:options.days,dryRun:options.dryRun}),process.exit(process.exitCode??0)});let trajectoryCmd=program2.command("trajectory").description("Export per-turn session records for offline evaluation").configureHelp(createSortedHelpConfig());if(trajectoryCmd.command("list").alias("ls").description("List sessions in this project that have turn evidence").action(async()=>{let{trajectoryListHandler:trajectoryListHandler2}=await Promise.resolve().then(()=>(init_trajectory(),trajectory_exports));await trajectoryListHandler2(),process.exit(process.exitCode??0)}),trajectoryCmd.command("export").description("Write one JSONL row per turn (prompt, tools, changes, verdict)").option("--session <id>","Session to export (default: the only one)").option("--out <path>","Write to a file instead of stdout").option("--limit <number>","Export at most this many recent turns").action(async options=>{let{trajectoryExportHandler:trajectoryExportHandler2}=await Promise.resolve().then(()=>(init_trajectory(),trajectory_exports));await trajectoryExportHandler2(options),process.exit(process.exitCode??0)}),program2.command("agents").description("List configured agents").option("--setting-sources <sources>","Comma-separated list of setting sources to load (user, project, local).").option("--cwd <path>","Resolve project-scoped agents relative to this directory instead of the current shell cwd. Useful when introspecting a workspace from a script.").action(async options=>{let{agentsHandler:agentsHandler2}=await Promise.resolve().then(()=>(init_agents3(),agents_exports2));await agentsHandler2({cwdOverride:options.cwd}),process.exit(0)}),getAutoModeEnabledStateIfCached()!=="disabled"){let autoModeCmd=program2.command("auto-mode").description("Inspect auto mode classifier configuration");autoModeCmd.command("defaults").description("Print the default auto mode environment, allow, and deny rules as JSON").action(async()=>{let{autoModeDefaultsHandler:autoModeDefaultsHandler2}=await Promise.resolve().then(()=>(init_autoMode(),autoMode_exports));autoModeDefaultsHandler2(),process.exit(0)}),autoModeCmd.command("config").description("Print the effective auto mode config as JSON: your settings where set, defaults otherwise").action(async()=>{let{autoModeConfigHandler:autoModeConfigHandler2}=await Promise.resolve().then(()=>(init_autoMode(),autoMode_exports));autoModeConfigHandler2(),process.exit(0)}),autoModeCmd.command("critique").description("Get AI feedback on your custom auto mode rules").option("--model <model>","Override which model is used").action(async options=>{let{autoModeCritiqueHandler:autoModeCritiqueHandler2}=await Promise.resolve().then(()=>(init_autoMode(),autoMode_exports));await autoModeCritiqueHandler2(options),process.exit()})}return program2.command("doctor").description("Check the health of your Clavue auto-updater. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async()=>{let{doctorHandler:doctorHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await doctorHandler2()}),program2.command("skill").description("Print a live machine-state skill dump (paths, owned vs seeded keys). Regenerate; do not cache.").action(async()=>{let{dispatchTerminalCitizenCli:dispatchTerminalCitizenCli2}=await Promise.resolve().then(()=>(init_terminalCitizen(),terminalCitizen_exports)),result2=await dispatchTerminalCitizenCli2(["skill"]);process.exit(result2.kind==="exit"?result2.code:0)}),program2.command("shortcut-setup").description("Resolve shortcut conflicts between Clavue and Ghostty/Kitty (include-only terminal files)").option("--scan","Print contested chords without writing").option("--apply","Write include-only terminal overrides").option("--undo","Remove Clavue-owned terminal include files").action(async opts=>{let extra=[...opts.scan?["--scan"]:[],...opts.apply?["--apply"]:[],...opts.undo?["--undo"]:[]],{dispatchTerminalCitizenCli:dispatchTerminalCitizenCli2}=await Promise.resolve().then(()=>(init_terminalCitizen(),terminalCitizen_exports)),result2=await dispatchTerminalCitizenCli2(["shortcut-setup",...extra]);process.exit(result2.kind==="exit"?result2.code:0)}),program2.command("update").alias("upgrade").description("Check for updates and install if available").action(async()=>{let{update:update3}=await Promise.resolve().then(()=>(init_update3(),update_exports));await update3()}),program2.command("install [target]").description("Install Clavue native build. Use [target] to specify version (stable, latest, or specific version)").option("--force","Force installation even if already installed").action(async(target,options)=>{let{installHandler:installHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await installHandler2(target,options)}),profileCheckpoint("run_before_parse"),await program2.parseAsync(process.argv),profileCheckpoint("run_after_parse"),profileCheckpoint("main_after_run"),profileReport(),program2}async function logTenguInit({hasInitialPrompt,hasStdin,verbose,debug:debug4,debugToStderr,print,outputFormat,inputFormat,numAllowedTools,numDisallowedTools,mcpClientCount,worktreeEnabled,skipWebFetchPreflight,githubActionInputs,dangerouslySkipPermissionsPassed,permissionMode,modeIsBypass,allowDangerouslySkipPermissionsPassed,systemPromptFlag,appendSystemPromptFlag,thinkingConfig,assistantActivationPath}){try{logEvent("tengu_init",{entrypoint:"claude",hasInitialPrompt,hasStdin,verbose,debug:debug4,debugToStderr,print,outputFormat,inputFormat,numAllowedTools,numDisallowedTools,mcpClientCount,worktree:worktreeEnabled,skipWebFetchPreflight,...githubActionInputs&&{githubActionInputs},dangerouslySkipPermissionsPassed,permissionMode,modeIsBypass,inProtectedNamespace:isInProtectedNamespace(),allowDangerouslySkipPermissionsPassed,thinkingType:thinkingConfig.type,...systemPromptFlag&&{systemPromptFlag},...appendSystemPromptFlag&&{appendSystemPromptFlag},is_simple:isBareMode()||void 0,is_coordinator:void 0,...assistantActivationPath&&{assistantActivationPath},autoUpdatesChannel:getInitialSettings().autoUpdatesChannel??"latest"})}catch(error40){logError2(error40)}}var getTeammateUtils,getTeammatePromptAddendum,getTeammateModeSnapshot,coordinatorModeModule,autoModeStateModule6,_pendingAssistantChat,init_main3=__esm({"src/main.tsx"(){init_startupProfiler();init_rawRead();init_keychainPrefetch();init_featureFlags();init_esm4();init_source();init_mapValues();init_pickBy();init_uniqBy();init_branding();init_oauth();init_product();init_context();init_init2();init_history();init_replLauncher();init_growthbook();init_bootstrap();init_filesApi();init_referral();init_policyLimits();init_remoteManagedSettings();init_SyntheticOutputTool();init_tools2();init_advisor();init_agentSwarmsEnabled();init_array3();init_asciicast();init_state();init_auth6();init_config11();init_earlyInput();init_effort4();init_fastMode();init_managedEnv();init_messages4();init_platform2();init_validateTmuxOption();init_validateTeammateIdentityOptions();init_applySdkUrlDefaults();init_validateSessionIdOption();init_validateEnterpriseMcpConfig();init_buildFileDownloadConfig();init_filterCommandsForHeadless();init_determineClientType();init_resolveQuestionPreviewFormat();init_resolveIncludeOptions();init_resolveWorktreeOption();init_shouldSetAutoModeFlagCli();init_resolveEffectiveModel();init_validateAdvisorOption();init_buildInitialNotifications();init_resolveThinkingConfig();init_resolveReplayUserMessages();init_resolveEffectiveToolPermissionContext();init_resolveReplBridgeFlags();init_shouldSetFormattedOutputFlag();init_mergeAgentDefinitions();init_parseChannelEntries();init_resolveSystemPromptOption();init_validateStreamFormatOptions();init_sessionIngressAuth();init_slowOperations();init_reconnection();init_warningHandler();init_worktreeModeEnabled();init_growthbook();init_analytics();init_state();init_commands2();init_dialogLaunchers();init_interactiveHelpers();init_bundled2();init_claudeAiLimits();init_client7();init_pluginCliCommands();init_bundled3();init_loadAgentsDir();init_autoUpdater();init_prompt45();init_setup2();init_conversationRecovery();init_banner();init_envUtils();init_exampleCommands();init_git();init_json();init_log3();init_deprecation();init_model3();init_modelRoles();init_nativeWorkflowCompatibility();init_modelStrings();init_providerProfiles();init_providerRouteAutoHeal();init_providerStartup();init_PermissionMode();init_permissionSetup();init_cacheUtils();init_installedPluginsManager();init_orphanedPluginFilter();init_sessionStart();init_sessionStorage();init_settings();init_settings2();init_tasks();init_uuid2();init_addCommand();init_xaaIdpCommand();init_internalLogging();init_claudeai();init_client7();init_officialClavueMcp();init_officialBrowserMcp();init_browser4();init_config8();init_utils10();init_xaaIdpLogin();init_api3();init_common2();init_cleanupRegistry();init_commitAttribution();init_concurrentSessions();init_cwd2();init_debug();init_errors2();init_gracefulShutdown();init_hookEvents();init_process();init_Shell();init_sessionRestore();init_stringUtils();init_state();init_entrypoint();init_migrations();init_deferredPrefetches();init_runtimeActivations();init_sessionTelemetry();init_settingsBootstrap();init_telemetry();init_RemoteSessionManager();init_createDirectConnectSession();init_manager();init_promptSuggestion();init_AppStateStore();init_onChangeAppState();init_store();init_ids();init_betas2();init_bundledMode();init_diagLogs();init_githubRepoPathMapping();init_pluginLoader();init_api2();init_teleport();init_thinking();init_user();init_worktree();init_resumeFromHandoff();init_foreignContinueSeed();profileCheckpoint("main_tsx_entry");startMdmRawRead();startKeychainPrefetch();getTeammateUtils=__name(()=>(init_teammate(),__toCommonJS(teammate_exports)),"getTeammateUtils"),getTeammatePromptAddendum=__name(()=>(init_teammatePromptAddendum(),__toCommonJS(teammatePromptAddendum_exports)),"getTeammatePromptAddendum"),getTeammateModeSnapshot=__name(()=>(init_teammateModeSnapshot(),__toCommonJS(teammateModeSnapshot_exports)),"getTeammateModeSnapshot"),coordinatorModeModule=null,autoModeStateModule6=(init_autoModeState(),__toCommonJS(autoModeState_exports));profileCheckpoint("main_tsx_imports_loaded");__name(resolveAndBuildImportSessionSeed,"resolveAndBuildImportSessionSeed");__name(isBeingDebugged,"isBeingDebugged");isBeingDebugged()&&process.exit(1);__name(runMigrations,"runMigrations");_pendingAssistantChat=feature("KAIROS")?{sessionId:void 0,discover:!1}:void 0;__name(main,"main");__name(getInputPrompt,"getInputPrompt");__name(run,"run");__name(logTenguInit,"logTenguInit")}});process.env.COREPACK_ENABLE_AUTO_PIN="0";async function main2(){let args=process.argv.slice(2);if(args.length===1&&(args[0]==="--version"||args[0]==="-v"||args[0]==="-V")){console.log("11.3.12 (Clavue)");return}let{feature:feature2}=await Promise.resolve().then(()=>(init_featureFlags(),featureFlags_exports)),{normalizeClavueBrandEnv:normalizeClavueBrandEnv2}=await Promise.resolve().then(()=>(init_clavueEnv(),clavueEnv_exports));normalizeClavueBrandEnv2();let{reexecWithLargerHeapIfNeeded:reexecWithLargerHeapIfNeeded2}=await Promise.resolve().then(()=>(init_nodeHeapBootstrap(),nodeHeapBootstrap_exports));if(reexecWithLargerHeapIfNeeded2({args}))return;{let{dispatchTerminalCitizenCli:dispatchTerminalCitizenCli2}=await Promise.resolve().then(()=>(init_terminalCitizen(),terminalCitizen_exports)),citizen=await dispatchTerminalCitizenCli2(args);citizen.kind==="exit"&&process.exit(citizen.code),args=citizen.argv,process.argv=[process.argv[0],process.argv[1],...args]}if(args[0]==="acp"||args[0]==="--acp"){let{runAcpStdioServer:runAcpStdioServer2}=await Promise.resolve().then(()=>(init_acpStdio(),acpStdio_exports)),execute=args.includes("--execute")||args.includes("--acp-execute")||/^(1|true|yes|on)$/i.test(process.env.CLAVUE_ACP_EXECUTE??""),executeMode=args.includes("--subprocess")?"subprocess":args.includes("--inprocess")?"inprocess":void 0;await runAcpStdioServer2({execute,...executeMode?{executeMode}:{}}),process.exit(0)}if(args[0]==="tui"||args[0]==="grok-tui"){try{process.stderr.write('[clavue] opt-in Grok substrate (`clavue tui`)\n Welcome / upgrade copy may still say "Grok Build".\n Clavue home \xB7 version \xB7 changelog: bare `clavue` (native pager).\n')}catch{}let{runGrokTuiCli:runGrokTuiCli2}=await Promise.resolve().then(()=>(init_grokTuiCli(),grokTuiCli_exports)),code=await runGrokTuiCli2(args.slice(1));process.exit(code)}if(args[0]==="pager"||args[0]==="ui-pager"){let{enableConfigs:enableConfigs2}=await Promise.resolve().then(()=>(init_config11(),config_exports4));enableConfigs2();let{runPagerCli:runPagerCli2}=await Promise.resolve().then(()=>(init_pagerCli(),pagerCli_exports)),code=await runPagerCli2(args.slice(1));process.exit(code)}{let{shouldLaunchNativePagerInteractive:shouldLaunchNativePagerInteractive2}=await Promise.resolve().then(()=>(init_uiMode(),uiMode_exports)),decision=shouldLaunchNativePagerInteractive2({argv:args});if(decision.deprecatedInkFlag)try{process.stderr.write(`[clavue] note: --ui=ink / CLAVUE_UI=ink are removed; using native pager.
12710
+ `)),await gracefulShutdown(1);return}}else{let pendingHookMessages=hooksPromise&&hookMessages.length===0?hooksPromise:void 0;profileCheckpoint("action_after_hooks");let deepLinkBanner=null,initialMessages=deepLinkBanner?[deepLinkBanner,...hookMessages]:hookMessages.length>0?hookMessages:void 0;await launchRepl(root2,{getFpsMetrics,stats:stats2,initialState},{...sessionConfig,initialMessages,pendingHookMessages},renderAndRun)}}).version("11.3.13 (Clavue)","-v, --version","Output the version number"),program2.option("-w, --worktree [name]","Create a new git worktree for this session (optionally specify a name)"),program2.option("--tmux","Create a tmux session for the worktree (requires --worktree). Uses iTerm2 native panes when available; use --tmux=classic for traditional tmux."),program2.option("--split <direction>","Open Clavue in a tmux/zellij/wezterm pane: right, left, down, up"),program2.option("--size <fraction>","Fraction a --split pane takes (0.2 to 0.95)"),program2.option("-g, --goto [file:line:column]","Queue a file for the pager / CLAVUE_IPC; omit the path to reseed the last mutation"),program2.option("--status","Print whether a clavue window is live (ipc / phase / last mutation) and exit"),program2.option("--timing","Record pager launch stages; alone, print the last recording"),canUserConfigureAdvisor()&&program2.addOption(new Option("--advisor <model>","Enable the server-side advisor tool with the specified model (alias or full ID).").hideHelp()),program2.addOption(new Option("--enable-auto-mode","Opt in to auto mode")),program2.addOption(new Option("--messaging-socket-path <path>","Unix domain socket path for the UDS messaging server (defaults to a tmp path)")),program2.addOption(new Option("--agent-id <id>","Teammate agent ID").hideHelp()),program2.addOption(new Option("--agent-name <name>","Teammate display name").hideHelp()),program2.addOption(new Option("--team-name <name>","Team name for swarm coordination").hideHelp()),program2.addOption(new Option("--agent-color <color>","Teammate UI color").hideHelp()),program2.addOption(new Option("--plan-mode-required","Require plan mode before implementation").hideHelp()),program2.addOption(new Option("--parent-session-id <id>","Parent session ID for analytics correlation").hideHelp()),program2.addOption(new Option("--teammate-mode <mode>",'How to spawn teammates: "tmux", "in-process", or "auto"').choices(["auto","tmux","in-process"]).hideHelp()),program2.addOption(new Option("--agent-type <type>","Custom agent type for this teammate").hideHelp()),program2.addOption(new Option("--sdk-url <url>","Use remote WebSocket endpoint for SDK I/O streaming (only with -p and stream-json format)").hideHelp()),program2.addOption(new Option("--teleport [session]","Resume a teleport session, optionally specify session ID").hideHelp()),program2.addOption(new Option("--remote [description]","Create a remote session with the given description").hideHelp()),profileCheckpoint("run_main_options_built");let isPrintMode=process.argv.includes("-p")||process.argv.includes("--print"),isCcUrl=process.argv.some(a2=>a2.startsWith("cc://")||a2.startsWith("cc+unix://"));if(isPrintMode&&!isCcUrl)return profileCheckpoint("run_before_parse"),await program2.parseAsync(process.argv),profileCheckpoint("run_after_parse"),program2;let mcp2=program2.command("mcp").description("Configure and manage MCP servers").configureHelp(createSortedHelpConfig()).enablePositionalOptions();mcp2.command("serve").description("Start the Clavue MCP server").option("-d, --debug","Enable debug mode",()=>!0).option("--verbose","Override verbose mode setting from config",()=>!0).action(async({debug:debug4,verbose})=>{let{mcpServeHandler:mcpServeHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpServeHandler2({debug:debug4,verbose})}),registerMcpAddCommand(mcp2),isXaaEnabled()&&registerMcpXaaIdpCommand(mcp2),mcp2.command("remove <name>").description("Remove an MCP server").option("-s, --scope <scope>","Configuration scope (local, user, or project) - if not specified, removes from whichever scope it exists in").action(async(name,options)=>{let{mcpRemoveHandler:mcpRemoveHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpRemoveHandler2(name,options)}),mcp2.command("list").description("List configured MCP servers. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async()=>{let{mcpListHandler:mcpListHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpListHandler2()}),mcp2.command("get <name>").description("Get details about an MCP server. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async name=>{let{mcpGetHandler:mcpGetHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpGetHandler2(name)}),mcp2.command("doctor [name]").description("Diagnose MCP server configuration and connectivity (connect + tools/list). Note: stdio servers are spawned for health checks \u2014 only use in directories you trust.").option("--json","Machine-readable JSON report",()=>!0).action(async(name,options)=>{let{mcpDoctorHandler:mcpDoctorHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpDoctorHandler2(name,options)}),mcp2.command("add-json <name> <json>").description("Add an MCP server (stdio or SSE) with a JSON string").option("-s, --scope <scope>","Configuration scope (local, user, or project)","local").option("--client-secret","Prompt for OAuth client secret (or set MCP_CLIENT_SECRET env var)").action(async(name,json2,options)=>{let{mcpAddJsonHandler:mcpAddJsonHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpAddJsonHandler2(name,json2,options)});let addFromDesktopAction=__name(async options=>{let{mcpAddFromDesktopHandler:mcpAddFromDesktopHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpAddFromDesktopHandler2(options)},"addFromDesktopAction");mcp2.command("add-from-clavue-desktop").description("Import MCP servers from Clavue Desktop (Mac and WSL only)").option("-s, --scope <scope>","Configuration scope (local, user, or project)","local").action(addFromDesktopAction),mcp2.command("add-from-claude-desktop",{hidden:!0}).description("Import MCP servers from Clavue Desktop (Mac and WSL only)").option("-s, --scope <scope>","Configuration scope (local, user, or project)","local").action(addFromDesktopAction),mcp2.command("reset-project-choices").description("Reset all approved and rejected project-scoped (.mcp.json) servers within this project").action(async()=>{let{mcpResetChoicesHandler:mcpResetChoicesHandler2}=await Promise.resolve().then(()=>(init_mcp5(),mcp_exports3));await mcpResetChoicesHandler2()});let auth2=program2.command("auth").description("Manage authentication").configureHelp(createSortedHelpConfig());auth2.command("login").description("Sign in with the official account flow").option("--email <email>","Pre-populate email address on the login page").option("--sso","Force SSO login flow").option("--console","Use direct API billing instead of subscription auth").option("--claudeai","Use official account subscription auth (default)").action(async({email:email3,sso,console:useConsole,claudeai})=>{let{authLogin:authLogin2}=await Promise.resolve().then(()=>(init_auth4(),auth_exports));await authLogin2({email:email3,sso,console:useConsole,claudeai})}),auth2.command("status").description("Show authentication status").option("--json","Output as JSON (default)").option("--text","Output as human-readable text").action(async opts=>{let{authStatus:authStatus2}=await Promise.resolve().then(()=>(init_auth4(),auth_exports));await authStatus2(opts)}),auth2.command("logout").description("Log out from Clavue").action(async()=>{let{authLogout:authLogout2}=await Promise.resolve().then(()=>(init_auth4(),auth_exports));await authLogout2()});let browserCmd=program2.command("browser").description("Clavue Browser Runtime: native agent browser start/stop/status/doctor").configureHelp(createSortedHelpConfig());browserCmd.command("start").description("Launch agent-owned Chromium (dedicated profile) and write runtime.json").action(async()=>{let{browserCliStart:browserCliStart2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(await browserCliStart2())}),browserCmd.command("stop").description("Stop agent-owned native browser if runtime.json pid is ours").action(async()=>{let{browserCliStop:browserCliStop2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(browserCliStop2())}),browserCmd.command("status").description("Show browser backend status (host:port only, no cookies)").action(async()=>{let{browserCliStatus:browserCliStatus2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(browserCliStatus2())}),browserCmd.command("doctor").description("Diagnose gate, binary discovery, and env matrix").action(async()=>{let{browserCliDoctor:browserCliDoctor2}=await Promise.resolve().then(()=>(init_cli(),cli_exports));console.log(browserCliDoctor2())});let coworkOption=__name(()=>new Option("--cowork","Use cowork_plugins directory").hideHelp(),"coworkOption"),pluginCmd=program2.command("plugin").alias("plugins").description("Manage Clavue plugins").configureHelp(createSortedHelpConfig());pluginCmd.command("validate <path>").description("Validate a plugin or marketplace manifest").addOption(coworkOption()).action(async(manifestPath,options)=>{let{pluginValidateHandler:pluginValidateHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginValidateHandler2(manifestPath,options)}),pluginCmd.command("list").description("List installed plugins").option("--json","Output as JSON").option("--available","Include available plugins from marketplaces (requires --json)").addOption(coworkOption()).action(async options=>{let{pluginListHandler:pluginListHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginListHandler2(options)}),pluginCmd.command("discover").description("Browse the curated Discover plugin catalog (localized; cached under ~/.clavue/cache/plugin-discover)").option("--json","Output catalog document as JSON").option("--refresh","Force network fetch (ignore disk cache TTL)").option("--locale <locale>","Catalog locale: zh (default), zh-TW, or en").action(async options=>{let{pluginDiscoverHandler:pluginDiscoverHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginDiscoverHandler2(options)});let marketplaceCmd=pluginCmd.command("marketplace").description("Manage Clavue marketplaces").configureHelp(createSortedHelpConfig());marketplaceCmd.command("add <source>").description("Add a marketplace from a URL, path, or GitHub repo").addOption(coworkOption()).option("--sparse <paths...>","Limit checkout to specific directories via git sparse-checkout (for monorepos). Example: --sparse .clavue-plugin plugins").option("--scope <scope>","Where to declare the marketplace: user (default), project, or local").action(async(source,options)=>{let{marketplaceAddHandler:marketplaceAddHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceAddHandler2(source,options)}),marketplaceCmd.command("list").description("List all configured marketplaces").option("--json","Output as JSON").addOption(coworkOption()).action(async options=>{let{marketplaceListHandler:marketplaceListHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceListHandler2(options)}),marketplaceCmd.command("remove <name>").alias("rm").description("Remove a configured marketplace").addOption(coworkOption()).action(async(name,options)=>{let{marketplaceRemoveHandler:marketplaceRemoveHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceRemoveHandler2(name,options)}),marketplaceCmd.command("update [name]").description("Update marketplace(s) from their source - updates all if no name specified").addOption(coworkOption()).action(async(name,options)=>{let{marketplaceUpdateHandler:marketplaceUpdateHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await marketplaceUpdateHandler2(name,options)}),pluginCmd.command("install <plugin>").alias("i").description("Install a plugin from available marketplaces (use plugin@marketplace for specific marketplace)").option("-s, --scope <scope>","Installation scope: user, project, or local","user").addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginInstallHandler:pluginInstallHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginInstallHandler2(plugin2,options)}),pluginCmd.command("uninstall <plugin>").alias("remove").alias("rm").description("Uninstall an installed plugin").option("-s, --scope <scope>","Uninstall from scope: user, project, or local","user").option("--keep-data","Preserve the plugin's persistent data directory (~/.clavue/plugins/data/{id}/)").addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginUninstallHandler:pluginUninstallHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginUninstallHandler2(plugin2,options)}),pluginCmd.command("enable <plugin>").description("Enable a disabled plugin").option("-s, --scope <scope>",`Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginEnableHandler:pluginEnableHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginEnableHandler2(plugin2,options)}),pluginCmd.command("disable [plugin]").description("Disable an enabled plugin").option("-a, --all","Disable all enabled plugins").option("-s, --scope <scope>",`Installation scope: ${VALID_INSTALLABLE_SCOPES.join(", ")} (default: auto-detect)`).addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginDisableHandler:pluginDisableHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginDisableHandler2(plugin2,options)}),pluginCmd.command("update <plugin>").description("Update a plugin to the latest version (restart required to apply)").option("-s, --scope <scope>",`Installation scope: ${VALID_UPDATE_SCOPES.join(", ")} (default: user)`).addOption(coworkOption()).action(async(plugin2,options)=>{let{pluginUpdateHandler:pluginUpdateHandler2}=await Promise.resolve().then(()=>(init_plugins(),plugins_exports));await pluginUpdateHandler2(plugin2,options)}),program2.command("provider [args...]").allowUnknownOption(!0).description("Open provider setup or run non-interactive provider profile actions").action(async args=>{let providerArgs=Array.isArray(args)?args:[];if(providerArgs.length>0){let{providerCommandHandler:providerCommandHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await providerCommandHandler2(providerArgs);return}let{providerSetupHandler:providerSetupHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await providerSetupHandler2()}),program2.command("team [args...]").description("Inspect local agent-team readiness and status").action(async args=>{let{teamCommandHandler:teamCommandHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await teamCommandHandler2(Array.isArray(args)?args:[])}),program2.command("repair [args...]").allowUnknownOption(!0).description("Repair Clavue setup, permissions, and CCJK compatibility").action(async args=>{let{repairCommandHandler:repairCommandHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await repairCommandHandler2(Array.isArray(args)?args:[])}),program2.command("setup-token").description("Set up a long-lived authentication token (requires official account subscription)").action(async()=>{let{setupTokenHandler:setupTokenHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await setupTokenHandler2()});let worktreeCmd=program2.command("worktree").description("Inspect and clean up agent worktrees").configureHelp(createSortedHelpConfig());worktreeCmd.command("list").alias("ls").description("List agent worktrees with their branch and cleanliness").option("--json","Output as JSON").action(async options=>{let{worktreeListHandler:worktreeListHandler2}=await Promise.resolve().then(()=>(init_worktree2(),worktree_exports2));await worktreeListHandler2({json:options.json}),process.exit(process.exitCode??0)}),worktreeCmd.command("rm <slug>").alias("remove").description("Remove one agent worktree by slug").option("--force","Remove even with uncommitted or unpushed work").action(async(slug,options)=>{let{worktreeRemoveHandler:worktreeRemoveHandler2}=await Promise.resolve().then(()=>(init_worktree2(),worktree_exports2));await worktreeRemoveHandler2(slug,{force:options.force}),process.exit(process.exitCode??0)}),worktreeCmd.command("gc").description("Remove stale auto-created worktrees that are clean and fully pushed").option("--days <number>","Age threshold in days","30").option("--dry-run","Show what would be removed without removing it").action(async options=>{let{worktreeGcHandler:worktreeGcHandler2}=await Promise.resolve().then(()=>(init_worktree2(),worktree_exports2));await worktreeGcHandler2({days:options.days,dryRun:options.dryRun}),process.exit(process.exitCode??0)});let trajectoryCmd=program2.command("trajectory").description("Export per-turn session records for offline evaluation").configureHelp(createSortedHelpConfig());if(trajectoryCmd.command("list").alias("ls").description("List sessions in this project that have turn evidence").action(async()=>{let{trajectoryListHandler:trajectoryListHandler2}=await Promise.resolve().then(()=>(init_trajectory(),trajectory_exports));await trajectoryListHandler2(),process.exit(process.exitCode??0)}),trajectoryCmd.command("export").description("Write one JSONL row per turn (prompt, tools, changes, verdict)").option("--session <id>","Session to export (default: the only one)").option("--out <path>","Write to a file instead of stdout").option("--limit <number>","Export at most this many recent turns").action(async options=>{let{trajectoryExportHandler:trajectoryExportHandler2}=await Promise.resolve().then(()=>(init_trajectory(),trajectory_exports));await trajectoryExportHandler2(options),process.exit(process.exitCode??0)}),program2.command("agents").description("List configured agents").option("--setting-sources <sources>","Comma-separated list of setting sources to load (user, project, local).").option("--cwd <path>","Resolve project-scoped agents relative to this directory instead of the current shell cwd. Useful when introspecting a workspace from a script.").action(async options=>{let{agentsHandler:agentsHandler2}=await Promise.resolve().then(()=>(init_agents3(),agents_exports2));await agentsHandler2({cwdOverride:options.cwd}),process.exit(0)}),getAutoModeEnabledStateIfCached()!=="disabled"){let autoModeCmd=program2.command("auto-mode").description("Inspect auto mode classifier configuration");autoModeCmd.command("defaults").description("Print the default auto mode environment, allow, and deny rules as JSON").action(async()=>{let{autoModeDefaultsHandler:autoModeDefaultsHandler2}=await Promise.resolve().then(()=>(init_autoMode(),autoMode_exports));autoModeDefaultsHandler2(),process.exit(0)}),autoModeCmd.command("config").description("Print the effective auto mode config as JSON: your settings where set, defaults otherwise").action(async()=>{let{autoModeConfigHandler:autoModeConfigHandler2}=await Promise.resolve().then(()=>(init_autoMode(),autoMode_exports));autoModeConfigHandler2(),process.exit(0)}),autoModeCmd.command("critique").description("Get AI feedback on your custom auto mode rules").option("--model <model>","Override which model is used").action(async options=>{let{autoModeCritiqueHandler:autoModeCritiqueHandler2}=await Promise.resolve().then(()=>(init_autoMode(),autoMode_exports));await autoModeCritiqueHandler2(options),process.exit()})}return program2.command("doctor").description("Check the health of your Clavue auto-updater. Note: The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust.").action(async()=>{let{doctorHandler:doctorHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await doctorHandler2()}),program2.command("skill").description("Print a live machine-state skill dump (paths, owned vs seeded keys). Regenerate; do not cache.").action(async()=>{let{dispatchTerminalCitizenCli:dispatchTerminalCitizenCli2}=await Promise.resolve().then(()=>(init_terminalCitizen(),terminalCitizen_exports)),result2=await dispatchTerminalCitizenCli2(["skill"]);process.exit(result2.kind==="exit"?result2.code:0)}),program2.command("shortcut-setup").description("Resolve shortcut conflicts between Clavue and Ghostty/Kitty (include-only terminal files)").option("--scan","Print contested chords without writing").option("--apply","Write include-only terminal overrides").option("--undo","Remove Clavue-owned terminal include files").action(async opts=>{let extra=[...opts.scan?["--scan"]:[],...opts.apply?["--apply"]:[],...opts.undo?["--undo"]:[]],{dispatchTerminalCitizenCli:dispatchTerminalCitizenCli2}=await Promise.resolve().then(()=>(init_terminalCitizen(),terminalCitizen_exports)),result2=await dispatchTerminalCitizenCli2(["shortcut-setup",...extra]);process.exit(result2.kind==="exit"?result2.code:0)}),program2.command("update").alias("upgrade").description("Check for updates and install if available").action(async()=>{let{update:update3}=await Promise.resolve().then(()=>(init_update3(),update_exports));await update3()}),program2.command("install [target]").description("Install Clavue native build. Use [target] to specify version (stable, latest, or specific version)").option("--force","Force installation even if already installed").action(async(target,options)=>{let{installHandler:installHandler2}=await Promise.resolve().then(()=>(init_util5(),util_exports2));await installHandler2(target,options)}),profileCheckpoint("run_before_parse"),await program2.parseAsync(process.argv),profileCheckpoint("run_after_parse"),profileCheckpoint("main_after_run"),profileReport(),program2}async function logTenguInit({hasInitialPrompt,hasStdin,verbose,debug:debug4,debugToStderr,print,outputFormat,inputFormat,numAllowedTools,numDisallowedTools,mcpClientCount,worktreeEnabled,skipWebFetchPreflight,githubActionInputs,dangerouslySkipPermissionsPassed,permissionMode,modeIsBypass,allowDangerouslySkipPermissionsPassed,systemPromptFlag,appendSystemPromptFlag,thinkingConfig,assistantActivationPath}){try{logEvent("tengu_init",{entrypoint:"claude",hasInitialPrompt,hasStdin,verbose,debug:debug4,debugToStderr,print,outputFormat,inputFormat,numAllowedTools,numDisallowedTools,mcpClientCount,worktree:worktreeEnabled,skipWebFetchPreflight,...githubActionInputs&&{githubActionInputs},dangerouslySkipPermissionsPassed,permissionMode,modeIsBypass,inProtectedNamespace:isInProtectedNamespace(),allowDangerouslySkipPermissionsPassed,thinkingType:thinkingConfig.type,...systemPromptFlag&&{systemPromptFlag},...appendSystemPromptFlag&&{appendSystemPromptFlag},is_simple:isBareMode()||void 0,is_coordinator:void 0,...assistantActivationPath&&{assistantActivationPath},autoUpdatesChannel:getInitialSettings().autoUpdatesChannel??"latest"})}catch(error40){logError2(error40)}}var getTeammateUtils,getTeammatePromptAddendum,getTeammateModeSnapshot,coordinatorModeModule,autoModeStateModule6,_pendingAssistantChat,init_main3=__esm({"src/main.tsx"(){init_startupProfiler();init_rawRead();init_keychainPrefetch();init_featureFlags();init_esm4();init_source();init_mapValues();init_pickBy();init_uniqBy();init_branding();init_oauth();init_product();init_context();init_init2();init_history();init_replLauncher();init_growthbook();init_bootstrap();init_filesApi();init_referral();init_policyLimits();init_remoteManagedSettings();init_SyntheticOutputTool();init_tools2();init_advisor();init_agentSwarmsEnabled();init_array3();init_asciicast();init_state();init_auth6();init_config11();init_earlyInput();init_effort4();init_fastMode();init_managedEnv();init_messages4();init_platform2();init_validateTmuxOption();init_validateTeammateIdentityOptions();init_applySdkUrlDefaults();init_validateSessionIdOption();init_validateEnterpriseMcpConfig();init_buildFileDownloadConfig();init_filterCommandsForHeadless();init_determineClientType();init_resolveQuestionPreviewFormat();init_resolveIncludeOptions();init_resolveWorktreeOption();init_shouldSetAutoModeFlagCli();init_resolveEffectiveModel();init_validateAdvisorOption();init_buildInitialNotifications();init_resolveThinkingConfig();init_resolveReplayUserMessages();init_resolveEffectiveToolPermissionContext();init_resolveReplBridgeFlags();init_shouldSetFormattedOutputFlag();init_mergeAgentDefinitions();init_parseChannelEntries();init_resolveSystemPromptOption();init_validateStreamFormatOptions();init_sessionIngressAuth();init_slowOperations();init_reconnection();init_warningHandler();init_worktreeModeEnabled();init_growthbook();init_analytics();init_state();init_commands2();init_dialogLaunchers();init_interactiveHelpers();init_bundled2();init_claudeAiLimits();init_client7();init_pluginCliCommands();init_bundled3();init_loadAgentsDir();init_autoUpdater();init_prompt45();init_setup2();init_conversationRecovery();init_banner();init_envUtils();init_exampleCommands();init_git();init_json();init_log3();init_deprecation();init_model3();init_modelRoles();init_nativeWorkflowCompatibility();init_modelStrings();init_providerProfiles();init_providerRouteAutoHeal();init_providerStartup();init_PermissionMode();init_permissionSetup();init_cacheUtils();init_installedPluginsManager();init_orphanedPluginFilter();init_sessionStart();init_sessionStorage();init_settings();init_settings2();init_tasks();init_uuid2();init_addCommand();init_xaaIdpCommand();init_internalLogging();init_claudeai();init_client7();init_officialClavueMcp();init_officialBrowserMcp();init_browser4();init_config8();init_utils10();init_xaaIdpLogin();init_api3();init_common2();init_cleanupRegistry();init_commitAttribution();init_concurrentSessions();init_cwd2();init_debug();init_errors2();init_gracefulShutdown();init_hookEvents();init_process();init_Shell();init_sessionRestore();init_stringUtils();init_state();init_entrypoint();init_migrations();init_deferredPrefetches();init_runtimeActivations();init_sessionTelemetry();init_settingsBootstrap();init_telemetry();init_RemoteSessionManager();init_createDirectConnectSession();init_manager();init_promptSuggestion();init_AppStateStore();init_onChangeAppState();init_store();init_ids();init_betas2();init_bundledMode();init_diagLogs();init_githubRepoPathMapping();init_pluginLoader();init_api2();init_teleport();init_thinking();init_user();init_worktree();init_resumeFromHandoff();init_foreignContinueSeed();profileCheckpoint("main_tsx_entry");startMdmRawRead();startKeychainPrefetch();getTeammateUtils=__name(()=>(init_teammate(),__toCommonJS(teammate_exports)),"getTeammateUtils"),getTeammatePromptAddendum=__name(()=>(init_teammatePromptAddendum(),__toCommonJS(teammatePromptAddendum_exports)),"getTeammatePromptAddendum"),getTeammateModeSnapshot=__name(()=>(init_teammateModeSnapshot(),__toCommonJS(teammateModeSnapshot_exports)),"getTeammateModeSnapshot"),coordinatorModeModule=null,autoModeStateModule6=(init_autoModeState(),__toCommonJS(autoModeState_exports));profileCheckpoint("main_tsx_imports_loaded");__name(resolveAndBuildImportSessionSeed,"resolveAndBuildImportSessionSeed");__name(isBeingDebugged,"isBeingDebugged");isBeingDebugged()&&process.exit(1);__name(runMigrations,"runMigrations");_pendingAssistantChat=feature("KAIROS")?{sessionId:void 0,discover:!1}:void 0;__name(main,"main");__name(getInputPrompt,"getInputPrompt");__name(run,"run");__name(logTenguInit,"logTenguInit")}});process.env.COREPACK_ENABLE_AUTO_PIN="0";async function main2(){let args=process.argv.slice(2);if(args.length===1&&(args[0]==="--version"||args[0]==="-v"||args[0]==="-V")){console.log("11.3.13 (Clavue)");return}let{feature:feature2}=await Promise.resolve().then(()=>(init_featureFlags(),featureFlags_exports)),{normalizeClavueBrandEnv:normalizeClavueBrandEnv2}=await Promise.resolve().then(()=>(init_clavueEnv(),clavueEnv_exports));normalizeClavueBrandEnv2();let{reexecWithLargerHeapIfNeeded:reexecWithLargerHeapIfNeeded2}=await Promise.resolve().then(()=>(init_nodeHeapBootstrap(),nodeHeapBootstrap_exports));if(reexecWithLargerHeapIfNeeded2({args}))return;{let{dispatchTerminalCitizenCli:dispatchTerminalCitizenCli2}=await Promise.resolve().then(()=>(init_terminalCitizen(),terminalCitizen_exports)),citizen=await dispatchTerminalCitizenCli2(args);citizen.kind==="exit"&&process.exit(citizen.code),args=citizen.argv,process.argv=[process.argv[0],process.argv[1],...args]}if(args[0]==="acp"||args[0]==="--acp"){let{runAcpStdioServer:runAcpStdioServer2}=await Promise.resolve().then(()=>(init_acpStdio(),acpStdio_exports)),execute=args.includes("--execute")||args.includes("--acp-execute")||/^(1|true|yes|on)$/i.test(process.env.CLAVUE_ACP_EXECUTE??""),executeMode=args.includes("--subprocess")?"subprocess":args.includes("--inprocess")?"inprocess":void 0;await runAcpStdioServer2({execute,...executeMode?{executeMode}:{}}),process.exit(0)}if(args[0]==="tui"||args[0]==="grok-tui"){try{process.stderr.write('[clavue] opt-in Grok substrate (`clavue tui`)\n Welcome / upgrade copy may still say "Grok Build".\n Clavue home \xB7 version \xB7 changelog: bare `clavue` (native pager).\n')}catch{}let{runGrokTuiCli:runGrokTuiCli2}=await Promise.resolve().then(()=>(init_grokTuiCli(),grokTuiCli_exports)),code=await runGrokTuiCli2(args.slice(1));process.exit(code)}if(args[0]==="pager"||args[0]==="ui-pager"){let{enableConfigs:enableConfigs2}=await Promise.resolve().then(()=>(init_config11(),config_exports4));enableConfigs2();let{runPagerCli:runPagerCli2}=await Promise.resolve().then(()=>(init_pagerCli(),pagerCli_exports)),code=await runPagerCli2(args.slice(1));process.exit(code)}{let{shouldLaunchNativePagerInteractive:shouldLaunchNativePagerInteractive2}=await Promise.resolve().then(()=>(init_uiMode(),uiMode_exports)),decision=shouldLaunchNativePagerInteractive2({argv:args});if(decision.deprecatedInkFlag)try{process.stderr.write(`[clavue] note: --ui=ink / CLAVUE_UI=ink are removed; using native pager.
12711
12711
  `)}catch{}if(decision.launchGrokTui)try{process.stderr.write(`[clavue] opt-in Grok substrate (${decision.reason})
12712
12712
  Welcome / upgrade copy may still say "Grok Build".
12713
12713
  Clavue home \xB7 version \xB7 changelog: quit and run bare \`clavue\` (native pager).