keepmind 1.3.2 → 1.3.3

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.
@@ -20,7 +20,7 @@ ${s.stack}`:` ${s.message}`;else if(this.getLevel()===0&&typeof s=="object")try{
20
20
  `)}else ln(p+`
21
21
  `)}debug(e,r,n,o){this.log(0,e,r,n,o)}info(e,r,n,o){this.log(1,e,r,n,o)}warn(e,r,n,o){this.log(2,e,r,n,o)}setErrorSink(e){Si=e}error(e,r,n,o){this.log(3,e,r,n,o),this.routeErrorToSink(r,n,o)}routeErrorToSink(e,r,n){try{if(!Si||!(n instanceof Error))return;Si(n)}catch{}}dataIn(e,r,n,o){this.info(e,`\u2192 ${r}`,n,o)}dataOut(e,r,n,o){this.info(e,`\u2190 ${r}`,n,o)}success(e,r,n,o){this.info(e,`\u2713 ${r}`,n,o)}failure(e,r,n,o){this.error(e,`\u2717 ${r}`,n,o)}happyPathError(e,r,n,o,s=""){let u=((new Error().stack||"").split(`
22
22
  `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),l=u?`${u[1].split("/").pop()}:${u[2]}`:"unknown",d={...n,location:l};return this.warn(e,`[HAPPY-PATH] ${r}`,d,o),s}},f=new wi;var ue={DEFAULT:3e5,HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},C={SUCCESS:0,FAILURE:1,BLOCKING_ERROR:2,USER_MESSAGE_ONLY:3};function Et(t){return process.platform==="win32"?Math.round(t*ue.WINDOWS_MULTIPLIER):t}var dt=require("fs"),pn=require("path"),bi=require("os");var V=require("fs");var lt=require("path");var Fl=require("crypto"),nv=process.platform==="win32";function ov(t){(0,V.existsSync)(t)||(0,V.mkdirSync)(t,{recursive:!0})}function Eo(t,e){let r=t;try{if((0,V.lstatSync)(t).isSymbolicLink())try{r=(0,V.realpathSync)(t)}catch{let u=(0,V.readlinkSync)(t);r=(0,lt.resolve)((0,lt.dirname)(t),u)}}catch(u){let l=u.code;if(l!=="ENOENT"&&l!=="ENOTDIR")throw u}ov((0,lt.dirname)(r));let n=(0,lt.dirname)(r),o=(0,lt.basename)(r),s=(0,lt.join)(n,`.${o}.${process.pid}.${(0,Fl.randomBytes)(6).toString("hex")}.tmp`),i=Buffer.from(JSON.stringify(e,null,2)+`
23
- `,"utf-8"),a;try{a=(0,V.statSync)(r).mode&511}catch{}let c;try{c=a!==void 0?(0,V.openSync)(s,"w",a):(0,V.openSync)(s,"w");let u=0;for(;u<i.length;){let l=(0,V.writeSync)(c,i,u,i.length-u);if(l===0)throw new Error(`writeSync stalled at ${u}/${i.length} bytes`);u+=l}if((0,V.fsyncSync)(c),(0,V.closeSync)(c),c=void 0,(0,V.renameSync)(s,r),!nv){let l;try{l=(0,V.openSync)(n,"r"),(0,V.fsyncSync)(l)}catch{}finally{if(l!==void 0)try{(0,V.closeSync)(l)}catch{}}}}catch(u){if(c!==void 0)try{(0,V.closeSync)(c)}catch{}try{(0,V.unlinkSync)(s)}catch{}throw u}}var Bt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(Et(ue.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_GEMINI_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_GEMINI_MAX_TOKENS:"100000",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,pn.join)((0,bi.homedir)(),".keepmind"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"5",CLAUDE_MEM_OBSERVATION_BATCH_MAX:"3",CLAUDE_MEM_MAX_CONTEXT_MESSAGES:"40",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_UPDATE_CHECK_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,pn.join)((0,bi.homedir)(),".keepmind","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static envOverride(e){let r=e.replace(/^CLAUDE_MEM_/,"KEEPMIND_");return process.env[r]??process.env[e]}static get(e){return this.envOverride(e)??this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS)){let o=this.envOverride(n);o!==void 0&&(r[n]=o)}return r}static loadFromFile(e,r=!0){try{if(!(0,dt.existsSync)(e)){let a=this.getAllDefaults();try{let c=(0,pn.dirname)(e);(0,dt.existsSync)(c)||(0,dt.mkdirSync)(c,{recursive:!0}),Eo(e,a),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(c){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,c instanceof Error?c.message:String(c))}return r?this.applyEnvOverrides(a):a}let n=(0,dt.readFileSync)(e,"utf-8"),o=JSON.parse(n.replace(/^\uFEFF/,"")),s=o;if(o.env&&typeof o.env=="object"){s=o.env;try{Eo(e,s),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a instanceof Error?a.message:String(a))}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))s[a]!==void 0&&(i[a]=s[a]);return r?this.applyEnvOverrides(i):i}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let o=this.getAllDefaults();try{if((0,dt.existsSync)(e)){let s=`${e}.corrupt-${Date.now()}`;(0,dt.renameSync)(e,s),console.warn("[SETTINGS] Backed up corrupt settings file to:",s)}Eo(e,o),console.warn("[SETTINGS] Recovered settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to recover corrupt settings file:",e,s instanceof Error?s.message:String(s))}return r?this.applyEnvOverrides(o):o}}};var vo=null;function rt(){return vo!==null||(vo=Bt.loadFromFile(Nl)),vo}var Xt=require("fs");var Ti=require("child_process");var pt=require("fs"),$i=we(require("path"),1);var sv=["CLAUDECODE_","CLAUDE_CODE_"],iv=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID","HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy"]),av=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS"]);function Yt(t=process.env){let e={};for(let[r,n]of Object.entries(t))if(n!==void 0){if(av.has(r)){e[r]=n;continue}iv.has(r)||sv.some(o=>r.startsWith(o))||(e[r]=n)}return e}var cv=5e3,uv=1e3,lv=fe.supervisorRegistry();function vt(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(f.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return f.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function wo(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(n=>!vt(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}var dv=5e3,Zl=new Map;function pv(t){let e=Zl.get(t);if(e&&Date.now()-e.capturedAtMs<dv)return e.token;let r=null;try{let n=(0,Ti.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Yt(process.env),LC_ALL:"C",LANG:"C"}});if(n.status===0){let o=n.stdout.trim();r=o.length>0?o:null}}catch(n){f.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:n instanceof Error?n.message:String(n)}),r=null}return Zl.set(t,{token:r,capturedAtMs:Date.now()}),r}function ql(t){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux")try{let e=(0,pt.readFileSync)(`/proc/${t}/stat`,"utf-8"),r=e.lastIndexOf(") ");if(r<0)return null;let o=e.slice(r+2).split(" ")[19];return o&&/^\d+$/.test(o)?o:null}catch(e){return f.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}if(process.platform==="win32")return pv(t);try{let e=(0,Ti.spawnSync)("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Yt(process.env),LC_ALL:"C",LANG:"C"}});if(e.status!==0)return null;let r=e.stdout.trim();return r.length>0?r:null}catch(e){return f.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}}function Oi(t){if(!t||!vt(t.pid))return!1;if(!t.startToken)return!0;let e=ql(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||f.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}var Pi=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=lv){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,(0,pt.mkdirSync)($i.default.dirname(this.registryPath),{recursive:!0}),!(0,pt.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,pt.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[o,s]of Object.entries(n))this.entries.set(o,s)}catch(r){r instanceof Error?f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&f.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,r,n){this.initialize(),this.entries.set(e,r),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e){this.initialize();let r=this.entries.get(e);this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist(),r?.type==="sdk"&&xi()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let n=Date.parse(e.startedAt),o=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(o)?0:o)})}getBySession(e){let r=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}getByPid(e){return this.getAll().filter(r=>r.pid===e)}pruneDeadEntries(){this.initialize();let e=0,r=0;for(let[n,o]of this.entries)vt(o.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,o.type==="sdk"&&(r+=1));e>0&&this.persist();for(let n=0;n<r;n+=1)xi();return e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;f.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:n,pids:r.map(i=>i.pid)});let o=r.filter(i=>vt(i.pid));for(let i of o)try{typeof i.pgid=="number"&&process.platform!=="win32"?process.kill(-i.pgid,"SIGTERM"):process.kill(i.pid,"SIGTERM")}catch(a){a instanceof Error?a.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGTERM session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):f.warn("SYSTEM",`Failed to SIGTERM session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}await wo(o,cv);let s=o.filter(i=>vt(i.pid));for(let i of s){f.warn("SYSTEM",`Session process PID ${i.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:i.pid,pgid:i.pgid,sessionId:n});try{typeof i.pgid=="number"&&process.platform!=="win32"?process.kill(-i.pgid,"SIGKILL"):process.kill(i.pid,"SIGKILL")}catch(a){a instanceof Error?a.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGKILL session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):f.warn("SYSTEM",`Failed to SIGKILL session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}}if(s.length>0){let i=Date.now()+uv;for(;Date.now()<i&&s.filter(c=>vt(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100))}for(let i of r)this.entries.delete(i.id),this.runtimeProcesses.delete(i.id);this.persist();for(let i of r)i.type==="sdk"&&xi();return f.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:n,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};(0,pt.mkdirSync)($i.default.dirname(this.registryPath),{recursive:!0}),(0,pt.writeFileSync)(this.registryPath,JSON.stringify(e,null,2))}},ki=null;function bo(){return ki||(ki=new Pi),ki}var fv=[];function xi(){let t=fv.shift();t&&t()}var Vl=require("child_process"),vr=require("fs"),Kl=require("util");var mv=(0,Kl.promisify)(Vl.execFile),hv=fe.workerPid();async function Wl(t){let e=t.currentPid??process.pid,r=t.pidFilePath??hv,n=t.registry.getAll(),o=[...n].filter(i=>i.pid!==e).sort((i,a)=>Date.parse(a.startedAt)-Date.parse(i.startedAt));for(let i of o){if(!vt(i.pid)){t.registry.unregister(i.id);continue}try{await Hl(i,"SIGTERM")}catch(a){a instanceof Error?f.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):f.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}}await wo(o,5e3);let s=o.filter(i=>vt(i.pid));for(let i of s)try{await Hl(i,"SIGKILL")}catch(a){a instanceof Error?f.debug("SYSTEM","Failed to force kill child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):f.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}await wo(s,1e3);for(let i of o)t.registry.unregister(i.id);for(let i of n.filter(a=>a.pid===e))t.registry.unregister(i.id);gv(r,e),t.registry.pruneDeadEntries()}function gv(t,e){if(!(0,vr.existsSync)(t))return;let r=null;try{let n=JSON.parse((0,vr.readFileSync)(t,"utf-8"));r=typeof n.pid=="number"?n.pid:null}catch(n){f.debug("SYSTEM","PID file unreadable during shutdown \u2014 leaving it (cannot prove ownership)",{pidFilePath:t,error:n instanceof Error?n.message:String(n)});return}if(r!==e){f.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:t,recordedPid:r,currentPid:e});return}try{(0,vr.rmSync)(t,{force:!0})}catch(n){n instanceof Error?f.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:t},n):f.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:t,error:String(n)})}}async function Hl(t,e){let{pid:r,pgid:n}=t;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(i){if((i instanceof Error?i.code:void 0)!=="ESRCH")throw i}try{process.kill(r,e)}catch(i){if((i instanceof Error?i.code:void 0)!=="ESRCH")throw i}return}if(e==="SIGTERM"){try{process.kill(r,e)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}let o=await _v();if(o){await new Promise((i,a)=>{o(r,e,c=>{if(!c){i();return}if(c.code==="ESRCH"){i();return}a(c)})});return}let s=["/PID",String(r),"/T"];e==="SIGKILL"&&s.push("/F"),await mv("taskkill",s,{timeout:ue.POWERSHELL_COMMAND,windowsHide:!0})}async function _v(){let t="tree-kill";try{let e=await import(t);return e.default??e}catch(e){return f.debug("SYSTEM","tree-kill module not available, using fallback",{},e instanceof Error?e:void 0),null}}var Jl=3e4,wr=null;function yv(){let e=bo().pruneDeadEntries();e>0&&f.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function Gl(){wr===null&&(wr=setInterval(yv,Jl),wr.unref(),f.debug("SYSTEM","Health checker started",{intervalMs:Jl}))}function Bl(){wr!==null&&(clearInterval(wr),wr=null,f.debug("SYSTEM","Health checker stopped"))}var Sv=fe.workerPid(),zi=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),fn({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Gl()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){f.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,f.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(o){o instanceof Error?f.error("SYSTEM","Error during shutdown",{},o):f.error("SYSTEM","Error during shutdown (non-Error)",{error:String(o)});try{await this.stop()}catch(s){s instanceof Error?f.debug("SYSTEM","Supervisor shutdown fallback failed",{},s):f.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(s)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{f.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}Bl(),this.stopPromise=Wl({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,n){this.registry.register(e,r,n)}unregisterProcess(e){this.registry.unregister(e)}getRegistry(){return this.registry}},Ev=new zi(bo());function Ri(){return Ev}function fn(t={}){let e=t.pidFilePath??Sv;if(!(0,Xt.existsSync)(e))return"missing";let r=null;try{r=JSON.parse((0,Xt.readFileSync)(e,"utf-8"))}catch(o){return o instanceof Error?f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},o):f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(o)}),(0,Xt.rmSync)(e,{force:!0}),"invalid"}return Oi(r)&&r?((t.logAlive??!0)&&f.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(f.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),(0,Xt.rmSync)(e,{force:!0}),"stale")}var Ql=we(require("path"),1),ed=require("os"),be=require("fs"),td=require("child_process");function Yl(t){return t instanceof Error?t:new Error(String(t))}var iC=fe.dataDir(),ft=fe.workerPid(),aC=fe.workerPort();function Xl(t){return t?/(^|[\\/])node(\.exe)?$/i.test(t.trim()):!1}function vv(t,e){let r=e==="win32"?`where ${t}`:`which ${t}`,n;try{n=(0,td.execSync)(r,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(s){return s instanceof Error?f.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},s):f.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},new Error(String(s))),null}return n.split(/\r?\n/).map(s=>s.trim()).find(s=>s.length>0)||null}var Ii;function Ci(t={}){let e=Object.keys(t).length===0;if(e&&Ii!==void 0)return Ii;let r=wv(t);return e&&r!==null&&(Ii=r),r}function wv(t){let e=t.platform??process.platform,r=t.execPath??process.execPath;if(Xl(r))return r;let n=t.env??process.env,o=t.homeDirectory??(0,ed.homedir)(),s=t.pathExists??be.existsSync,i=t.lookupInPath??vv,a=e==="win32"?[n.NODE,Ql.default.join(o,".nvm","current","bin","node.exe"),"node"]:[n.NODE,"/usr/local/bin/node","/opt/homebrew/bin/node","/usr/bin/node","node"];for(let c of a){let u=c?.trim();if(u&&(Xl(u)&&s(u)||u.toLowerCase()==="node"))return u}return i("node",e)}function rd(){if(!(0,be.existsSync)(ft))return null;try{return JSON.parse((0,be.readFileSync)(ft,"utf-8"))}catch(t){return t instanceof Error?f.warn("SYSTEM","Failed to parse PID file",{path:ft},t):f.warn("SYSTEM","Failed to parse PID file",{path:ft},new Error(String(t))),null}}function nd(){if((0,be.existsSync)(ft))try{(0,be.unlinkSync)(ft)}catch(t){t instanceof Error?f.warn("SYSTEM","Failed to remove PID file",{path:ft},t):f.warn("SYSTEM","Failed to remove PID file",{path:ft},new Error(String(t)))}}function Rt(t){return process.platform==="win32"?Math.round(t*2):t}function od(t,e,r={}){Ri().assertCanSpawn("worker daemon");let n=Yt({...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r}),o=Ci();if(!o){f.error("SYSTEM","Node runtime not found \u2014 ensure node is on PATH or set the NODE env var. The worker daemon runs under Node (node:sqlite).");return}if(process.platform==="win32")try{let l=yr(o,[t,"--daemon"],{detached:!0,stdio:"ignore",windowsHide:!0,env:n});if(l.pid===void 0){f.error("SYSTEM","Worker daemon spawn produced no PID on Windows",{runtimePath:o});return}return l.unref(),l.pid}catch(l){f.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:o},Yl(l));return}let s="/usr/bin/setsid",i=(0,be.existsSync)(s),u=yr(i?s:o,i?[o,t,"--daemon"]:[t,"--daemon"],{detached:!0,stdio:"ignore",env:n});if(u.pid!==void 0)return u.unref(),u.pid}function sd(t){if(t===0)return!0;if(!Number.isInteger(t)||t<0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;if(r==="EPERM")return!0;f.debug("SYSTEM","Process not alive",{pid:t,code:r})}else f.debug("SYSTEM","Process not alive (non-Error thrown)",{pid:t},new Error(String(e)));return!1}}function id(){try{if(!(0,be.existsSync)(ft))return;let t=new Date;(0,be.utimesSync)(ft,t,t)}catch{}}function ad(){return fn({logAlive:!1})}var cd=we(require("path"),1),ud=we(require("net"),1),ld=require("fs");var bv=2500;async function dd(t,e,r="GET"){let n=await fetch(`http://127.0.0.1:${t}${e}`,{method:r,signal:AbortSignal.timeout(bv)}),o="";try{o=await n.text()}catch{}return{ok:n.ok,statusCode:n.status,body:o}}async function pd(t){return new Promise(e=>{let r=ud.default.createServer();r.once("error",n=>{n.code==="EADDRINUSE"||n.code==="EACCES"?e(!0):e(!1)}),r.once("listening",()=>{r.close(()=>e(!1))}),r.listen(t,"127.0.0.1")})}async function fd(t,e,r,n){let o=Date.now();for(;Date.now()-o<r;){try{if((await dd(t,e)).ok)return!0}catch(s){s instanceof Error?f.debug("SYSTEM",n,{},s):f.debug("SYSTEM",n,{error:String(s)})}await new Promise(s=>setTimeout(s,500))}return!1}function mn(t,e=3e4){return fd(t,"/api/health",e,"Service not ready yet, will retry")}function hn(t,e=3e4){return fd(t,"/api/readiness",e,"Worker not ready yet, will retry")}function kv(){try{let t=cd.default.join(Er,"package.json");return JSON.parse((0,ld.readFileSync)(t,"utf-8")).version}catch(t){if(t instanceof Error){let e=t.code;if(e==="ENOENT"||e==="EBUSY")return f.debug("SYSTEM","Could not read plugin version (shutdown race)",{code:e}),"unknown";throw t}throw t}}async function xv(t){try{let e=await dd(t,"/api/version");return e.ok?JSON.parse(e.body).version:null}catch{return f.debug("SYSTEM","Could not fetch worker version",{}),null}}async function md(t){let e=kv(),r=await xv(t);return!r||e==="unknown"?{matches:!0,pluginVersion:e,workerVersion:r}:{matches:e===r,pluginVersion:e,workerVersion:r}}var ko=require("path"),Ke=require("fs");var $v=6e4;function hd(){return(0,ko.join)(mi(),"spawn.lock")}function xo(){let t=hd(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let r=0;r<2;r++)try{return(0,Ke.mkdirSync)((0,ko.dirname)(t),{recursive:!0}),(0,Ke.writeFileSync)(t,e,{flag:"wx"}),!0}catch(n){if(n?.code!=="EEXIST")return!0;if(r>0)return!1;let s;try{s=(0,Ke.statSync)(t).mtimeMs}catch{continue}if(Date.now()-s<=$v)return!1;let i;try{i=(0,Ke.statSync)(t).mtimeMs}catch{continue}if(i!==s)return!1;try{(0,Ke.unlinkSync)(t)}catch{return!1}}return!1}function $o(){let t=hd();try{if(JSON.parse((0,Ke.readFileSync)(t,"utf-8")).pid!==process.pid)return;(0,Ke.unlinkSync)(t)}catch{}}function Di(t,e,r){let n=process.env[t];if(n){let o=parseInt(n,10);if(Number.isFinite(o)&&o>=r.min&&o<=r.max)return o;f.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max})}return e}var Io=Di("CLAUDE_MEM_HEALTH_TIMEOUT_MS",Et(ue.HEALTH_CHECK),{min:500,max:3e5}),CC=Di("CLAUDE_MEM_API_TIMEOUT_MS",Et(ue.API_REQUEST),{min:500,max:3e5}),Sd=Di("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",Et(ue.HOOK_READINESS_WAIT),{min:0,max:3e5}),Pv={min:500,max:3e5};async function Li(t,e={},r){try{return await fetch(t,{...e,signal:AbortSignal.timeout(r)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${r}ms`):n}}var Po=null,To=null,Oo=null,zo=null;function Tv(){return br.default.join(Bt.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Ov(t){if(!Number.isInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}function zv(){try{let t=fe.workerPid();if(!(0,Fe.existsSync)(t))return null;let e=JSON.parse((0,Fe.readFileSync)(t,"utf-8"));return typeof e.pid!="number"||typeof e.port!="number"||!Ov(e.pid)?null:e.port}catch{return null}}function ji(){return Oo!==null||(Oo=Bt.loadFromFile(Tv())),Oo}function gd(t,e){if(!t)return null;let r=parseInt(t,10);return Number.isFinite(r)&&r>=e.min&&r<=e.max?r:null}function Rv(t,e,r){let n=process.env[t];if(n!==void 0){let i=gd(n,r);return i!==null?i:(f.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max}),e)}let o=ji()[t],s=gd(o,r);return s!==null?s:(f.warn("SYSTEM",`Invalid ${t} in settings.json, using default`,{value:o,min:r.min,max:r.max}),e)}function Iv(){if(Po!==null)return Po;let t=ji();return Po=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),Po}function It(){let t=zv();return t!==null?t:Iv()}function Cv(){return To!==null||(To=ji().CLAUDE_MEM_WORKER_HOST),To}function Av(){return zo!==null||(zo=Rv("CLAUDE_MEM_API_TIMEOUT_MS",Et(ue.API_REQUEST),Pv)),zo}function Mv(t){return`http://${Cv()}:${It()}${t}`}function Qt(t,e={}){let r=e.method??"GET",n=e.timeoutMs??Av(),o=Mv(t),s={method:r};return e.headers&&(s.headers=e.headers),e.body&&(s.body=e.body),n>0?Li(o,s,n):fetch(o,s)}async function Nv(){return(await Qt("/api/health",{timeoutMs:Io})).ok}async function _d(){return(await Qt("/api/readiness",{timeoutMs:Io})).ok}function Ui(){let t=[br.default.join(Er,"plugin","scripts","worker-service.cjs"),br.default.join(process.cwd(),"plugin","scripts","worker-service.cjs")];for(let e of t)if((0,Fe.existsSync)(e))return e;return null}async function Dv(t){let e=t.backoffMs;for(let r=1;r<=t.attempts;r++){if(await vd())return!0;r<t.attempts&&(await new Promise(n=>setTimeout(n,e)),e*=2)}return!1}async function Ai(t=Sd){if(t<=0)try{return await _d()}catch{return!1}let e=Date.now();for(;Date.now()-e<t;){try{if(await _d())return!0}catch(n){f.debug("SYSTEM","Worker readiness check threw",{error:n instanceof Error?n.message:String(n)})}let r=t-(Date.now()-e);if(r<=0)break;await new Promise(n=>setTimeout(n,Math.min(250,r)))}return!1}async function Ed(){try{let e=await(await Qt("/api/health",{timeoutMs:Io})).json();return typeof e.version=="string"?e.version:null}catch{return null}}async function Lv(t,e=Sd){let r=Date.now();for(;Date.now()-r<e;){if(await Ed()===t)return!0;let o=e-(Date.now()-r);if(o<=0)break;await new Promise(s=>setTimeout(s,Math.min(500,o)))}return!1}async function Mi(t){let e=await Ed();e!==null&&e!==t&&f.warn("SYSTEM","Worker is ready but still reports a stale version; not recycling again in this hook invocation (one recycle per hook event)",{pluginVersion:t,workerVersion:e})}async function vd(){let t;try{t=await Nv()}catch(r){return f.debug("SYSTEM","Worker health check threw",{error:r instanceof Error?r.message:String(r)}),!1}if(!t)return!1;let e=fn({logAlive:!1});return e==="missing"||e==="alive"}async function jv(){let t=null;if(await vd()){let{matches:s,pluginVersion:i,workerVersion:a}=await md(It());if(i!=="unknown"&&(t=i),s)return await Ai()?(t!==null&&await Mi(t),!0):(f.warn("SYSTEM","Worker is healthy but not ready; skipping hook API call"),!1);f.info("SYSTEM","Worker version mismatch \u2014 recycling stale worker",{pluginVersion:i,workerVersion:a});try{if(await Qt("/api/admin/restart",{method:"POST",timeoutMs:Io}),await Lv(i))return await Ai()?(t!==null&&await Mi(t),!0):(f.warn("SYSTEM","Recycled worker appeared but did not become ready; skipping hook API call"),!1);f.warn("SYSTEM","No successor worker appeared after recycle; falling through to lazy-spawn",{pluginVersion:i,workerVersion:a})}catch(c){f.debug("SYSTEM","Worker restart request failed; falling through to lazy-spawn",{error:c instanceof Error?c.message:String(c)})}}let e=Ci(),r=Ui();if(!e)return f.warn("SYSTEM","Cannot lazy-spawn worker: Node runtime not found on PATH"),!1;if(!r)return f.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;let n=xo();try{if(n){f.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:e,scriptPath:r});try{yr(e,[r,"--daemon"],{detached:!0,stdio:["ignore","ignore","ignore"]}).unref()}catch(i){return i instanceof Error?f.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:e,scriptPath:r},i):f.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:e,scriptPath:r,error:String(i)}),!1}}else f.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await Dv({attempts:6,backoffMs:500}))return f.warn("SYSTEM",n?"Worker port did not open after lazy-spawn within the cold-boot wait (~15s)":"Spawn-lock holder's worker port did not open within the cold-boot wait (~15s)"),!1}finally{n&&$o()}return await Ai()?(t!==null&&await Mi(t),!0):(f.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout"),!1)}var Ro=null;async function Uv(){return Ro!==null||(Ro=await jv()),Ro}var Fv=3;function wd(){return br.default.join(J,"state")}function bd(){return br.default.join(wd(),"hook-failures.json")}function kd(){try{let t=(0,Fe.readFileSync)(bd(),"utf-8"),e=JSON.parse(t);return{consecutiveFailures:typeof e.consecutiveFailures=="number"&&Number.isFinite(e.consecutiveFailures)?Math.max(0,Math.floor(e.consecutiveFailures)):0,lastFailureAt:typeof e.lastFailureAt=="number"&&Number.isFinite(e.lastFailureAt)?e.lastFailureAt:0}}catch{return{consecutiveFailures:0,lastFailureAt:0}}}function xd(t){let e=wd(),r=bd(),n=`${r}.tmp`;try{(0,Fe.existsSync)(e)||(0,Fe.mkdirSync)(e,{recursive:!0}),(0,Fe.writeFileSync)(n,JSON.stringify(t),"utf-8"),(0,Fe.renameSync)(n,r)}catch(o){f.debug("SYSTEM","Failed to persist hook-failure counter",{error:o instanceof Error?o.message:String(o)})}}function Zv(){try{let e=rt().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,r=parseInt(e,10);if(Number.isFinite(r)&&r>=1)return r}catch{}return Fv}var qv=["context","session-init","observation","summarize","file-context"],Hv=null;function $d(t){Hv=qv.includes(t)?t:null}async function Fi(){let e={consecutiveFailures:kd().consecutiveFailures+1,lastFailureAt:Date.now()};xd(e);let r=Zv();return e.consecutiveFailures>=r&&ln(`keepmind worker unreachable for ${e.consecutiveFailures} consecutive hooks \u2014 continuing without memory capture. Run \`keepmind doctor\` to diagnose.`),e.consecutiveFailures}function yd(){kd().consecutiveFailures!==0&&xd({consecutiveFailures:0,lastFailureAt:0})}var Ni=Symbol.for("claude-mem/worker-fallback");function me(t){return typeof t=="object"&&t!==null&&t[Ni]===!0}async function le(t,e,r,n={}){if(!await Uv())return await Fi(),{continue:!0,reason:"worker_unreachable",[Ni]:!0};let s={method:e};r!==void 0&&(s.headers={"Content-Type":"application/json"},s.body=JSON.stringify(r)),n.timeoutMs!==void 0&&(s.timeoutMs=n.timeoutMs);let i=await Qt(t,s);if(!i.ok){let c=await i.text().catch(()=>"");if(yd(),i.status===429||i.status>=500)return f.warn("SYSTEM",`Worker API ${e} ${t} returned ${i.status}; skipping hook API call`,{body:c.substring(0,200)}),{continue:!0,reason:`worker_api_${i.status}`,[Ni]:!0};let u=c;try{u=JSON.parse(c)}catch{}return u}yd();let a=await i.text();if(a.length!==0)try{return JSON.parse(a)}catch{return a}}var Pd=require("fs");function Vv(t){let e=rd();return e&&typeof e.port=="number"&&sd(e.pid)?e.port:t}async function Kv(t,e){let r=Date.now()+e;for(;Date.now()<r;){let n=Vv(t);if(await mn(n,800))return n;await new Promise(o=>setTimeout(o,300))}return null}async function Td(t,e){if(!e)return f.error("SYSTEM","ensureWorkerStarted called with empty workerScriptPath \u2014 caller bug"),"dead";if(!(0,Pd.existsSync)(e))return f.error("SYSTEM","ensureWorkerStarted: worker script not found at expected path \u2014 likely a partial install or build artifact missing",{workerScriptPath:e}),"dead";if(await mn(t,1e3)){let a=await hn(t,Rt(ue.READINESS_WAIT));return a||f.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),f.info("SYSTEM","Worker already running and healthy (fast path)"),a?"ready":"warming"}if(ad()==="alive"){if(f.info("SYSTEM","Worker PID file points to a live process, waiting for it to become healthy"),await mn(t,Rt(ue.POST_SPAWN_WAIT))){let c=await hn(t,Rt(ue.READINESS_WAIT));return f.info("SYSTEM","Worker became healthy while waiting on live PID"),c?"ready":"warming"}f.warn("SYSTEM","PID file marked live but worker never became healthy within the cold-boot window \u2014 treating it as a stale/reused PID and re-spawning"),nd()}if(await pd(t)){if(f.info("SYSTEM","Port in use, waiting for worker to become healthy"),await mn(t,Rt(ue.PORT_IN_USE_WAIT))){let c=await hn(t,Rt(ue.READINESS_WAIT));return f.info("SYSTEM","Worker is now healthy"),c?"ready":"warming"}f.warn("SYSTEM","Configured port in use but no healthy worker \u2014 spawning anyway (worker will pick a free ephemeral port)")}let o=xo(),s=t;try{if(o){if(f.info("SYSTEM","Starting worker daemon",{workerScriptPath:e}),od(e,t)===void 0)return f.error("SYSTEM","Failed to spawn worker daemon"),"dead"}else f.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping duplicate spawn and waiting for its worker");let a=await Kv(t,Rt(ue.POST_SPAWN_WAIT));if(a===null)return f.warn("SYSTEM",o?"Worker spawned but health endpoint not responding within window \u2014 likely still starting in background":"Spawn-lock holder's worker not healthy within window \u2014 likely still starting in background"),"warming";s=a}finally{o&&$o()}let i=await hn(s,Rt(ue.READINESS_WAIT));return i||f.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),id(),f.info("SYSTEM",o?"Worker started successfully":"Worker is up (started by another launcher)"),i?"ready":"warming"}function Wv(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch(t){return f.debug("HOOK","stdin not available (expected for some runtimes)",{error:t instanceof Error?t.message:String(t)}),!1}}function Jv(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch(r){return f.debug("HOOK","JSON parse attempt incomplete",{error:r instanceof Error?r.message:String(r)}),{success:!1}}}var Od=3e4;async function zd(){if(Wv())return new Promise((t,e)=>{let r="",n=!1,o=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},s=p=>{n||(n=!0,clearTimeout(c),o(),t(p))},i=p=>{n||(n=!0,clearTimeout(c),o(),e(p))},a=()=>{let p=Jv(r);return p.success?(s(p.value),!0):!1},c=setTimeout(()=>{n||a()||(r.trim()?i(new Error(`Incomplete JSON after ${Od}ms: ${r.slice(0,100)}...`)):s(void 0))},Od),u=p=>{r+=p,a()},l=()=>{n||a()||(r.trim()?i(new Error(`Malformed JSON at stdin EOF: ${r.slice(0,100)}...`)):s(void 0))},d=()=>{n||s(void 0)};try{process.stdin.on("data",u),process.stdin.on("end",l),process.stdin.on("error",d)}catch(p){f.debug("HOOK","Failed to attach stdin listeners",{error:p instanceof Error?p.message:String(p)}),n=!0,clearTimeout(c),o(),t(void 0)}})}var he=class extends Error{constructor(r){super(`adapter rejected input: ${r}`);this.reason=r;this.name="AdapterRejectedInput"}reason};function We(t){return typeof t=="string"&&t.length>0}var Gv=128,Rd=t=>typeof t=="string"&&t.length>0&&t.length<=Gv?t:void 0,Id={normalizeInput(t){let e=t??{},r=e.cwd??process.cwd();if(!We(r))throw new he("invalid_cwd");return{sessionId:e.session_id??e.id??e.sessionId,cwd:r,prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path,agentId:Rd(e.agent_id),agentType:Rd(e.agent_type)}},formatOutput(t){let e=t??{};if(e.hookSpecificOutput){let n={hookSpecificOutput:t.hookSpecificOutput};return e.systemMessage&&(n.systemMessage=e.systemMessage),n}let r={};return e.systemMessage&&(r.systemMessage=e.systemMessage),r}};var Ao=require("fs"),Co=we(require("path"),1),Vd=we(qd(),1),iw=10,aw=new Set(["cat","head","tail","less","more","bat","view","nl","tac"]),cw={head:new Set(["-n","-c","--lines","--bytes"]),tail:new Set(["-n","-c","--lines","--bytes"])},uw=new Set;function lw(t){return typeof t=="object"&&t!==null&&"op"in t}function dw(t){let e=[],r=[];for(let n of t){if(lw(n)){r.length>0&&e.push(r),r=[];continue}typeof n=="string"&&r.push(n)}return r.length>0&&e.push(r),e}function pw(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.filter(r=>typeof r=="string");return e.length>0?e.join(" "):null}return null}function Hd(t){return t.startsWith("-")||t.startsWith("+")}function fw(t){return cw[t]??uw}function mw(t,e){let r=fw(e);if(r.has(t))return!0;let n=t.indexOf("=");return n>0&&r.has(t.slice(0,n))}function Kd(t,e){let r=Co.default.isAbsolute(t)?t:Co.default.resolve(e,t);try{return(0,Ao.existsSync)(r)?(0,Ao.statSync)(r).isFile():!1}catch{return!1}}function Wd(t){let e=new Set,r=[];for(let n of t)if(!e.has(n)&&(e.add(n),r.push(n),r.length>=iw))break;return r}function hw(t,e){let r=pw(t?.command);if(!r)return[];let n=(0,Vd.parse)(r),o=[];for(let s of dw(n)){let i=s.findIndex(u=>u&&!Hd(u));if(i===-1)continue;let a=Co.default.basename(s[i]);if(!aw.has(a))continue;let c=!1;for(let u of s.slice(i+1)){if(c){c=!1;continue}if(Hd(u)){c=mw(u,a)&&!u.includes("=");continue}Kd(u,e)&&o.push(u)}}return Wd(o)}function gw(t,e,r){if(!/^mcp__.+__(read|view|cat)(?:_file|_files)?$/.test(t))return[];let n=e??{},o=[];if(typeof n.path=="string"&&o.push(n.path),Array.isArray(n.paths))for(let s of n.paths)typeof s=="string"&&o.push(s);return Wd(o.filter(s=>Kd(s,r)))}function Jd(t,e,r){return t==="Bash"?hw(e,r):t.startsWith("mcp__")?gw(t,e,r):[]}var _w=new Set(["PreToolUse","PermissionRequest","PostToolUse","SessionStart","UserPromptSubmit","Stop"]);function Gd(t){return typeof t=="string"&&_w.has(t)?t:void 0}function Ct(t){return typeof t=="string"&&t.length>0?t:void 0}function yw(t){if(typeof t=="boolean")return t;if(t==="true")return!0;if(t==="false")return!1}function Sw(t){return t&&typeof t=="object"&&!Array.isArray(t)?{...t}:t}function Ew(t){let e={};return t.continue!==void 0&&(e.continue=t.continue),t.systemMessage&&(e.systemMessage=t.systemMessage),t.decision==="block"&&(e.decision="block"),t.reason&&(e.reason=t.reason),e}function vw(t){return Gd(t.hookSpecificOutput?.hookEventName)}var Bd={normalizeInput(t){let e=t??{},r=typeof e.cwd=="string"?e.cwd:process.cwd();if(!We(r))throw new he("invalid_cwd");let n=Gd(e.hook_event_name),o=Ct(e.tool_name),s=Sw(e.tool_input);if(n==="PreToolUse"&&o){let u=Jd(o,s,r);u.length>0&&s&&typeof s=="object"&&!Array.isArray(s)&&(s={...s,filePaths:u})}let i=e.source,a=i==="startup"||i==="resume"||i==="clear"?i:void 0,c=Ct(e.session_id);if(!c)throw new he("missing_session_id");return{sessionId:c,cwd:r,prompt:Ct(e.prompt),toolName:o,toolInput:s,toolResponse:e.tool_response,transcriptPath:Ct(e.transcript_path),lastAssistantMessage:Ct(e.last_assistant_message),turnId:Ct(e.turn_id),stopHookActive:yw(e.stop_hook_active),permissionMode:Ct(e.permission_mode),model:Ct(e.model),sessionSource:a}},formatOutput(t){let e=t??{},r=Ew(e),n=e.hookSpecificOutput,o=vw(e);if(!n||!o||o==="Stop")return r;let s={hookEventName:o};return n.additionalContext&&(s.additionalContext=n.additionalContext),o==="PreToolUse"&&(n.permissionDecision==="deny"&&(s.permissionDecision="deny",n.permissionDecisionReason&&(s.permissionDecisionReason=n.permissionDecisionReason)),n.updatedInput&&(s.updatedInput=n.updatedInput)),r.hookSpecificOutput=s,r}};var Yd=require("fs"),Xd=require("os"),Qd=require("path");var ww=/^[A-Za-z0-9_-]+$/;function bw(t,e){if(!t||!e||!ww.test(e))return;let r=t.replace(/^\//,"").replace(/[/.]/g,"-"),n=(0,Qd.join)((0,Xd.homedir)(),".cursor","projects",r,"agent-transcripts",e,`${e}.jsonl`);return(0,Yd.existsSync)(n)?n:void 0}var ep={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name,n=e.workspace_roots?.[0]??e.cwd??process.cwd();if(!We(n))throw new he("invalid_cwd");let o=e.conversation_id||e.generation_id||e.id;return{sessionId:o,cwd:n,prompt:e.prompt??e.query??e.input??e.message,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:bw(n,o),filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}};var tp={normalizeInput(t){let e=t??{},r=e.cwd??process.env.GEMINI_CWD??process.env.GEMINI_PROJECT_DIR??process.env.CLAUDE_PROJECT_DIR??process.cwd();if(!We(r))throw new he("invalid_cwd");let n=e.session_id??process.env.GEMINI_SESSION_ID??void 0,o=e.hook_event_name,s=e.tool_name,i=e.tool_input,a=e.tool_response;return o==="AfterAgent"&&e.prompt_response&&(s=s??"GeminiProvider",i=i??{prompt:e.prompt},a=a??{response:e.prompt_response}),o==="BeforeTool"&&s&&!a&&(a={_preExecution:!0}),o==="Notification"&&(s=s??"GeminiNotification",i=i??{notification_type:e.notification_type,message:e.message},a=a??{details:e.details}),{sessionId:n,cwd:r,prompt:e.prompt,toolName:s,toolInput:i,toolResponse:a,transcriptPath:e.transcript_path}},formatOutput(t){let e={};if(e.continue=t.continue??!0,t.suppressOutput!==void 0&&(e.suppressOutput=t.suppressOutput),t.systemMessage){let r=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;e.systemMessage=t.systemMessage.replace(r,"")}return t.hookSpecificOutput&&(e.hookSpecificOutput={additionalContext:t.hookSpecificOutput.additionalContext}),e}};var Vi={normalizeInput(t){let e=t??{},r=e.cwd??process.cwd();if(!We(r))throw new he("invalid_cwd");return{sessionId:e.sessionId??e.session_id??"unknown",cwd:r,prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}};var rp={normalizeInput(t){let e=t??{},r=e.tool_info??{},n=e.agent_action_name??"",o=r.cwd??process.cwd();if(!We(o))throw new he("invalid_cwd");let s={sessionId:e.trajectory_id??e.execution_id,cwd:o,platform:"windsurf"};switch(n){case"pre_user_prompt":return{...s,prompt:r.user_prompt};case"post_write_code":return{...s,toolName:"Write",filePath:r.file_path,edits:r.edits,toolInput:{file_path:r.file_path,edits:r.edits}};case"post_run_command":return{...s,cwd:r.cwd??s.cwd,toolName:"Bash",toolInput:{command:r.command_line}};case"post_mcp_tool_use":return{...s,toolName:r.mcp_tool_name??"mcp_tool",toolInput:r.mcp_tool_arguments,toolResponse:r.mcp_result};case"post_cascade_response":return{...s,toolName:"cascade_response",toolResponse:r.response};default:return s}},formatOutput(t){return{continue:t.continue??!0}}};function np(t){switch(t){case"claude-code":return Id;case"codex":return Bd;case"cursor":return ep;case"gemini":case"gemini-cli":return tp;case"windsurf":return rp;case"raw":return Vi;default:return Vi}}var sp=require("os"),ip=we(require("path"),1),ap=require("child_process");var No=require("fs"),Mo=we(require("path"),1);var gn={isWorktree:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function op(t){let e=Mo.default.join(t,".git"),r;try{r=(0,No.statSync)(e)}catch(l){return l instanceof Error&&l.code!=="ENOENT"&&f.warn("GIT","Unexpected error checking .git",{error:l instanceof Error?l.message:String(l)}),gn}if(!r.isFile())return gn;let n;try{n=(0,No.readFileSync)(e,"utf-8").trim()}catch(l){return f.warn("GIT","Failed to read .git file",{error:l instanceof Error?l.message:String(l)}),gn}let o=n.match(/^gitdir:\s*(.+)$/);if(!o)return gn;let i=o[1].match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(!i)return gn;let a=i[1],c=Mo.default.basename(t),u=Mo.default.basename(a);return{isWorktree:!0,worktreeName:c,parentRepoPath:a,parentProjectName:u}}function cp(t){return t==="~"||t.startsWith("~/")?t.replace(/^~/,(0,sp.homedir)()):t}function kw(t){try{return(0,ap.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch{return null}}function Ki(t){if(!t||t.trim()==="")return f.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:t}),"unknown-project";let e=cp(t),n=kw(e)??e,o=ip.default.basename(n);if(o===""){if(process.platform==="win32"){let i=t.match(/^([A-Z]):\\/i);if(i){let c=`drive-${i[1].toUpperCase()}`;return f.info("PROJECT_NAME","Drive root detected",{cwd:t,projectName:c}),c}}return f.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:t}),"unknown-project"}return o}function kr(t){let e=Ki(t);if(!t)return{primary:e,parent:null,isWorktree:!1,allProjects:[e]};let r=cp(t),n=op(r);if(n.isWorktree&&n.parentProjectName){let o=`${n.parentProjectName}/${e}`;return{primary:o,parent:n.parentProjectName,isWorktree:!0,allProjects:[n.parentProjectName,o]}}return{primary:e,parent:null,isWorktree:!1,allProjects:[e]}}var up=require("child_process"),lp=require("util"),tr=require("fs");var dp=require("path");var vA=(0,lp.promisify)(up.execFile);function pp(){try{let t=(0,dp.join)(fe.dataDir(),"oauth-stale.marker");return(0,tr.existsSync)(t)?(0,tr.readFileSync)(t,"utf-8"):void 0}catch{return}}var xr=require("node:fs"),hp=require("node:path");var fp="1.3.2";var mp=(0,hp.join)(J,".update-check.json"),xA=1440*60*1e3,xw=10080*60*1e3;function Do(t){return t.replace(/^v/,"").trim()}function $w(t,e){let r=Do(t).split(".").map(o=>parseInt(o,10)||0),n=Do(e).split(".").map(o=>parseInt(o,10)||0);for(let o=0;o<3;o++){let s=(r[o]||0)-(n[o]||0);if(s!==0)return s}return 0}function Pw(){try{if(!(0,xr.existsSync)(mp))return null;let t=JSON.parse((0,xr.readFileSync)(mp,"utf-8"));if(t&&typeof t.latestVersion=="string"&&typeof t.checkedAtEpoch=="number")return{latestVersion:t.latestVersion,checkedAtEpoch:t.checkedAtEpoch}}catch{}return null}function gp(t=Date.now()){let e=Pw();return!e||t-e.checkedAtEpoch>xw||$w(e.latestVersion,fp)<=0?null:`\u{1F4E6} keepmind ${Do(e.latestVersion)} is available (you have ${Do(fp)}). Update with \`npx keepmind@latest update\`, then restart your editor.`}var _p="claude";function Tw(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Ce(t){if(!t)return _p;let e=Tw(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:_p}var yp;function S(t,e,r){function n(a,c){if(a._zod||Object.defineProperty(a,"_zod",{value:{def:c,constr:i,traits:new Set},enumerable:!1}),a._zod.traits.has(t))return;a._zod.traits.add(t),e(a,c);let u=i.prototype,l=Object.keys(u);for(let d=0;d<l.length;d++){let p=l[d];p in a||(a[p]=u[p].bind(a))}}let o=r?.Parent??Object;class s extends o{}Object.defineProperty(s,"name",{value:t});function i(a){var c;let u=r?.Parent?new s:this;n(u,a),(c=u._zod).deferred??(c.deferred=[]);for(let l of u._zod.deferred)l();return u}return Object.defineProperty(i,"init",{value:n}),Object.defineProperty(i,Symbol.hasInstance,{value:a=>r?.Parent&&a instanceof r.Parent?!0:a?._zod?.traits?.has(t)}),Object.defineProperty(i,"name",{value:t}),i}var mt=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}},$r=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name="ZodEncodeError"}};(yp=globalThis).__zod_globalConfig??(yp.__zod_globalConfig={});var Pr=globalThis.__zod_globalConfig;function Ze(t){return t&&Object.assign(Pr,t),Pr}var F={};Cl(F,{BIGINT_FORMAT_RANGES:()=>wp,Class:()=>Ji,NUMBER_FORMAT_RANGES:()=>ea,aborted:()=>Nt,allowsEval:()=>Yi,assert:()=>Cw,assertEqual:()=>Ow,assertIs:()=>Rw,assertNever:()=>Iw,assertNotEqual:()=>zw,assignProp:()=>At,base64ToUint8Array:()=>kp,base64urlToUint8Array:()=>Bw,cached:()=>Or,captureStackTrace:()=>Uo,cleanEnum:()=>Gw,cleanRegex:()=>En,clone:()=>nt,cloneDef:()=>Mw,createTransparentProxy:()=>Fw,defineLazy:()=>K,esc:()=>jo,escapeRegex:()=>bt,explicitlyAborted:()=>ta,extend:()=>Hw,finalizeIssue:()=>Je,floatSafeRemainder:()=>Gi,getElementAtPath:()=>Nw,getEnumValues:()=>yn,getLengthableOrigin:()=>vn,getParsedType:()=>Uw,getSizableOrigin:()=>bp,hexToUint8Array:()=>Xw,isObject:()=>rr,isPlainObject:()=>Mt,issue:()=>zr,joinValues:()=>Lo,jsonStringifyReplacer:()=>Tr,merge:()=>Kw,mergeDefs:()=>wt,normalizeParams:()=>z,nullish:()=>Sn,numKeys:()=>jw,objectClone:()=>Aw,omit:()=>qw,optionalKeys:()=>Qi,parsedType:()=>ra,partial:()=>Ww,pick:()=>Zw,prefixIssues:()=>kt,primitiveTypes:()=>vp,promiseAllObject:()=>Dw,propertyKeyTypes:()=>Xi,randomString:()=>Lw,required:()=>Jw,safeExtend:()=>Vw,shallowClone:()=>Ep,slugify:()=>Bi,stringifyPrimitive:()=>Fo,uint8ArrayToBase64:()=>xp,uint8ArrayToBase64url:()=>Yw,uint8ArrayToHex:()=>Qw,unwrapMessage:()=>_n});function Ow(t){return t}function zw(t){return t}function Rw(t){}function Iw(t){throw new Error("Unexpected value in exhaustive check")}function Cw(t){}function yn(t){let e=Object.values(t).filter(n=>typeof n=="number");return Object.entries(t).filter(([n,o])=>e.indexOf(+n)===-1).map(([n,o])=>o)}function Lo(t,e="|"){return t.map(r=>Fo(r)).join(e)}function Tr(t,e){return typeof e=="bigint"?e.toString():e}function Or(t){return{get value(){{let r=t();return Object.defineProperty(this,"value",{value:r}),r}throw new Error("cached value already set")}}}function Sn(t){return t==null}function En(t){let e=t.startsWith("^")?1:0,r=t.endsWith("$")?t.length-1:t.length;return t.slice(e,r)}function Gi(t,e){let r=t/e,n=Math.round(r),o=Number.EPSILON*Math.max(Math.abs(r),1);return Math.abs(r-n)<o?0:r-n}var Sp=Symbol("evaluating");function K(t,e,r){let n;Object.defineProperty(t,e,{get(){if(n!==Sp)return n===void 0&&(n=Sp,n=r()),n},set(o){Object.defineProperty(t,e,{value:o})},configurable:!0})}function Aw(t){return Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t))}function At(t,e,r){Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!0,configurable:!0})}function wt(...t){let e={};for(let r of t){let n=Object.getOwnPropertyDescriptors(r);Object.assign(e,n)}return Object.defineProperties({},e)}function Mw(t){return wt(t._zod.def)}function Nw(t,e){return e?e.reduce((r,n)=>r?.[n],t):t}function Dw(t){let e=Object.keys(t),r=e.map(n=>t[n]);return Promise.all(r).then(n=>{let o={};for(let s=0;s<e.length;s++)o[e[s]]=n[s];return o})}function Lw(t=10){let e="abcdefghijklmnopqrstuvwxyz",r="";for(let n=0;n<t;n++)r+=e[Math.floor(Math.random()*e.length)];return r}function jo(t){return JSON.stringify(t)}function Bi(t){return t.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}var Uo="captureStackTrace"in Error?Error.captureStackTrace:(...t)=>{};function rr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Yi=Or(()=>{if(Pr.jitless||typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{let t=Function;return new t(""),!0}catch{return!1}});function Mt(t){if(rr(t)===!1)return!1;let e=t.constructor;if(e===void 0||typeof e!="function")return!0;let r=e.prototype;return!(rr(r)===!1||Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)}function Ep(t){return Mt(t)?{...t}:Array.isArray(t)?[...t]:t instanceof Map?new Map(t):t instanceof Set?new Set(t):t}function jw(t){let e=0;for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&e++;return e}var Uw=t=>{let e=typeof t;switch(e){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(t)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":return Array.isArray(t)?"array":t===null?"null":t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?"promise":typeof Map<"u"&&t instanceof Map?"map":typeof Set<"u"&&t instanceof Set?"set":typeof Date<"u"&&t instanceof Date?"date":typeof File<"u"&&t instanceof File?"file":"object";default:throw new Error(`Unknown data type: ${e}`)}},Xi=new Set(["string","number","symbol"]),vp=new Set(["string","number","bigint","boolean","symbol","undefined"]);function bt(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function nt(t,e,r){let n=new t._zod.constr(e??t._zod.def);return(!e||r?.parent)&&(n._zod.parent=t),n}function z(t){let e=t;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function Fw(t){let e;return new Proxy({},{get(r,n,o){return e??(e=t()),Reflect.get(e,n,o)},set(r,n,o,s){return e??(e=t()),Reflect.set(e,n,o,s)},has(r,n){return e??(e=t()),Reflect.has(e,n)},deleteProperty(r,n){return e??(e=t()),Reflect.deleteProperty(e,n)},ownKeys(r){return e??(e=t()),Reflect.ownKeys(e)},getOwnPropertyDescriptor(r,n){return e??(e=t()),Reflect.getOwnPropertyDescriptor(e,n)},defineProperty(r,n,o){return e??(e=t()),Reflect.defineProperty(e,n,o)}})}function Fo(t){return typeof t=="bigint"?t.toString()+"n":typeof t=="string"?`"${t}"`:`${t}`}function Qi(t){return Object.keys(t).filter(e=>t[e]._zod.optin==="optional"&&t[e]._zod.optout==="optional")}var ea={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},wp={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};function Zw(t,e){let r=t._zod.def,n=r.checks;if(n&&n.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");let s=wt(t._zod.def,{get shape(){let i={};for(let a in e){if(!(a in r.shape))throw new Error(`Unrecognized key: "${a}"`);e[a]&&(i[a]=r.shape[a])}return At(this,"shape",i),i},checks:[]});return nt(t,s)}function qw(t,e){let r=t._zod.def,n=r.checks;if(n&&n.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");let s=wt(t._zod.def,{get shape(){let i={...t._zod.def.shape};for(let a in e){if(!(a in r.shape))throw new Error(`Unrecognized key: "${a}"`);e[a]&&delete i[a]}return At(this,"shape",i),i},checks:[]});return nt(t,s)}function Hw(t,e){if(!Mt(e))throw new Error("Invalid input to extend: expected a plain object");let r=t._zod.def.checks;if(r&&r.length>0){let s=t._zod.def.shape;for(let i in e)if(Object.getOwnPropertyDescriptor(s,i)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let o=wt(t._zod.def,{get shape(){let s={...t._zod.def.shape,...e};return At(this,"shape",s),s}});return nt(t,o)}function Vw(t,e){if(!Mt(e))throw new Error("Invalid input to safeExtend: expected a plain object");let r=wt(t._zod.def,{get shape(){let n={...t._zod.def.shape,...e};return At(this,"shape",n),n}});return nt(t,r)}function Kw(t,e){if(t._zod.def.checks?.length)throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let r=wt(t._zod.def,{get shape(){let n={...t._zod.def.shape,...e._zod.def.shape};return At(this,"shape",n),n},get catchall(){return e._zod.def.catchall},checks:e._zod.def.checks??[]});return nt(t,r)}function Ww(t,e,r){let o=e._zod.def.checks;if(o&&o.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");let i=wt(e._zod.def,{get shape(){let a=e._zod.def.shape,c={...a};if(r)for(let u in r){if(!(u in a))throw new Error(`Unrecognized key: "${u}"`);r[u]&&(c[u]=t?new t({type:"optional",innerType:a[u]}):a[u])}else for(let u in a)c[u]=t?new t({type:"optional",innerType:a[u]}):a[u];return At(this,"shape",c),c},checks:[]});return nt(e,i)}function Jw(t,e,r){let n=wt(e._zod.def,{get shape(){let o=e._zod.def.shape,s={...o};if(r)for(let i in r){if(!(i in s))throw new Error(`Unrecognized key: "${i}"`);r[i]&&(s[i]=new t({type:"nonoptional",innerType:o[i]}))}else for(let i in o)s[i]=new t({type:"nonoptional",innerType:o[i]});return At(this,"shape",s),s}});return nt(e,n)}function Nt(t,e=0){if(t.aborted===!0)return!0;for(let r=e;r<t.issues.length;r++)if(t.issues[r]?.continue!==!0)return!0;return!1}function ta(t,e=0){if(t.aborted===!0)return!0;for(let r=e;r<t.issues.length;r++)if(t.issues[r]?.continue===!1)return!0;return!1}function kt(t,e){return e.map(r=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(t),r})}function _n(t){return typeof t=="string"?t:t?.message}function Je(t,e,r){let n=t.message?t.message:_n(t.inst?._zod.def?.error?.(t))??_n(e?.error?.(t))??_n(r.customError?.(t))??_n(r.localeError?.(t))??"Invalid input",{inst:o,continue:s,input:i,...a}=t;return a.path??(a.path=[]),a.message=n,e?.reportInput&&(a.input=i),a}function bp(t){return t instanceof Set?"set":t instanceof Map?"map":t instanceof File?"file":"unknown"}function vn(t){return Array.isArray(t)?"array":typeof t=="string"?"string":"unknown"}function ra(t){let e=typeof t;switch(e){case"number":return Number.isNaN(t)?"nan":"number";case"object":{if(t===null)return"null";if(Array.isArray(t))return"array";let r=t;if(r&&Object.getPrototypeOf(r)!==Object.prototype&&"constructor"in r&&r.constructor)return r.constructor.name}}return e}function zr(...t){let[e,r,n]=t;return typeof e=="string"?{message:e,code:"custom",input:r,inst:n}:{...e}}function Gw(t){return Object.entries(t).filter(([e,r])=>Number.isNaN(Number.parseInt(e,10))).map(e=>e[1])}function kp(t){let e=atob(t),r=new Uint8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return r}function xp(t){let e="";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return btoa(e)}function Bw(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r="=".repeat((4-e.length%4)%4);return kp(e+r)}function Yw(t){return xp(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Xw(t){let e=t.replace(/^0x/,"");if(e.length%2!==0)throw new Error("Invalid hex string length");let r=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)r[n/2]=Number.parseInt(e.slice(n,n+2),16);return r}function Qw(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}var Ji=class{constructor(...e){}};var $p=(t,e)=>{t.name="$ZodError",Object.defineProperty(t,"_zod",{value:t._zod,enumerable:!1}),Object.defineProperty(t,"issues",{value:e,enumerable:!1}),t.message=JSON.stringify(e,Tr,2),Object.defineProperty(t,"toString",{value:()=>t.message,enumerable:!1})},Zo=S("$ZodError",$p),na=S("$ZodError",$p,{Parent:Error});function Pp(t,e=r=>r.message){let r={},n=[];for(let o of t.issues)o.path.length>0?(r[o.path[0]]=r[o.path[0]]||[],r[o.path[0]].push(e(o))):n.push(e(o));return{formErrors:n,fieldErrors:r}}function Tp(t,e=r=>r.message){let r={_errors:[]},n=(o,s=[])=>{for(let i of o.issues)if(i.code==="invalid_union"&&i.errors.length)i.errors.map(a=>n({issues:a},[...s,...i.path]));else if(i.code==="invalid_key")n({issues:i.issues},[...s,...i.path]);else if(i.code==="invalid_element")n({issues:i.issues},[...s,...i.path]);else{let a=[...s,...i.path];if(a.length===0)r._errors.push(e(i));else{let c=r,u=0;for(;u<a.length;){let l=a[u];u===a.length-1?(c[l]=c[l]||{_errors:[]},c[l]._errors.push(e(i))):c[l]=c[l]||{_errors:[]},c=c[l],u++}}}};return n(t),r}var qo=t=>(e,r,n,o)=>{let s=n?{...n,async:!1}:{async:!1},i=e._zod.run({value:r,issues:[]},s);if(i instanceof Promise)throw new mt;if(i.issues.length){let a=new(o?.Err??t)(i.issues.map(c=>Je(c,s,Ze())));throw Uo(a,o?.callee),a}return i.value};var Ho=t=>async(e,r,n,o)=>{let s=n?{...n,async:!0}:{async:!0},i=e._zod.run({value:r,issues:[]},s);if(i instanceof Promise&&(i=await i),i.issues.length){let a=new(o?.Err??t)(i.issues.map(c=>Je(c,s,Ze())));throw Uo(a,o?.callee),a}return i.value};var wn=t=>(e,r,n)=>{let o=n?{...n,async:!1}:{async:!1},s=e._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new mt;return s.issues.length?{success:!1,error:new(t??Zo)(s.issues.map(i=>Je(i,o,Ze())))}:{success:!0,data:s.value}},bn=wn(na),kn=t=>async(e,r,n)=>{let o=n?{...n,async:!0}:{async:!0},s=e._zod.run({value:r,issues:[]},o);return s instanceof Promise&&(s=await s),s.issues.length?{success:!1,error:new t(s.issues.map(i=>Je(i,o,Ze())))}:{success:!0,data:s.value}},Vo=kn(na),Op=t=>(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return qo(t)(e,r,o)};var zp=t=>(e,r,n)=>qo(t)(e,r,n);var Rp=t=>async(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return Ho(t)(e,r,o)};var Ip=t=>async(e,r,n)=>Ho(t)(e,r,n);var Cp=t=>(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return wn(t)(e,r,o)};var Ap=t=>(e,r,n)=>wn(t)(e,r,n);var Mp=t=>async(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return kn(t)(e,r,o)};var Np=t=>async(e,r,n)=>kn(t)(e,r,n);var Dp=/^[cC][0-9a-z]{6,}$/,Lp=/^[0-9a-z]+$/,jp=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Up=/^[0-9a-vA-V]{20}$/,Fp=/^[A-Za-z0-9]{27}$/,Zp=/^[a-zA-Z0-9_-]{21}$/,qp=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;var Hp=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,oa=t=>t?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${t}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;var Vp=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;var tb="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function Kp(){return new RegExp(tb,"u")}var Wp=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Jp=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;var Gp=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Bp=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Yp=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,sa=/^[A-Za-z0-9_-]*$/;var Xp=/^https?$/,Qp=/^\+[1-9]\d{6,14}$/,ef="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",tf=new RegExp(`^${ef}$`);function rf(t){let e="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof t.precision=="number"?t.precision===-1?`${e}`:t.precision===0?`${e}:[0-5]\\d`:`${e}:[0-5]\\d\\.\\d{${t.precision}}`:`${e}(?::[0-5]\\d(?:\\.\\d+)?)?`}function nf(t){return new RegExp(`^${rf(t)}$`)}function of(t){let e=rf({precision:t.precision}),r=["Z"];t.local&&r.push(""),t.offset&&r.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");let n=`${e}(?:${r.join("|")})`;return new RegExp(`^${ef}T(?:${n})$`)}var sf=t=>{let e=t?`[\\s\\S]{${t?.minimum??0},${t?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${e}$`)};var af=/^-?\d+$/,ia=/^-?\d+(?:\.\d+)?$/,cf=/^(?:true|false)$/i,uf=/^null$/i;var lf=/^[^A-Z]*$/,df=/^[^a-z]*$/;var ge=S("$ZodCheck",(t,e)=>{var r;t._zod??(t._zod={}),t._zod.def=e,(r=t._zod).onattach??(r.onattach=[])}),pf={number:"number",bigint:"bigint",object:"date"},aa=S("$ZodCheckLessThan",(t,e)=>{ge.init(t,e);let r=pf[typeof e.value];t._zod.onattach.push(n=>{let o=n._zod.bag,s=(e.inclusive?o.maximum:o.exclusiveMaximum)??Number.POSITIVE_INFINITY;e.value<s&&(e.inclusive?o.maximum=e.value:o.exclusiveMaximum=e.value)}),t._zod.check=n=>{(e.inclusive?n.value<=e.value:n.value<e.value)||n.issues.push({origin:r,code:"too_big",maximum:typeof e.value=="object"?e.value.getTime():e.value,input:n.value,inclusive:e.inclusive,inst:t,continue:!e.abort})}}),ca=S("$ZodCheckGreaterThan",(t,e)=>{ge.init(t,e);let r=pf[typeof e.value];t._zod.onattach.push(n=>{let o=n._zod.bag,s=(e.inclusive?o.minimum:o.exclusiveMinimum)??Number.NEGATIVE_INFINITY;e.value>s&&(e.inclusive?o.minimum=e.value:o.exclusiveMinimum=e.value)}),t._zod.check=n=>{(e.inclusive?n.value>=e.value:n.value>e.value)||n.issues.push({origin:r,code:"too_small",minimum:typeof e.value=="object"?e.value.getTime():e.value,input:n.value,inclusive:e.inclusive,inst:t,continue:!e.abort})}}),ff=S("$ZodCheckMultipleOf",(t,e)=>{ge.init(t,e),t._zod.onattach.push(r=>{var n;(n=r._zod.bag).multipleOf??(n.multipleOf=e.value)}),t._zod.check=r=>{if(typeof r.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof r.value=="bigint"?r.value%e.value===BigInt(0):Gi(r.value,e.value)===0)||r.issues.push({origin:typeof r.value,code:"not_multiple_of",divisor:e.value,input:r.value,inst:t,continue:!e.abort})}}),mf=S("$ZodCheckNumberFormat",(t,e)=>{ge.init(t,e),e.format=e.format||"float64";let r=e.format?.includes("int"),n=r?"int":"number",[o,s]=ea[e.format];t._zod.onattach.push(i=>{let a=i._zod.bag;a.format=e.format,a.minimum=o,a.maximum=s,r&&(a.pattern=af)}),t._zod.check=i=>{let a=i.value;if(r){if(!Number.isInteger(a)){i.issues.push({expected:n,format:e.format,code:"invalid_type",continue:!1,input:a,inst:t});return}if(!Number.isSafeInteger(a)){a>0?i.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:n,inclusive:!0,continue:!e.abort}):i.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:n,inclusive:!0,continue:!e.abort});return}}a<o&&i.issues.push({origin:"number",input:a,code:"too_small",minimum:o,inclusive:!0,inst:t,continue:!e.abort}),a>s&&i.issues.push({origin:"number",input:a,code:"too_big",maximum:s,inclusive:!0,inst:t,continue:!e.abort})}});var hf=S("$ZodCheckMaxLength",(t,e)=>{var r;ge.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!Sn(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag.maximum??Number.POSITIVE_INFINITY;e.maximum<o&&(n._zod.bag.maximum=e.maximum)}),t._zod.check=n=>{let o=n.value;if(o.length<=e.maximum)return;let i=vn(o);n.issues.push({origin:i,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:t,continue:!e.abort})}}),gf=S("$ZodCheckMinLength",(t,e)=>{var r;ge.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!Sn(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag.minimum??Number.NEGATIVE_INFINITY;e.minimum>o&&(n._zod.bag.minimum=e.minimum)}),t._zod.check=n=>{let o=n.value;if(o.length>=e.minimum)return;let i=vn(o);n.issues.push({origin:i,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:t,continue:!e.abort})}}),_f=S("$ZodCheckLengthEquals",(t,e)=>{var r;ge.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!Sn(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag;o.minimum=e.length,o.maximum=e.length,o.length=e.length}),t._zod.check=n=>{let o=n.value,s=o.length;if(s===e.length)return;let i=vn(o),a=s>e.length;n.issues.push({origin:i,...a?{code:"too_big",maximum:e.length}:{code:"too_small",minimum:e.length},inclusive:!0,exact:!0,input:n.value,inst:t,continue:!e.abort})}}),xn=S("$ZodCheckStringFormat",(t,e)=>{var r,n;ge.init(t,e),t._zod.onattach.push(o=>{let s=o._zod.bag;s.format=e.format,e.pattern&&(s.patterns??(s.patterns=new Set),s.patterns.add(e.pattern))}),e.pattern?(r=t._zod).check??(r.check=o=>{e.pattern.lastIndex=0,!e.pattern.test(o.value)&&o.issues.push({origin:"string",code:"invalid_format",format:e.format,input:o.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:t,continue:!e.abort})}):(n=t._zod).check??(n.check=()=>{})}),yf=S("$ZodCheckRegex",(t,e)=>{xn.init(t,e),t._zod.check=r=>{e.pattern.lastIndex=0,!e.pattern.test(r.value)&&r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:e.pattern.toString(),inst:t,continue:!e.abort})}}),Sf=S("$ZodCheckLowerCase",(t,e)=>{e.pattern??(e.pattern=lf),xn.init(t,e)}),Ef=S("$ZodCheckUpperCase",(t,e)=>{e.pattern??(e.pattern=df),xn.init(t,e)}),vf=S("$ZodCheckIncludes",(t,e)=>{ge.init(t,e);let r=bt(e.includes),n=new RegExp(typeof e.position=="number"?`^.{${e.position}}${r}`:r);e.pattern=n,t._zod.onattach.push(o=>{let s=o._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(n)}),t._zod.check=o=>{o.value.includes(e.includes,e.position)||o.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:e.includes,input:o.value,inst:t,continue:!e.abort})}}),wf=S("$ZodCheckStartsWith",(t,e)=>{ge.init(t,e);let r=new RegExp(`^${bt(e.prefix)}.*`);e.pattern??(e.pattern=r),t._zod.onattach.push(n=>{let o=n._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(r)}),t._zod.check=n=>{n.value.startsWith(e.prefix)||n.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:e.prefix,input:n.value,inst:t,continue:!e.abort})}}),bf=S("$ZodCheckEndsWith",(t,e)=>{ge.init(t,e);let r=new RegExp(`.*${bt(e.suffix)}$`);e.pattern??(e.pattern=r),t._zod.onattach.push(n=>{let o=n._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(r)}),t._zod.check=n=>{n.value.endsWith(e.suffix)||n.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:e.suffix,input:n.value,inst:t,continue:!e.abort})}});var kf=S("$ZodCheckOverwrite",(t,e)=>{ge.init(t,e),t._zod.check=r=>{r.value=e.tx(r.value)}});var Wo=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if(typeof e=="function"){e(this,{execution:"sync"}),e(this,{execution:"async"});return}let n=e.split(`
23
+ `,"utf-8"),a;try{a=(0,V.statSync)(r).mode&511}catch{}let c;try{c=a!==void 0?(0,V.openSync)(s,"w",a):(0,V.openSync)(s,"w");let u=0;for(;u<i.length;){let l=(0,V.writeSync)(c,i,u,i.length-u);if(l===0)throw new Error(`writeSync stalled at ${u}/${i.length} bytes`);u+=l}if((0,V.fsyncSync)(c),(0,V.closeSync)(c),c=void 0,(0,V.renameSync)(s,r),!nv){let l;try{l=(0,V.openSync)(n,"r"),(0,V.fsyncSync)(l)}catch{}finally{if(l!==void 0)try{(0,V.closeSync)(l)}catch{}}}}catch(u){if(c!==void 0)try{(0,V.closeSync)(c)}catch{}try{(0,V.unlinkSync)(s)}catch{}throw u}}var Bt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(Et(ue.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_GEMINI_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_GEMINI_MAX_TOKENS:"100000",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,pn.join)((0,bi.homedir)(),".keepmind"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"5",CLAUDE_MEM_OBSERVATION_BATCH_MAX:"3",CLAUDE_MEM_MAX_CONTEXT_MESSAGES:"40",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_UPDATE_CHECK_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,pn.join)((0,bi.homedir)(),".keepmind","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static envOverride(e){let r=e.replace(/^CLAUDE_MEM_/,"KEEPMIND_");return process.env[r]??process.env[e]}static get(e){return this.envOverride(e)??this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS)){let o=this.envOverride(n);o!==void 0&&(r[n]=o)}return r}static loadFromFile(e,r=!0){try{if(!(0,dt.existsSync)(e)){let a=this.getAllDefaults();try{let c=(0,pn.dirname)(e);(0,dt.existsSync)(c)||(0,dt.mkdirSync)(c,{recursive:!0}),Eo(e,a),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(c){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,c instanceof Error?c.message:String(c))}return r?this.applyEnvOverrides(a):a}let n=(0,dt.readFileSync)(e,"utf-8"),o=JSON.parse(n.replace(/^\uFEFF/,"")),s=o;if(o.env&&typeof o.env=="object"){s=o.env;try{Eo(e,s),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a instanceof Error?a.message:String(a))}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))s[a]!==void 0&&(i[a]=s[a]);return r?this.applyEnvOverrides(i):i}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let o=this.getAllDefaults();try{if((0,dt.existsSync)(e)){let s=`${e}.corrupt-${Date.now()}`;(0,dt.renameSync)(e,s),console.warn("[SETTINGS] Backed up corrupt settings file to:",s)}Eo(e,o),console.warn("[SETTINGS] Recovered settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to recover corrupt settings file:",e,s instanceof Error?s.message:String(s))}return r?this.applyEnvOverrides(o):o}}};var vo=null;function rt(){return vo!==null||(vo=Bt.loadFromFile(Nl)),vo}var Xt=require("fs");var Ti=require("child_process");var pt=require("fs"),$i=we(require("path"),1);var sv=["CLAUDECODE_","CLAUDE_CODE_"],iv=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID","HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy"]),av=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS"]);function Yt(t=process.env){let e={};for(let[r,n]of Object.entries(t))if(n!==void 0){if(av.has(r)){e[r]=n;continue}iv.has(r)||sv.some(o=>r.startsWith(o))||(e[r]=n)}return e}var cv=5e3,uv=1e3,lv=fe.supervisorRegistry();function vt(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(f.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return f.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function wo(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(n=>!vt(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}var dv=5e3,Zl=new Map;function pv(t){let e=Zl.get(t);if(e&&Date.now()-e.capturedAtMs<dv)return e.token;let r=null;try{let n=(0,Ti.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Yt(process.env),LC_ALL:"C",LANG:"C"}});if(n.status===0){let o=n.stdout.trim();r=o.length>0?o:null}}catch(n){f.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:n instanceof Error?n.message:String(n)}),r=null}return Zl.set(t,{token:r,capturedAtMs:Date.now()}),r}function ql(t){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux")try{let e=(0,pt.readFileSync)(`/proc/${t}/stat`,"utf-8"),r=e.lastIndexOf(") ");if(r<0)return null;let o=e.slice(r+2).split(" ")[19];return o&&/^\d+$/.test(o)?o:null}catch(e){return f.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}if(process.platform==="win32")return pv(t);try{let e=(0,Ti.spawnSync)("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Yt(process.env),LC_ALL:"C",LANG:"C"}});if(e.status!==0)return null;let r=e.stdout.trim();return r.length>0?r:null}catch(e){return f.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}}function Oi(t){if(!t||!vt(t.pid))return!1;if(!t.startToken)return!0;let e=ql(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||f.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}var Pi=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=lv){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,(0,pt.mkdirSync)($i.default.dirname(this.registryPath),{recursive:!0}),!(0,pt.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,pt.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[o,s]of Object.entries(n))this.entries.set(o,s)}catch(r){r instanceof Error?f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&f.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,r,n){this.initialize(),this.entries.set(e,r),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e){this.initialize();let r=this.entries.get(e);this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist(),r?.type==="sdk"&&xi()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let n=Date.parse(e.startedAt),o=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(o)?0:o)})}getBySession(e){let r=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}getByPid(e){return this.getAll().filter(r=>r.pid===e)}pruneDeadEntries(){this.initialize();let e=0,r=0;for(let[n,o]of this.entries)vt(o.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,o.type==="sdk"&&(r+=1));e>0&&this.persist();for(let n=0;n<r;n+=1)xi();return e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;f.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:n,pids:r.map(i=>i.pid)});let o=r.filter(i=>vt(i.pid));for(let i of o)try{typeof i.pgid=="number"&&process.platform!=="win32"?process.kill(-i.pgid,"SIGTERM"):process.kill(i.pid,"SIGTERM")}catch(a){a instanceof Error?a.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGTERM session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):f.warn("SYSTEM",`Failed to SIGTERM session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}await wo(o,cv);let s=o.filter(i=>vt(i.pid));for(let i of s){f.warn("SYSTEM",`Session process PID ${i.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:i.pid,pgid:i.pgid,sessionId:n});try{typeof i.pgid=="number"&&process.platform!=="win32"?process.kill(-i.pgid,"SIGKILL"):process.kill(i.pid,"SIGKILL")}catch(a){a instanceof Error?a.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGKILL session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):f.warn("SYSTEM",`Failed to SIGKILL session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}}if(s.length>0){let i=Date.now()+uv;for(;Date.now()<i&&s.filter(c=>vt(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100))}for(let i of r)this.entries.delete(i.id),this.runtimeProcesses.delete(i.id);this.persist();for(let i of r)i.type==="sdk"&&xi();return f.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:n,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};(0,pt.mkdirSync)($i.default.dirname(this.registryPath),{recursive:!0}),(0,pt.writeFileSync)(this.registryPath,JSON.stringify(e,null,2))}},ki=null;function bo(){return ki||(ki=new Pi),ki}var fv=[];function xi(){let t=fv.shift();t&&t()}var Vl=require("child_process"),vr=require("fs"),Kl=require("util");var mv=(0,Kl.promisify)(Vl.execFile),hv=fe.workerPid();async function Wl(t){let e=t.currentPid??process.pid,r=t.pidFilePath??hv,n=t.registry.getAll(),o=[...n].filter(i=>i.pid!==e).sort((i,a)=>Date.parse(a.startedAt)-Date.parse(i.startedAt));for(let i of o){if(!vt(i.pid)){t.registry.unregister(i.id);continue}try{await Hl(i,"SIGTERM")}catch(a){a instanceof Error?f.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):f.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}}await wo(o,5e3);let s=o.filter(i=>vt(i.pid));for(let i of s)try{await Hl(i,"SIGKILL")}catch(a){a instanceof Error?f.debug("SYSTEM","Failed to force kill child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):f.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}await wo(s,1e3);for(let i of o)t.registry.unregister(i.id);for(let i of n.filter(a=>a.pid===e))t.registry.unregister(i.id);gv(r,e),t.registry.pruneDeadEntries()}function gv(t,e){if(!(0,vr.existsSync)(t))return;let r=null;try{let n=JSON.parse((0,vr.readFileSync)(t,"utf-8"));r=typeof n.pid=="number"?n.pid:null}catch(n){f.debug("SYSTEM","PID file unreadable during shutdown \u2014 leaving it (cannot prove ownership)",{pidFilePath:t,error:n instanceof Error?n.message:String(n)});return}if(r!==e){f.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:t,recordedPid:r,currentPid:e});return}try{(0,vr.rmSync)(t,{force:!0})}catch(n){n instanceof Error?f.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:t},n):f.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:t,error:String(n)})}}async function Hl(t,e){let{pid:r,pgid:n}=t;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(i){if((i instanceof Error?i.code:void 0)!=="ESRCH")throw i}try{process.kill(r,e)}catch(i){if((i instanceof Error?i.code:void 0)!=="ESRCH")throw i}return}if(e==="SIGTERM"){try{process.kill(r,e)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}let o=await _v();if(o){await new Promise((i,a)=>{o(r,e,c=>{if(!c){i();return}if(c.code==="ESRCH"){i();return}a(c)})});return}let s=["/PID",String(r),"/T"];e==="SIGKILL"&&s.push("/F"),await mv("taskkill",s,{timeout:ue.POWERSHELL_COMMAND,windowsHide:!0})}async function _v(){let t="tree-kill";try{let e=await import(t);return e.default??e}catch(e){return f.debug("SYSTEM","tree-kill module not available, using fallback",{},e instanceof Error?e:void 0),null}}var Jl=3e4,wr=null;function yv(){let e=bo().pruneDeadEntries();e>0&&f.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function Gl(){wr===null&&(wr=setInterval(yv,Jl),wr.unref(),f.debug("SYSTEM","Health checker started",{intervalMs:Jl}))}function Bl(){wr!==null&&(clearInterval(wr),wr=null,f.debug("SYSTEM","Health checker stopped"))}var Sv=fe.workerPid(),zi=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),fn({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Gl()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){f.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,f.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(o){o instanceof Error?f.error("SYSTEM","Error during shutdown",{},o):f.error("SYSTEM","Error during shutdown (non-Error)",{error:String(o)});try{await this.stop()}catch(s){s instanceof Error?f.debug("SYSTEM","Supervisor shutdown fallback failed",{},s):f.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(s)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{f.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}Bl(),this.stopPromise=Wl({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,n){this.registry.register(e,r,n)}unregisterProcess(e){this.registry.unregister(e)}getRegistry(){return this.registry}},Ev=new zi(bo());function Ri(){return Ev}function fn(t={}){let e=t.pidFilePath??Sv;if(!(0,Xt.existsSync)(e))return"missing";let r=null;try{r=JSON.parse((0,Xt.readFileSync)(e,"utf-8"))}catch(o){return o instanceof Error?f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},o):f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(o)}),(0,Xt.rmSync)(e,{force:!0}),"invalid"}return Oi(r)&&r?((t.logAlive??!0)&&f.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(f.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),(0,Xt.rmSync)(e,{force:!0}),"stale")}var Ql=we(require("path"),1),ed=require("os"),be=require("fs"),td=require("child_process");function Yl(t){return t instanceof Error?t:new Error(String(t))}var iC=fe.dataDir(),ft=fe.workerPid(),aC=fe.workerPort();function Xl(t){return t?/(^|[\\/])node(\.exe)?$/i.test(t.trim()):!1}function vv(t,e){let r=e==="win32"?`where ${t}`:`which ${t}`,n;try{n=(0,td.execSync)(r,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(s){return s instanceof Error?f.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},s):f.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},new Error(String(s))),null}return n.split(/\r?\n/).map(s=>s.trim()).find(s=>s.length>0)||null}var Ii;function Ci(t={}){let e=Object.keys(t).length===0;if(e&&Ii!==void 0)return Ii;let r=wv(t);return e&&r!==null&&(Ii=r),r}function wv(t){let e=t.platform??process.platform,r=t.execPath??process.execPath;if(Xl(r))return r;let n=t.env??process.env,o=t.homeDirectory??(0,ed.homedir)(),s=t.pathExists??be.existsSync,i=t.lookupInPath??vv,a=e==="win32"?[n.NODE,Ql.default.join(o,".nvm","current","bin","node.exe"),"node"]:[n.NODE,"/usr/local/bin/node","/opt/homebrew/bin/node","/usr/bin/node","node"];for(let c of a){let u=c?.trim();if(u&&(Xl(u)&&s(u)||u.toLowerCase()==="node"))return u}return i("node",e)}function rd(){if(!(0,be.existsSync)(ft))return null;try{return JSON.parse((0,be.readFileSync)(ft,"utf-8"))}catch(t){return t instanceof Error?f.warn("SYSTEM","Failed to parse PID file",{path:ft},t):f.warn("SYSTEM","Failed to parse PID file",{path:ft},new Error(String(t))),null}}function nd(){if((0,be.existsSync)(ft))try{(0,be.unlinkSync)(ft)}catch(t){t instanceof Error?f.warn("SYSTEM","Failed to remove PID file",{path:ft},t):f.warn("SYSTEM","Failed to remove PID file",{path:ft},new Error(String(t)))}}function Rt(t){return process.platform==="win32"?Math.round(t*2):t}function od(t,e,r={}){Ri().assertCanSpawn("worker daemon");let n=Yt({...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r}),o=Ci();if(!o){f.error("SYSTEM","Node runtime not found \u2014 ensure node is on PATH or set the NODE env var. The worker daemon runs under Node (node:sqlite).");return}if(process.platform==="win32")try{let l=yr(o,[t,"--daemon"],{detached:!0,stdio:"ignore",windowsHide:!0,env:n});if(l.pid===void 0){f.error("SYSTEM","Worker daemon spawn produced no PID on Windows",{runtimePath:o});return}return l.unref(),l.pid}catch(l){f.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:o},Yl(l));return}let s="/usr/bin/setsid",i=(0,be.existsSync)(s),u=yr(i?s:o,i?[o,t,"--daemon"]:[t,"--daemon"],{detached:!0,stdio:"ignore",env:n});if(u.pid!==void 0)return u.unref(),u.pid}function sd(t){if(t===0)return!0;if(!Number.isInteger(t)||t<0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;if(r==="EPERM")return!0;f.debug("SYSTEM","Process not alive",{pid:t,code:r})}else f.debug("SYSTEM","Process not alive (non-Error thrown)",{pid:t},new Error(String(e)));return!1}}function id(){try{if(!(0,be.existsSync)(ft))return;let t=new Date;(0,be.utimesSync)(ft,t,t)}catch{}}function ad(){return fn({logAlive:!1})}var cd=we(require("path"),1),ud=we(require("net"),1),ld=require("fs");var bv=2500;async function dd(t,e,r="GET"){let n=await fetch(`http://127.0.0.1:${t}${e}`,{method:r,signal:AbortSignal.timeout(bv)}),o="";try{o=await n.text()}catch{}return{ok:n.ok,statusCode:n.status,body:o}}async function pd(t){return new Promise(e=>{let r=ud.default.createServer();r.once("error",n=>{n.code==="EADDRINUSE"||n.code==="EACCES"?e(!0):e(!1)}),r.once("listening",()=>{r.close(()=>e(!1))}),r.listen(t,"127.0.0.1")})}async function fd(t,e,r,n){let o=Date.now();for(;Date.now()-o<r;){try{if((await dd(t,e)).ok)return!0}catch(s){s instanceof Error?f.debug("SYSTEM",n,{},s):f.debug("SYSTEM",n,{error:String(s)})}await new Promise(s=>setTimeout(s,500))}return!1}function mn(t,e=3e4){return fd(t,"/api/health",e,"Service not ready yet, will retry")}function hn(t,e=3e4){return fd(t,"/api/readiness",e,"Worker not ready yet, will retry")}function kv(){try{let t=cd.default.join(Er,"package.json");return JSON.parse((0,ld.readFileSync)(t,"utf-8")).version}catch(t){if(t instanceof Error){let e=t.code;if(e==="ENOENT"||e==="EBUSY")return f.debug("SYSTEM","Could not read plugin version (shutdown race)",{code:e}),"unknown";throw t}throw t}}async function xv(t){try{let e=await dd(t,"/api/version");return e.ok?JSON.parse(e.body).version:null}catch{return f.debug("SYSTEM","Could not fetch worker version",{}),null}}async function md(t){let e=kv(),r=await xv(t);return!r||e==="unknown"?{matches:!0,pluginVersion:e,workerVersion:r}:{matches:e===r,pluginVersion:e,workerVersion:r}}var ko=require("path"),Ke=require("fs");var $v=6e4;function hd(){return(0,ko.join)(mi(),"spawn.lock")}function xo(){let t=hd(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let r=0;r<2;r++)try{return(0,Ke.mkdirSync)((0,ko.dirname)(t),{recursive:!0}),(0,Ke.writeFileSync)(t,e,{flag:"wx"}),!0}catch(n){if(n?.code!=="EEXIST")return!0;if(r>0)return!1;let s;try{s=(0,Ke.statSync)(t).mtimeMs}catch{continue}if(Date.now()-s<=$v)return!1;let i;try{i=(0,Ke.statSync)(t).mtimeMs}catch{continue}if(i!==s)return!1;try{(0,Ke.unlinkSync)(t)}catch{return!1}}return!1}function $o(){let t=hd();try{if(JSON.parse((0,Ke.readFileSync)(t,"utf-8")).pid!==process.pid)return;(0,Ke.unlinkSync)(t)}catch{}}function Di(t,e,r){let n=process.env[t];if(n){let o=parseInt(n,10);if(Number.isFinite(o)&&o>=r.min&&o<=r.max)return o;f.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max})}return e}var Io=Di("CLAUDE_MEM_HEALTH_TIMEOUT_MS",Et(ue.HEALTH_CHECK),{min:500,max:3e5}),CC=Di("CLAUDE_MEM_API_TIMEOUT_MS",Et(ue.API_REQUEST),{min:500,max:3e5}),Sd=Di("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",Et(ue.HOOK_READINESS_WAIT),{min:0,max:3e5}),Pv={min:500,max:3e5};async function Li(t,e={},r){try{return await fetch(t,{...e,signal:AbortSignal.timeout(r)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${r}ms`):n}}var Po=null,To=null,Oo=null,zo=null;function Tv(){return br.default.join(Bt.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Ov(t){if(!Number.isInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}function zv(){try{let t=fe.workerPid();if(!(0,Fe.existsSync)(t))return null;let e=JSON.parse((0,Fe.readFileSync)(t,"utf-8"));return typeof e.pid!="number"||typeof e.port!="number"||!Ov(e.pid)?null:e.port}catch{return null}}function ji(){return Oo!==null||(Oo=Bt.loadFromFile(Tv())),Oo}function gd(t,e){if(!t)return null;let r=parseInt(t,10);return Number.isFinite(r)&&r>=e.min&&r<=e.max?r:null}function Rv(t,e,r){let n=process.env[t];if(n!==void 0){let i=gd(n,r);return i!==null?i:(f.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max}),e)}let o=ji()[t],s=gd(o,r);return s!==null?s:(f.warn("SYSTEM",`Invalid ${t} in settings.json, using default`,{value:o,min:r.min,max:r.max}),e)}function Iv(){if(Po!==null)return Po;let t=ji();return Po=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),Po}function It(){let t=zv();return t!==null?t:Iv()}function Cv(){return To!==null||(To=ji().CLAUDE_MEM_WORKER_HOST),To}function Av(){return zo!==null||(zo=Rv("CLAUDE_MEM_API_TIMEOUT_MS",Et(ue.API_REQUEST),Pv)),zo}function Mv(t){return`http://${Cv()}:${It()}${t}`}function Qt(t,e={}){let r=e.method??"GET",n=e.timeoutMs??Av(),o=Mv(t),s={method:r};return e.headers&&(s.headers=e.headers),e.body&&(s.body=e.body),n>0?Li(o,s,n):fetch(o,s)}async function Nv(){return(await Qt("/api/health",{timeoutMs:Io})).ok}async function _d(){return(await Qt("/api/readiness",{timeoutMs:Io})).ok}function Ui(){let t=[br.default.join(Er,"plugin","scripts","worker-service.cjs"),br.default.join(process.cwd(),"plugin","scripts","worker-service.cjs")];for(let e of t)if((0,Fe.existsSync)(e))return e;return null}async function Dv(t){let e=t.backoffMs;for(let r=1;r<=t.attempts;r++){if(await vd())return!0;r<t.attempts&&(await new Promise(n=>setTimeout(n,e)),e*=2)}return!1}async function Ai(t=Sd){if(t<=0)try{return await _d()}catch{return!1}let e=Date.now();for(;Date.now()-e<t;){try{if(await _d())return!0}catch(n){f.debug("SYSTEM","Worker readiness check threw",{error:n instanceof Error?n.message:String(n)})}let r=t-(Date.now()-e);if(r<=0)break;await new Promise(n=>setTimeout(n,Math.min(250,r)))}return!1}async function Ed(){try{let e=await(await Qt("/api/health",{timeoutMs:Io})).json();return typeof e.version=="string"?e.version:null}catch{return null}}async function Lv(t,e=Sd){let r=Date.now();for(;Date.now()-r<e;){if(await Ed()===t)return!0;let o=e-(Date.now()-r);if(o<=0)break;await new Promise(s=>setTimeout(s,Math.min(500,o)))}return!1}async function Mi(t){let e=await Ed();e!==null&&e!==t&&f.warn("SYSTEM","Worker is ready but still reports a stale version; not recycling again in this hook invocation (one recycle per hook event)",{pluginVersion:t,workerVersion:e})}async function vd(){let t;try{t=await Nv()}catch(r){return f.debug("SYSTEM","Worker health check threw",{error:r instanceof Error?r.message:String(r)}),!1}if(!t)return!1;let e=fn({logAlive:!1});return e==="missing"||e==="alive"}async function jv(){let t=null;if(await vd()){let{matches:s,pluginVersion:i,workerVersion:a}=await md(It());if(i!=="unknown"&&(t=i),s)return await Ai()?(t!==null&&await Mi(t),!0):(f.warn("SYSTEM","Worker is healthy but not ready; skipping hook API call"),!1);f.info("SYSTEM","Worker version mismatch \u2014 recycling stale worker",{pluginVersion:i,workerVersion:a});try{if(await Qt("/api/admin/restart",{method:"POST",timeoutMs:Io}),await Lv(i))return await Ai()?(t!==null&&await Mi(t),!0):(f.warn("SYSTEM","Recycled worker appeared but did not become ready; skipping hook API call"),!1);f.warn("SYSTEM","No successor worker appeared after recycle; falling through to lazy-spawn",{pluginVersion:i,workerVersion:a})}catch(c){f.debug("SYSTEM","Worker restart request failed; falling through to lazy-spawn",{error:c instanceof Error?c.message:String(c)})}}let e=Ci(),r=Ui();if(!e)return f.warn("SYSTEM","Cannot lazy-spawn worker: Node runtime not found on PATH"),!1;if(!r)return f.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;let n=xo();try{if(n){f.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:e,scriptPath:r});try{yr(e,[r,"--daemon"],{detached:!0,stdio:["ignore","ignore","ignore"]}).unref()}catch(i){return i instanceof Error?f.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:e,scriptPath:r},i):f.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:e,scriptPath:r,error:String(i)}),!1}}else f.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await Dv({attempts:6,backoffMs:500}))return f.warn("SYSTEM",n?"Worker port did not open after lazy-spawn within the cold-boot wait (~15s)":"Spawn-lock holder's worker port did not open within the cold-boot wait (~15s)"),!1}finally{n&&$o()}return await Ai()?(t!==null&&await Mi(t),!0):(f.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout"),!1)}var Ro=null;async function Uv(){return Ro!==null||(Ro=await jv()),Ro}var Fv=3;function wd(){return br.default.join(J,"state")}function bd(){return br.default.join(wd(),"hook-failures.json")}function kd(){try{let t=(0,Fe.readFileSync)(bd(),"utf-8"),e=JSON.parse(t);return{consecutiveFailures:typeof e.consecutiveFailures=="number"&&Number.isFinite(e.consecutiveFailures)?Math.max(0,Math.floor(e.consecutiveFailures)):0,lastFailureAt:typeof e.lastFailureAt=="number"&&Number.isFinite(e.lastFailureAt)?e.lastFailureAt:0}}catch{return{consecutiveFailures:0,lastFailureAt:0}}}function xd(t){let e=wd(),r=bd(),n=`${r}.tmp`;try{(0,Fe.existsSync)(e)||(0,Fe.mkdirSync)(e,{recursive:!0}),(0,Fe.writeFileSync)(n,JSON.stringify(t),"utf-8"),(0,Fe.renameSync)(n,r)}catch(o){f.debug("SYSTEM","Failed to persist hook-failure counter",{error:o instanceof Error?o.message:String(o)})}}function Zv(){try{let e=rt().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,r=parseInt(e,10);if(Number.isFinite(r)&&r>=1)return r}catch{}return Fv}var qv=["context","session-init","observation","summarize","file-context"],Hv=null;function $d(t){Hv=qv.includes(t)?t:null}async function Fi(){let e={consecutiveFailures:kd().consecutiveFailures+1,lastFailureAt:Date.now()};xd(e);let r=Zv();return e.consecutiveFailures>=r&&ln(`keepmind worker unreachable for ${e.consecutiveFailures} consecutive hooks \u2014 continuing without memory capture. Run \`keepmind doctor\` to diagnose.`),e.consecutiveFailures}function yd(){kd().consecutiveFailures!==0&&xd({consecutiveFailures:0,lastFailureAt:0})}var Ni=Symbol.for("claude-mem/worker-fallback");function me(t){return typeof t=="object"&&t!==null&&t[Ni]===!0}async function le(t,e,r,n={}){if(!await Uv())return await Fi(),{continue:!0,reason:"worker_unreachable",[Ni]:!0};let s={method:e};r!==void 0&&(s.headers={"Content-Type":"application/json"},s.body=JSON.stringify(r)),n.timeoutMs!==void 0&&(s.timeoutMs=n.timeoutMs);let i=await Qt(t,s);if(!i.ok){let c=await i.text().catch(()=>"");if(yd(),i.status===429||i.status>=500)return f.warn("SYSTEM",`Worker API ${e} ${t} returned ${i.status}; skipping hook API call`,{body:c.substring(0,200)}),{continue:!0,reason:`worker_api_${i.status}`,[Ni]:!0};let u=c;try{u=JSON.parse(c)}catch{}return u}yd();let a=await i.text();if(a.length!==0)try{return JSON.parse(a)}catch{return a}}var Pd=require("fs");function Vv(t){let e=rd();return e&&typeof e.port=="number"&&sd(e.pid)?e.port:t}async function Kv(t,e){let r=Date.now()+e;for(;Date.now()<r;){let n=Vv(t);if(await mn(n,800))return n;await new Promise(o=>setTimeout(o,300))}return null}async function Td(t,e){if(!e)return f.error("SYSTEM","ensureWorkerStarted called with empty workerScriptPath \u2014 caller bug"),"dead";if(!(0,Pd.existsSync)(e))return f.error("SYSTEM","ensureWorkerStarted: worker script not found at expected path \u2014 likely a partial install or build artifact missing",{workerScriptPath:e}),"dead";if(await mn(t,1e3)){let a=await hn(t,Rt(ue.READINESS_WAIT));return a||f.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),f.info("SYSTEM","Worker already running and healthy (fast path)"),a?"ready":"warming"}if(ad()==="alive"){if(f.info("SYSTEM","Worker PID file points to a live process, waiting for it to become healthy"),await mn(t,Rt(ue.POST_SPAWN_WAIT))){let c=await hn(t,Rt(ue.READINESS_WAIT));return f.info("SYSTEM","Worker became healthy while waiting on live PID"),c?"ready":"warming"}f.warn("SYSTEM","PID file marked live but worker never became healthy within the cold-boot window \u2014 treating it as a stale/reused PID and re-spawning"),nd()}if(await pd(t)){if(f.info("SYSTEM","Port in use, waiting for worker to become healthy"),await mn(t,Rt(ue.PORT_IN_USE_WAIT))){let c=await hn(t,Rt(ue.READINESS_WAIT));return f.info("SYSTEM","Worker is now healthy"),c?"ready":"warming"}f.warn("SYSTEM","Configured port in use but no healthy worker \u2014 spawning anyway (worker will pick a free ephemeral port)")}let o=xo(),s=t;try{if(o){if(f.info("SYSTEM","Starting worker daemon",{workerScriptPath:e}),od(e,t)===void 0)return f.error("SYSTEM","Failed to spawn worker daemon"),"dead"}else f.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping duplicate spawn and waiting for its worker");let a=await Kv(t,Rt(ue.POST_SPAWN_WAIT));if(a===null)return f.warn("SYSTEM",o?"Worker spawned but health endpoint not responding within window \u2014 likely still starting in background":"Spawn-lock holder's worker not healthy within window \u2014 likely still starting in background"),"warming";s=a}finally{o&&$o()}let i=await hn(s,Rt(ue.READINESS_WAIT));return i||f.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),id(),f.info("SYSTEM",o?"Worker started successfully":"Worker is up (started by another launcher)"),i?"ready":"warming"}function Wv(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch(t){return f.debug("HOOK","stdin not available (expected for some runtimes)",{error:t instanceof Error?t.message:String(t)}),!1}}function Jv(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch(r){return f.debug("HOOK","JSON parse attempt incomplete",{error:r instanceof Error?r.message:String(r)}),{success:!1}}}var Od=3e4;async function zd(){if(Wv())return new Promise((t,e)=>{let r="",n=!1,o=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},s=p=>{n||(n=!0,clearTimeout(c),o(),t(p))},i=p=>{n||(n=!0,clearTimeout(c),o(),e(p))},a=()=>{let p=Jv(r);return p.success?(s(p.value),!0):!1},c=setTimeout(()=>{n||a()||(r.trim()?i(new Error(`Incomplete JSON after ${Od}ms: ${r.slice(0,100)}...`)):s(void 0))},Od),u=p=>{r+=p,a()},l=()=>{n||a()||(r.trim()?i(new Error(`Malformed JSON at stdin EOF: ${r.slice(0,100)}...`)):s(void 0))},d=()=>{n||s(void 0)};try{process.stdin.on("data",u),process.stdin.on("end",l),process.stdin.on("error",d)}catch(p){f.debug("HOOK","Failed to attach stdin listeners",{error:p instanceof Error?p.message:String(p)}),n=!0,clearTimeout(c),o(),t(void 0)}})}var he=class extends Error{constructor(r){super(`adapter rejected input: ${r}`);this.reason=r;this.name="AdapterRejectedInput"}reason};function We(t){return typeof t=="string"&&t.length>0}var Gv=128,Rd=t=>typeof t=="string"&&t.length>0&&t.length<=Gv?t:void 0,Id={normalizeInput(t){let e=t??{},r=e.cwd??process.cwd();if(!We(r))throw new he("invalid_cwd");return{sessionId:e.session_id??e.id??e.sessionId,cwd:r,prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path,agentId:Rd(e.agent_id),agentType:Rd(e.agent_type)}},formatOutput(t){let e=t??{};if(e.hookSpecificOutput){let n={hookSpecificOutput:t.hookSpecificOutput};return e.systemMessage&&(n.systemMessage=e.systemMessage),n}let r={};return e.systemMessage&&(r.systemMessage=e.systemMessage),r}};var Ao=require("fs"),Co=we(require("path"),1),Vd=we(qd(),1),iw=10,aw=new Set(["cat","head","tail","less","more","bat","view","nl","tac"]),cw={head:new Set(["-n","-c","--lines","--bytes"]),tail:new Set(["-n","-c","--lines","--bytes"])},uw=new Set;function lw(t){return typeof t=="object"&&t!==null&&"op"in t}function dw(t){let e=[],r=[];for(let n of t){if(lw(n)){r.length>0&&e.push(r),r=[];continue}typeof n=="string"&&r.push(n)}return r.length>0&&e.push(r),e}function pw(t){if(typeof t=="string")return t;if(Array.isArray(t)){let e=t.filter(r=>typeof r=="string");return e.length>0?e.join(" "):null}return null}function Hd(t){return t.startsWith("-")||t.startsWith("+")}function fw(t){return cw[t]??uw}function mw(t,e){let r=fw(e);if(r.has(t))return!0;let n=t.indexOf("=");return n>0&&r.has(t.slice(0,n))}function Kd(t,e){let r=Co.default.isAbsolute(t)?t:Co.default.resolve(e,t);try{return(0,Ao.existsSync)(r)?(0,Ao.statSync)(r).isFile():!1}catch{return!1}}function Wd(t){let e=new Set,r=[];for(let n of t)if(!e.has(n)&&(e.add(n),r.push(n),r.length>=iw))break;return r}function hw(t,e){let r=pw(t?.command);if(!r)return[];let n=(0,Vd.parse)(r),o=[];for(let s of dw(n)){let i=s.findIndex(u=>u&&!Hd(u));if(i===-1)continue;let a=Co.default.basename(s[i]);if(!aw.has(a))continue;let c=!1;for(let u of s.slice(i+1)){if(c){c=!1;continue}if(Hd(u)){c=mw(u,a)&&!u.includes("=");continue}Kd(u,e)&&o.push(u)}}return Wd(o)}function gw(t,e,r){if(!/^mcp__.+__(read|view|cat)(?:_file|_files)?$/.test(t))return[];let n=e??{},o=[];if(typeof n.path=="string"&&o.push(n.path),Array.isArray(n.paths))for(let s of n.paths)typeof s=="string"&&o.push(s);return Wd(o.filter(s=>Kd(s,r)))}function Jd(t,e,r){return t==="Bash"?hw(e,r):t.startsWith("mcp__")?gw(t,e,r):[]}var _w=new Set(["PreToolUse","PermissionRequest","PostToolUse","SessionStart","UserPromptSubmit","Stop"]);function Gd(t){return typeof t=="string"&&_w.has(t)?t:void 0}function Ct(t){return typeof t=="string"&&t.length>0?t:void 0}function yw(t){if(typeof t=="boolean")return t;if(t==="true")return!0;if(t==="false")return!1}function Sw(t){return t&&typeof t=="object"&&!Array.isArray(t)?{...t}:t}function Ew(t){let e={};return t.continue!==void 0&&(e.continue=t.continue),t.systemMessage&&(e.systemMessage=t.systemMessage),t.decision==="block"&&(e.decision="block"),t.reason&&(e.reason=t.reason),e}function vw(t){return Gd(t.hookSpecificOutput?.hookEventName)}var Bd={normalizeInput(t){let e=t??{},r=typeof e.cwd=="string"?e.cwd:process.cwd();if(!We(r))throw new he("invalid_cwd");let n=Gd(e.hook_event_name),o=Ct(e.tool_name),s=Sw(e.tool_input);if(n==="PreToolUse"&&o){let u=Jd(o,s,r);u.length>0&&s&&typeof s=="object"&&!Array.isArray(s)&&(s={...s,filePaths:u})}let i=e.source,a=i==="startup"||i==="resume"||i==="clear"?i:void 0,c=Ct(e.session_id);if(!c)throw new he("missing_session_id");return{sessionId:c,cwd:r,prompt:Ct(e.prompt),toolName:o,toolInput:s,toolResponse:e.tool_response,transcriptPath:Ct(e.transcript_path),lastAssistantMessage:Ct(e.last_assistant_message),turnId:Ct(e.turn_id),stopHookActive:yw(e.stop_hook_active),permissionMode:Ct(e.permission_mode),model:Ct(e.model),sessionSource:a}},formatOutput(t){let e=t??{},r=Ew(e),n=e.hookSpecificOutput,o=vw(e);if(!n||!o||o==="Stop")return r;let s={hookEventName:o};return n.additionalContext&&(s.additionalContext=n.additionalContext),o==="PreToolUse"&&(n.permissionDecision==="deny"&&(s.permissionDecision="deny",n.permissionDecisionReason&&(s.permissionDecisionReason=n.permissionDecisionReason)),n.updatedInput&&(s.updatedInput=n.updatedInput)),r.hookSpecificOutput=s,r}};var Yd=require("fs"),Xd=require("os"),Qd=require("path");var ww=/^[A-Za-z0-9_-]+$/;function bw(t,e){if(!t||!e||!ww.test(e))return;let r=t.replace(/^\//,"").replace(/[/.]/g,"-"),n=(0,Qd.join)((0,Xd.homedir)(),".cursor","projects",r,"agent-transcripts",e,`${e}.jsonl`);return(0,Yd.existsSync)(n)?n:void 0}var ep={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name,n=e.workspace_roots?.[0]??e.cwd??process.cwd();if(!We(n))throw new he("invalid_cwd");let o=e.conversation_id||e.generation_id||e.id;return{sessionId:o,cwd:n,prompt:e.prompt??e.query??e.input??e.message,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:bw(n,o),filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}};var tp={normalizeInput(t){let e=t??{},r=e.cwd??process.env.GEMINI_CWD??process.env.GEMINI_PROJECT_DIR??process.env.CLAUDE_PROJECT_DIR??process.cwd();if(!We(r))throw new he("invalid_cwd");let n=e.session_id??process.env.GEMINI_SESSION_ID??void 0,o=e.hook_event_name,s=e.tool_name,i=e.tool_input,a=e.tool_response;return o==="AfterAgent"&&e.prompt_response&&(s=s??"GeminiProvider",i=i??{prompt:e.prompt},a=a??{response:e.prompt_response}),o==="BeforeTool"&&s&&!a&&(a={_preExecution:!0}),o==="Notification"&&(s=s??"GeminiNotification",i=i??{notification_type:e.notification_type,message:e.message},a=a??{details:e.details}),{sessionId:n,cwd:r,prompt:e.prompt,toolName:s,toolInput:i,toolResponse:a,transcriptPath:e.transcript_path}},formatOutput(t){let e={};if(e.continue=t.continue??!0,t.suppressOutput!==void 0&&(e.suppressOutput=t.suppressOutput),t.systemMessage){let r=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;e.systemMessage=t.systemMessage.replace(r,"")}return t.hookSpecificOutput&&(e.hookSpecificOutput={additionalContext:t.hookSpecificOutput.additionalContext}),e}};var Vi={normalizeInput(t){let e=t??{},r=e.cwd??process.cwd();if(!We(r))throw new he("invalid_cwd");return{sessionId:e.sessionId??e.session_id??"unknown",cwd:r,prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}};var rp={normalizeInput(t){let e=t??{},r=e.tool_info??{},n=e.agent_action_name??"",o=r.cwd??process.cwd();if(!We(o))throw new he("invalid_cwd");let s={sessionId:e.trajectory_id??e.execution_id,cwd:o,platform:"windsurf"};switch(n){case"pre_user_prompt":return{...s,prompt:r.user_prompt};case"post_write_code":return{...s,toolName:"Write",filePath:r.file_path,edits:r.edits,toolInput:{file_path:r.file_path,edits:r.edits}};case"post_run_command":return{...s,cwd:r.cwd??s.cwd,toolName:"Bash",toolInput:{command:r.command_line}};case"post_mcp_tool_use":return{...s,toolName:r.mcp_tool_name??"mcp_tool",toolInput:r.mcp_tool_arguments,toolResponse:r.mcp_result};case"post_cascade_response":return{...s,toolName:"cascade_response",toolResponse:r.response};default:return s}},formatOutput(t){return{continue:t.continue??!0}}};function np(t){switch(t){case"claude-code":return Id;case"codex":return Bd;case"cursor":return ep;case"gemini":case"gemini-cli":return tp;case"windsurf":return rp;case"raw":return Vi;default:return Vi}}var sp=require("os"),ip=we(require("path"),1),ap=require("child_process");var No=require("fs"),Mo=we(require("path"),1);var gn={isWorktree:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function op(t){let e=Mo.default.join(t,".git"),r;try{r=(0,No.statSync)(e)}catch(l){return l instanceof Error&&l.code!=="ENOENT"&&f.warn("GIT","Unexpected error checking .git",{error:l instanceof Error?l.message:String(l)}),gn}if(!r.isFile())return gn;let n;try{n=(0,No.readFileSync)(e,"utf-8").trim()}catch(l){return f.warn("GIT","Failed to read .git file",{error:l instanceof Error?l.message:String(l)}),gn}let o=n.match(/^gitdir:\s*(.+)$/);if(!o)return gn;let i=o[1].match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(!i)return gn;let a=i[1],c=Mo.default.basename(t),u=Mo.default.basename(a);return{isWorktree:!0,worktreeName:c,parentRepoPath:a,parentProjectName:u}}function cp(t){return t==="~"||t.startsWith("~/")?t.replace(/^~/,(0,sp.homedir)()):t}function kw(t){try{return(0,ap.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch{return null}}function Ki(t){if(!t||t.trim()==="")return f.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:t}),"unknown-project";let e=cp(t),n=kw(e)??e,o=ip.default.basename(n);if(o===""){if(process.platform==="win32"){let i=t.match(/^([A-Z]):\\/i);if(i){let c=`drive-${i[1].toUpperCase()}`;return f.info("PROJECT_NAME","Drive root detected",{cwd:t,projectName:c}),c}}return f.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:t}),"unknown-project"}return o}function kr(t){let e=Ki(t);if(!t)return{primary:e,parent:null,isWorktree:!1,allProjects:[e]};let r=cp(t),n=op(r);if(n.isWorktree&&n.parentProjectName){let o=`${n.parentProjectName}/${e}`;return{primary:o,parent:n.parentProjectName,isWorktree:!0,allProjects:[n.parentProjectName,o]}}return{primary:e,parent:null,isWorktree:!1,allProjects:[e]}}var up=require("child_process"),lp=require("util"),tr=require("fs");var dp=require("path");var vA=(0,lp.promisify)(up.execFile);function pp(){try{let t=(0,dp.join)(fe.dataDir(),"oauth-stale.marker");return(0,tr.existsSync)(t)?(0,tr.readFileSync)(t,"utf-8"):void 0}catch{return}}var xr=require("node:fs"),hp=require("node:path");var fp="1.3.3";var mp=(0,hp.join)(J,".update-check.json"),xA=1440*60*1e3,xw=10080*60*1e3;function Do(t){return t.replace(/^v/,"").trim()}function $w(t,e){let r=Do(t).split(".").map(o=>parseInt(o,10)||0),n=Do(e).split(".").map(o=>parseInt(o,10)||0);for(let o=0;o<3;o++){let s=(r[o]||0)-(n[o]||0);if(s!==0)return s}return 0}function Pw(){try{if(!(0,xr.existsSync)(mp))return null;let t=JSON.parse((0,xr.readFileSync)(mp,"utf-8"));if(t&&typeof t.latestVersion=="string"&&typeof t.checkedAtEpoch=="number")return{latestVersion:t.latestVersion,checkedAtEpoch:t.checkedAtEpoch}}catch{}return null}function gp(t=Date.now()){let e=Pw();return!e||t-e.checkedAtEpoch>xw||$w(e.latestVersion,fp)<=0?null:`\u{1F4E6} keepmind ${Do(e.latestVersion)} is available (you have ${Do(fp)}). Update with \`npx keepmind@latest update\`, then restart your editor.`}var _p="claude";function Tw(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Ce(t){if(!t)return _p;let e=Tw(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:_p}var yp;function S(t,e,r){function n(a,c){if(a._zod||Object.defineProperty(a,"_zod",{value:{def:c,constr:i,traits:new Set},enumerable:!1}),a._zod.traits.has(t))return;a._zod.traits.add(t),e(a,c);let u=i.prototype,l=Object.keys(u);for(let d=0;d<l.length;d++){let p=l[d];p in a||(a[p]=u[p].bind(a))}}let o=r?.Parent??Object;class s extends o{}Object.defineProperty(s,"name",{value:t});function i(a){var c;let u=r?.Parent?new s:this;n(u,a),(c=u._zod).deferred??(c.deferred=[]);for(let l of u._zod.deferred)l();return u}return Object.defineProperty(i,"init",{value:n}),Object.defineProperty(i,Symbol.hasInstance,{value:a=>r?.Parent&&a instanceof r.Parent?!0:a?._zod?.traits?.has(t)}),Object.defineProperty(i,"name",{value:t}),i}var mt=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}},$r=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name="ZodEncodeError"}};(yp=globalThis).__zod_globalConfig??(yp.__zod_globalConfig={});var Pr=globalThis.__zod_globalConfig;function Ze(t){return t&&Object.assign(Pr,t),Pr}var F={};Cl(F,{BIGINT_FORMAT_RANGES:()=>wp,Class:()=>Ji,NUMBER_FORMAT_RANGES:()=>ea,aborted:()=>Nt,allowsEval:()=>Yi,assert:()=>Cw,assertEqual:()=>Ow,assertIs:()=>Rw,assertNever:()=>Iw,assertNotEqual:()=>zw,assignProp:()=>At,base64ToUint8Array:()=>kp,base64urlToUint8Array:()=>Bw,cached:()=>Or,captureStackTrace:()=>Uo,cleanEnum:()=>Gw,cleanRegex:()=>En,clone:()=>nt,cloneDef:()=>Mw,createTransparentProxy:()=>Fw,defineLazy:()=>K,esc:()=>jo,escapeRegex:()=>bt,explicitlyAborted:()=>ta,extend:()=>Hw,finalizeIssue:()=>Je,floatSafeRemainder:()=>Gi,getElementAtPath:()=>Nw,getEnumValues:()=>yn,getLengthableOrigin:()=>vn,getParsedType:()=>Uw,getSizableOrigin:()=>bp,hexToUint8Array:()=>Xw,isObject:()=>rr,isPlainObject:()=>Mt,issue:()=>zr,joinValues:()=>Lo,jsonStringifyReplacer:()=>Tr,merge:()=>Kw,mergeDefs:()=>wt,normalizeParams:()=>z,nullish:()=>Sn,numKeys:()=>jw,objectClone:()=>Aw,omit:()=>qw,optionalKeys:()=>Qi,parsedType:()=>ra,partial:()=>Ww,pick:()=>Zw,prefixIssues:()=>kt,primitiveTypes:()=>vp,promiseAllObject:()=>Dw,propertyKeyTypes:()=>Xi,randomString:()=>Lw,required:()=>Jw,safeExtend:()=>Vw,shallowClone:()=>Ep,slugify:()=>Bi,stringifyPrimitive:()=>Fo,uint8ArrayToBase64:()=>xp,uint8ArrayToBase64url:()=>Yw,uint8ArrayToHex:()=>Qw,unwrapMessage:()=>_n});function Ow(t){return t}function zw(t){return t}function Rw(t){}function Iw(t){throw new Error("Unexpected value in exhaustive check")}function Cw(t){}function yn(t){let e=Object.values(t).filter(n=>typeof n=="number");return Object.entries(t).filter(([n,o])=>e.indexOf(+n)===-1).map(([n,o])=>o)}function Lo(t,e="|"){return t.map(r=>Fo(r)).join(e)}function Tr(t,e){return typeof e=="bigint"?e.toString():e}function Or(t){return{get value(){{let r=t();return Object.defineProperty(this,"value",{value:r}),r}throw new Error("cached value already set")}}}function Sn(t){return t==null}function En(t){let e=t.startsWith("^")?1:0,r=t.endsWith("$")?t.length-1:t.length;return t.slice(e,r)}function Gi(t,e){let r=t/e,n=Math.round(r),o=Number.EPSILON*Math.max(Math.abs(r),1);return Math.abs(r-n)<o?0:r-n}var Sp=Symbol("evaluating");function K(t,e,r){let n;Object.defineProperty(t,e,{get(){if(n!==Sp)return n===void 0&&(n=Sp,n=r()),n},set(o){Object.defineProperty(t,e,{value:o})},configurable:!0})}function Aw(t){return Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t))}function At(t,e,r){Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!0,configurable:!0})}function wt(...t){let e={};for(let r of t){let n=Object.getOwnPropertyDescriptors(r);Object.assign(e,n)}return Object.defineProperties({},e)}function Mw(t){return wt(t._zod.def)}function Nw(t,e){return e?e.reduce((r,n)=>r?.[n],t):t}function Dw(t){let e=Object.keys(t),r=e.map(n=>t[n]);return Promise.all(r).then(n=>{let o={};for(let s=0;s<e.length;s++)o[e[s]]=n[s];return o})}function Lw(t=10){let e="abcdefghijklmnopqrstuvwxyz",r="";for(let n=0;n<t;n++)r+=e[Math.floor(Math.random()*e.length)];return r}function jo(t){return JSON.stringify(t)}function Bi(t){return t.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}var Uo="captureStackTrace"in Error?Error.captureStackTrace:(...t)=>{};function rr(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}var Yi=Or(()=>{if(Pr.jitless||typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{let t=Function;return new t(""),!0}catch{return!1}});function Mt(t){if(rr(t)===!1)return!1;let e=t.constructor;if(e===void 0||typeof e!="function")return!0;let r=e.prototype;return!(rr(r)===!1||Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)}function Ep(t){return Mt(t)?{...t}:Array.isArray(t)?[...t]:t instanceof Map?new Map(t):t instanceof Set?new Set(t):t}function jw(t){let e=0;for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&e++;return e}var Uw=t=>{let e=typeof t;switch(e){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(t)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":return Array.isArray(t)?"array":t===null?"null":t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?"promise":typeof Map<"u"&&t instanceof Map?"map":typeof Set<"u"&&t instanceof Set?"set":typeof Date<"u"&&t instanceof Date?"date":typeof File<"u"&&t instanceof File?"file":"object";default:throw new Error(`Unknown data type: ${e}`)}},Xi=new Set(["string","number","symbol"]),vp=new Set(["string","number","bigint","boolean","symbol","undefined"]);function bt(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function nt(t,e,r){let n=new t._zod.constr(e??t._zod.def);return(!e||r?.parent)&&(n._zod.parent=t),n}function z(t){let e=t;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function Fw(t){let e;return new Proxy({},{get(r,n,o){return e??(e=t()),Reflect.get(e,n,o)},set(r,n,o,s){return e??(e=t()),Reflect.set(e,n,o,s)},has(r,n){return e??(e=t()),Reflect.has(e,n)},deleteProperty(r,n){return e??(e=t()),Reflect.deleteProperty(e,n)},ownKeys(r){return e??(e=t()),Reflect.ownKeys(e)},getOwnPropertyDescriptor(r,n){return e??(e=t()),Reflect.getOwnPropertyDescriptor(e,n)},defineProperty(r,n,o){return e??(e=t()),Reflect.defineProperty(e,n,o)}})}function Fo(t){return typeof t=="bigint"?t.toString()+"n":typeof t=="string"?`"${t}"`:`${t}`}function Qi(t){return Object.keys(t).filter(e=>t[e]._zod.optin==="optional"&&t[e]._zod.optout==="optional")}var ea={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},wp={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};function Zw(t,e){let r=t._zod.def,n=r.checks;if(n&&n.length>0)throw new Error(".pick() cannot be used on object schemas containing refinements");let s=wt(t._zod.def,{get shape(){let i={};for(let a in e){if(!(a in r.shape))throw new Error(`Unrecognized key: "${a}"`);e[a]&&(i[a]=r.shape[a])}return At(this,"shape",i),i},checks:[]});return nt(t,s)}function qw(t,e){let r=t._zod.def,n=r.checks;if(n&&n.length>0)throw new Error(".omit() cannot be used on object schemas containing refinements");let s=wt(t._zod.def,{get shape(){let i={...t._zod.def.shape};for(let a in e){if(!(a in r.shape))throw new Error(`Unrecognized key: "${a}"`);e[a]&&delete i[a]}return At(this,"shape",i),i},checks:[]});return nt(t,s)}function Hw(t,e){if(!Mt(e))throw new Error("Invalid input to extend: expected a plain object");let r=t._zod.def.checks;if(r&&r.length>0){let s=t._zod.def.shape;for(let i in e)if(Object.getOwnPropertyDescriptor(s,i)!==void 0)throw new Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}let o=wt(t._zod.def,{get shape(){let s={...t._zod.def.shape,...e};return At(this,"shape",s),s}});return nt(t,o)}function Vw(t,e){if(!Mt(e))throw new Error("Invalid input to safeExtend: expected a plain object");let r=wt(t._zod.def,{get shape(){let n={...t._zod.def.shape,...e};return At(this,"shape",n),n}});return nt(t,r)}function Kw(t,e){if(t._zod.def.checks?.length)throw new Error(".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.");let r=wt(t._zod.def,{get shape(){let n={...t._zod.def.shape,...e._zod.def.shape};return At(this,"shape",n),n},get catchall(){return e._zod.def.catchall},checks:e._zod.def.checks??[]});return nt(t,r)}function Ww(t,e,r){let o=e._zod.def.checks;if(o&&o.length>0)throw new Error(".partial() cannot be used on object schemas containing refinements");let i=wt(e._zod.def,{get shape(){let a=e._zod.def.shape,c={...a};if(r)for(let u in r){if(!(u in a))throw new Error(`Unrecognized key: "${u}"`);r[u]&&(c[u]=t?new t({type:"optional",innerType:a[u]}):a[u])}else for(let u in a)c[u]=t?new t({type:"optional",innerType:a[u]}):a[u];return At(this,"shape",c),c},checks:[]});return nt(e,i)}function Jw(t,e,r){let n=wt(e._zod.def,{get shape(){let o=e._zod.def.shape,s={...o};if(r)for(let i in r){if(!(i in s))throw new Error(`Unrecognized key: "${i}"`);r[i]&&(s[i]=new t({type:"nonoptional",innerType:o[i]}))}else for(let i in o)s[i]=new t({type:"nonoptional",innerType:o[i]});return At(this,"shape",s),s}});return nt(e,n)}function Nt(t,e=0){if(t.aborted===!0)return!0;for(let r=e;r<t.issues.length;r++)if(t.issues[r]?.continue!==!0)return!0;return!1}function ta(t,e=0){if(t.aborted===!0)return!0;for(let r=e;r<t.issues.length;r++)if(t.issues[r]?.continue===!1)return!0;return!1}function kt(t,e){return e.map(r=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(t),r})}function _n(t){return typeof t=="string"?t:t?.message}function Je(t,e,r){let n=t.message?t.message:_n(t.inst?._zod.def?.error?.(t))??_n(e?.error?.(t))??_n(r.customError?.(t))??_n(r.localeError?.(t))??"Invalid input",{inst:o,continue:s,input:i,...a}=t;return a.path??(a.path=[]),a.message=n,e?.reportInput&&(a.input=i),a}function bp(t){return t instanceof Set?"set":t instanceof Map?"map":t instanceof File?"file":"unknown"}function vn(t){return Array.isArray(t)?"array":typeof t=="string"?"string":"unknown"}function ra(t){let e=typeof t;switch(e){case"number":return Number.isNaN(t)?"nan":"number";case"object":{if(t===null)return"null";if(Array.isArray(t))return"array";let r=t;if(r&&Object.getPrototypeOf(r)!==Object.prototype&&"constructor"in r&&r.constructor)return r.constructor.name}}return e}function zr(...t){let[e,r,n]=t;return typeof e=="string"?{message:e,code:"custom",input:r,inst:n}:{...e}}function Gw(t){return Object.entries(t).filter(([e,r])=>Number.isNaN(Number.parseInt(e,10))).map(e=>e[1])}function kp(t){let e=atob(t),r=new Uint8Array(e.length);for(let n=0;n<e.length;n++)r[n]=e.charCodeAt(n);return r}function xp(t){let e="";for(let r=0;r<t.length;r++)e+=String.fromCharCode(t[r]);return btoa(e)}function Bw(t){let e=t.replace(/-/g,"+").replace(/_/g,"/"),r="=".repeat((4-e.length%4)%4);return kp(e+r)}function Yw(t){return xp(t).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function Xw(t){let e=t.replace(/^0x/,"");if(e.length%2!==0)throw new Error("Invalid hex string length");let r=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)r[n/2]=Number.parseInt(e.slice(n,n+2),16);return r}function Qw(t){return Array.from(t).map(e=>e.toString(16).padStart(2,"0")).join("")}var Ji=class{constructor(...e){}};var $p=(t,e)=>{t.name="$ZodError",Object.defineProperty(t,"_zod",{value:t._zod,enumerable:!1}),Object.defineProperty(t,"issues",{value:e,enumerable:!1}),t.message=JSON.stringify(e,Tr,2),Object.defineProperty(t,"toString",{value:()=>t.message,enumerable:!1})},Zo=S("$ZodError",$p),na=S("$ZodError",$p,{Parent:Error});function Pp(t,e=r=>r.message){let r={},n=[];for(let o of t.issues)o.path.length>0?(r[o.path[0]]=r[o.path[0]]||[],r[o.path[0]].push(e(o))):n.push(e(o));return{formErrors:n,fieldErrors:r}}function Tp(t,e=r=>r.message){let r={_errors:[]},n=(o,s=[])=>{for(let i of o.issues)if(i.code==="invalid_union"&&i.errors.length)i.errors.map(a=>n({issues:a},[...s,...i.path]));else if(i.code==="invalid_key")n({issues:i.issues},[...s,...i.path]);else if(i.code==="invalid_element")n({issues:i.issues},[...s,...i.path]);else{let a=[...s,...i.path];if(a.length===0)r._errors.push(e(i));else{let c=r,u=0;for(;u<a.length;){let l=a[u];u===a.length-1?(c[l]=c[l]||{_errors:[]},c[l]._errors.push(e(i))):c[l]=c[l]||{_errors:[]},c=c[l],u++}}}};return n(t),r}var qo=t=>(e,r,n,o)=>{let s=n?{...n,async:!1}:{async:!1},i=e._zod.run({value:r,issues:[]},s);if(i instanceof Promise)throw new mt;if(i.issues.length){let a=new(o?.Err??t)(i.issues.map(c=>Je(c,s,Ze())));throw Uo(a,o?.callee),a}return i.value};var Ho=t=>async(e,r,n,o)=>{let s=n?{...n,async:!0}:{async:!0},i=e._zod.run({value:r,issues:[]},s);if(i instanceof Promise&&(i=await i),i.issues.length){let a=new(o?.Err??t)(i.issues.map(c=>Je(c,s,Ze())));throw Uo(a,o?.callee),a}return i.value};var wn=t=>(e,r,n)=>{let o=n?{...n,async:!1}:{async:!1},s=e._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new mt;return s.issues.length?{success:!1,error:new(t??Zo)(s.issues.map(i=>Je(i,o,Ze())))}:{success:!0,data:s.value}},bn=wn(na),kn=t=>async(e,r,n)=>{let o=n?{...n,async:!0}:{async:!0},s=e._zod.run({value:r,issues:[]},o);return s instanceof Promise&&(s=await s),s.issues.length?{success:!1,error:new t(s.issues.map(i=>Je(i,o,Ze())))}:{success:!0,data:s.value}},Vo=kn(na),Op=t=>(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return qo(t)(e,r,o)};var zp=t=>(e,r,n)=>qo(t)(e,r,n);var Rp=t=>async(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return Ho(t)(e,r,o)};var Ip=t=>async(e,r,n)=>Ho(t)(e,r,n);var Cp=t=>(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return wn(t)(e,r,o)};var Ap=t=>(e,r,n)=>wn(t)(e,r,n);var Mp=t=>async(e,r,n)=>{let o=n?{...n,direction:"backward"}:{direction:"backward"};return kn(t)(e,r,o)};var Np=t=>async(e,r,n)=>kn(t)(e,r,n);var Dp=/^[cC][0-9a-z]{6,}$/,Lp=/^[0-9a-z]+$/,jp=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Up=/^[0-9a-vA-V]{20}$/,Fp=/^[A-Za-z0-9]{27}$/,Zp=/^[a-zA-Z0-9_-]{21}$/,qp=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/;var Hp=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,oa=t=>t?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${t}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;var Vp=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;var tb="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";function Kp(){return new RegExp(tb,"u")}var Wp=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Jp=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;var Gp=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Bp=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Yp=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,sa=/^[A-Za-z0-9_-]*$/;var Xp=/^https?$/,Qp=/^\+[1-9]\d{6,14}$/,ef="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",tf=new RegExp(`^${ef}$`);function rf(t){let e="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof t.precision=="number"?t.precision===-1?`${e}`:t.precision===0?`${e}:[0-5]\\d`:`${e}:[0-5]\\d\\.\\d{${t.precision}}`:`${e}(?::[0-5]\\d(?:\\.\\d+)?)?`}function nf(t){return new RegExp(`^${rf(t)}$`)}function of(t){let e=rf({precision:t.precision}),r=["Z"];t.local&&r.push(""),t.offset&&r.push("([+-](?:[01]\\d|2[0-3]):[0-5]\\d)");let n=`${e}(?:${r.join("|")})`;return new RegExp(`^${ef}T(?:${n})$`)}var sf=t=>{let e=t?`[\\s\\S]{${t?.minimum??0},${t?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${e}$`)};var af=/^-?\d+$/,ia=/^-?\d+(?:\.\d+)?$/,cf=/^(?:true|false)$/i,uf=/^null$/i;var lf=/^[^A-Z]*$/,df=/^[^a-z]*$/;var ge=S("$ZodCheck",(t,e)=>{var r;t._zod??(t._zod={}),t._zod.def=e,(r=t._zod).onattach??(r.onattach=[])}),pf={number:"number",bigint:"bigint",object:"date"},aa=S("$ZodCheckLessThan",(t,e)=>{ge.init(t,e);let r=pf[typeof e.value];t._zod.onattach.push(n=>{let o=n._zod.bag,s=(e.inclusive?o.maximum:o.exclusiveMaximum)??Number.POSITIVE_INFINITY;e.value<s&&(e.inclusive?o.maximum=e.value:o.exclusiveMaximum=e.value)}),t._zod.check=n=>{(e.inclusive?n.value<=e.value:n.value<e.value)||n.issues.push({origin:r,code:"too_big",maximum:typeof e.value=="object"?e.value.getTime():e.value,input:n.value,inclusive:e.inclusive,inst:t,continue:!e.abort})}}),ca=S("$ZodCheckGreaterThan",(t,e)=>{ge.init(t,e);let r=pf[typeof e.value];t._zod.onattach.push(n=>{let o=n._zod.bag,s=(e.inclusive?o.minimum:o.exclusiveMinimum)??Number.NEGATIVE_INFINITY;e.value>s&&(e.inclusive?o.minimum=e.value:o.exclusiveMinimum=e.value)}),t._zod.check=n=>{(e.inclusive?n.value>=e.value:n.value>e.value)||n.issues.push({origin:r,code:"too_small",minimum:typeof e.value=="object"?e.value.getTime():e.value,input:n.value,inclusive:e.inclusive,inst:t,continue:!e.abort})}}),ff=S("$ZodCheckMultipleOf",(t,e)=>{ge.init(t,e),t._zod.onattach.push(r=>{var n;(n=r._zod.bag).multipleOf??(n.multipleOf=e.value)}),t._zod.check=r=>{if(typeof r.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof r.value=="bigint"?r.value%e.value===BigInt(0):Gi(r.value,e.value)===0)||r.issues.push({origin:typeof r.value,code:"not_multiple_of",divisor:e.value,input:r.value,inst:t,continue:!e.abort})}}),mf=S("$ZodCheckNumberFormat",(t,e)=>{ge.init(t,e),e.format=e.format||"float64";let r=e.format?.includes("int"),n=r?"int":"number",[o,s]=ea[e.format];t._zod.onattach.push(i=>{let a=i._zod.bag;a.format=e.format,a.minimum=o,a.maximum=s,r&&(a.pattern=af)}),t._zod.check=i=>{let a=i.value;if(r){if(!Number.isInteger(a)){i.issues.push({expected:n,format:e.format,code:"invalid_type",continue:!1,input:a,inst:t});return}if(!Number.isSafeInteger(a)){a>0?i.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:n,inclusive:!0,continue:!e.abort}):i.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:n,inclusive:!0,continue:!e.abort});return}}a<o&&i.issues.push({origin:"number",input:a,code:"too_small",minimum:o,inclusive:!0,inst:t,continue:!e.abort}),a>s&&i.issues.push({origin:"number",input:a,code:"too_big",maximum:s,inclusive:!0,inst:t,continue:!e.abort})}});var hf=S("$ZodCheckMaxLength",(t,e)=>{var r;ge.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!Sn(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag.maximum??Number.POSITIVE_INFINITY;e.maximum<o&&(n._zod.bag.maximum=e.maximum)}),t._zod.check=n=>{let o=n.value;if(o.length<=e.maximum)return;let i=vn(o);n.issues.push({origin:i,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:t,continue:!e.abort})}}),gf=S("$ZodCheckMinLength",(t,e)=>{var r;ge.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!Sn(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag.minimum??Number.NEGATIVE_INFINITY;e.minimum>o&&(n._zod.bag.minimum=e.minimum)}),t._zod.check=n=>{let o=n.value;if(o.length>=e.minimum)return;let i=vn(o);n.issues.push({origin:i,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:t,continue:!e.abort})}}),_f=S("$ZodCheckLengthEquals",(t,e)=>{var r;ge.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!Sn(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag;o.minimum=e.length,o.maximum=e.length,o.length=e.length}),t._zod.check=n=>{let o=n.value,s=o.length;if(s===e.length)return;let i=vn(o),a=s>e.length;n.issues.push({origin:i,...a?{code:"too_big",maximum:e.length}:{code:"too_small",minimum:e.length},inclusive:!0,exact:!0,input:n.value,inst:t,continue:!e.abort})}}),xn=S("$ZodCheckStringFormat",(t,e)=>{var r,n;ge.init(t,e),t._zod.onattach.push(o=>{let s=o._zod.bag;s.format=e.format,e.pattern&&(s.patterns??(s.patterns=new Set),s.patterns.add(e.pattern))}),e.pattern?(r=t._zod).check??(r.check=o=>{e.pattern.lastIndex=0,!e.pattern.test(o.value)&&o.issues.push({origin:"string",code:"invalid_format",format:e.format,input:o.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:t,continue:!e.abort})}):(n=t._zod).check??(n.check=()=>{})}),yf=S("$ZodCheckRegex",(t,e)=>{xn.init(t,e),t._zod.check=r=>{e.pattern.lastIndex=0,!e.pattern.test(r.value)&&r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:e.pattern.toString(),inst:t,continue:!e.abort})}}),Sf=S("$ZodCheckLowerCase",(t,e)=>{e.pattern??(e.pattern=lf),xn.init(t,e)}),Ef=S("$ZodCheckUpperCase",(t,e)=>{e.pattern??(e.pattern=df),xn.init(t,e)}),vf=S("$ZodCheckIncludes",(t,e)=>{ge.init(t,e);let r=bt(e.includes),n=new RegExp(typeof e.position=="number"?`^.{${e.position}}${r}`:r);e.pattern=n,t._zod.onattach.push(o=>{let s=o._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(n)}),t._zod.check=o=>{o.value.includes(e.includes,e.position)||o.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:e.includes,input:o.value,inst:t,continue:!e.abort})}}),wf=S("$ZodCheckStartsWith",(t,e)=>{ge.init(t,e);let r=new RegExp(`^${bt(e.prefix)}.*`);e.pattern??(e.pattern=r),t._zod.onattach.push(n=>{let o=n._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(r)}),t._zod.check=n=>{n.value.startsWith(e.prefix)||n.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:e.prefix,input:n.value,inst:t,continue:!e.abort})}}),bf=S("$ZodCheckEndsWith",(t,e)=>{ge.init(t,e);let r=new RegExp(`.*${bt(e.suffix)}$`);e.pattern??(e.pattern=r),t._zod.onattach.push(n=>{let o=n._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(r)}),t._zod.check=n=>{n.value.endsWith(e.suffix)||n.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:e.suffix,input:n.value,inst:t,continue:!e.abort})}});var kf=S("$ZodCheckOverwrite",(t,e)=>{ge.init(t,e),t._zod.check=r=>{r.value=e.tx(r.value)}});var Wo=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if(typeof e=="function"){e(this,{execution:"sync"}),e(this,{execution:"async"});return}let n=e.split(`
24
24
  `).filter(i=>i),o=Math.min(...n.map(i=>i.length-i.trimStart().length)),s=n.map(i=>i.slice(o)).map(i=>" ".repeat(this.indent*2)+i);for(let i of s)this.content.push(i)}compile(){let e=Function,r=this?.args,o=[...(this?.content??[""]).map(s=>` ${s}`)];return new e(...r,o.join(`
25
25
  `))}};var $f={major:4,minor:4,patch:3};var X=S("$ZodType",(t,e)=>{var r;t??(t={}),t._zod.def=e,t._zod.bag=t._zod.bag||{},t._zod.version=$f;let n=[...t._zod.def.checks??[]];t._zod.traits.has("$ZodCheck")&&n.unshift(t);for(let o of n)for(let s of o._zod.onattach)s(t);if(n.length===0)(r=t._zod).deferred??(r.deferred=[]),t._zod.deferred?.push(()=>{t._zod.run=t._zod.parse});else{let o=(i,a,c)=>{let u=Nt(i),l;for(let d of a){if(d._zod.def.when){if(ta(i)||!d._zod.def.when(i))continue}else if(u)continue;let p=i.issues.length,m=d._zod.check(i);if(m instanceof Promise&&c?.async===!1)throw new mt;if(l||m instanceof Promise)l=(l??Promise.resolve()).then(async()=>{await m,i.issues.length!==p&&(u||(u=Nt(i,p)))});else{if(i.issues.length===p)continue;u||(u=Nt(i,p))}}return l?l.then(()=>i):i},s=(i,a,c)=>{if(Nt(i))return i.aborted=!0,i;let u=o(a,n,c);if(u instanceof Promise){if(c.async===!1)throw new mt;return u.then(l=>t._zod.parse(l,c))}return t._zod.parse(u,c)};t._zod.run=(i,a)=>{if(a.skipChecks)return t._zod.parse(i,a);if(a.direction==="backward"){let u=t._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return u instanceof Promise?u.then(l=>s(l,i,a)):s(u,i,a)}let c=t._zod.parse(i,a);if(c instanceof Promise){if(a.async===!1)throw new mt;return c.then(u=>o(u,n,a))}return o(c,n,a)}}K(t,"~standard",()=>({validate:o=>{try{let s=bn(t,o);return s.success?{value:s.data}:{issues:s.error?.issues}}catch{return Vo(t,o).then(i=>i.success?{value:i.data}:{issues:i.error?.issues})}},vendor:"zod",version:1}))}),Bo=S("$ZodString",(t,e)=>{X.init(t,e),t._zod.pattern=[...t?._zod.bag?.patterns??[]].pop()??sf(t._zod.bag),t._zod.parse=(r,n)=>{if(e.coerce)try{r.value=String(r.value)}catch{}return typeof r.value=="string"||r.issues.push({expected:"string",code:"invalid_type",input:r.value,inst:t}),r}}),Q=S("$ZodStringFormat",(t,e)=>{xn.init(t,e),Bo.init(t,e)}),Mf=S("$ZodGUID",(t,e)=>{e.pattern??(e.pattern=Hp),Q.init(t,e)}),Nf=S("$ZodUUID",(t,e)=>{if(e.version){let n={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[e.version];if(n===void 0)throw new Error(`Invalid UUID version: "${e.version}"`);e.pattern??(e.pattern=oa(n))}else e.pattern??(e.pattern=oa());Q.init(t,e)}),Df=S("$ZodEmail",(t,e)=>{e.pattern??(e.pattern=Vp),Q.init(t,e)}),Lf=S("$ZodURL",(t,e)=>{Q.init(t,e),t._zod.check=r=>{try{let n=r.value.trim();if(!e.normalize&&e.protocol?.source===Xp.source&&!/^https?:\/\//i.test(n)){r.issues.push({code:"invalid_format",format:"url",note:"Invalid URL format",input:r.value,inst:t,continue:!e.abort});return}let o=new URL(n);e.hostname&&(e.hostname.lastIndex=0,e.hostname.test(o.hostname)||r.issues.push({code:"invalid_format",format:"url",note:"Invalid hostname",pattern:e.hostname.source,input:r.value,inst:t,continue:!e.abort})),e.protocol&&(e.protocol.lastIndex=0,e.protocol.test(o.protocol.endsWith(":")?o.protocol.slice(0,-1):o.protocol)||r.issues.push({code:"invalid_format",format:"url",note:"Invalid protocol",pattern:e.protocol.source,input:r.value,inst:t,continue:!e.abort})),e.normalize?r.value=o.href:r.value=n;return}catch{r.issues.push({code:"invalid_format",format:"url",input:r.value,inst:t,continue:!e.abort})}}}),jf=S("$ZodEmoji",(t,e)=>{e.pattern??(e.pattern=Kp()),Q.init(t,e)}),Uf=S("$ZodNanoID",(t,e)=>{e.pattern??(e.pattern=Zp),Q.init(t,e)}),Ff=S("$ZodCUID",(t,e)=>{e.pattern??(e.pattern=Dp),Q.init(t,e)}),Zf=S("$ZodCUID2",(t,e)=>{e.pattern??(e.pattern=Lp),Q.init(t,e)}),qf=S("$ZodULID",(t,e)=>{e.pattern??(e.pattern=jp),Q.init(t,e)}),Hf=S("$ZodXID",(t,e)=>{e.pattern??(e.pattern=Up),Q.init(t,e)}),Vf=S("$ZodKSUID",(t,e)=>{e.pattern??(e.pattern=Fp),Q.init(t,e)}),Kf=S("$ZodISODateTime",(t,e)=>{e.pattern??(e.pattern=of(e)),Q.init(t,e)}),Wf=S("$ZodISODate",(t,e)=>{e.pattern??(e.pattern=tf),Q.init(t,e)}),Jf=S("$ZodISOTime",(t,e)=>{e.pattern??(e.pattern=nf(e)),Q.init(t,e)}),Gf=S("$ZodISODuration",(t,e)=>{e.pattern??(e.pattern=qp),Q.init(t,e)}),Bf=S("$ZodIPv4",(t,e)=>{e.pattern??(e.pattern=Wp),Q.init(t,e),t._zod.bag.format="ipv4"}),Yf=S("$ZodIPv6",(t,e)=>{e.pattern??(e.pattern=Jp),Q.init(t,e),t._zod.bag.format="ipv6",t._zod.check=r=>{try{new URL(`http://[${r.value}]`)}catch{r.issues.push({code:"invalid_format",format:"ipv6",input:r.value,inst:t,continue:!e.abort})}}});var Xf=S("$ZodCIDRv4",(t,e)=>{e.pattern??(e.pattern=Gp),Q.init(t,e)}),Qf=S("$ZodCIDRv6",(t,e)=>{e.pattern??(e.pattern=Bp),Q.init(t,e),t._zod.check=r=>{let n=r.value.split("/");try{if(n.length!==2)throw new Error;let[o,s]=n;if(!s)throw new Error;let i=Number(s);if(`${i}`!==s)throw new Error;if(i<0||i>128)throw new Error;new URL(`http://[${o}]`)}catch{r.issues.push({code:"invalid_format",format:"cidrv6",input:r.value,inst:t,continue:!e.abort})}}});function em(t){if(t==="")return!0;if(/\s/.test(t)||t.length%4!==0)return!1;try{return atob(t),!0}catch{return!1}}var tm=S("$ZodBase64",(t,e)=>{e.pattern??(e.pattern=Yp),Q.init(t,e),t._zod.bag.contentEncoding="base64",t._zod.check=r=>{em(r.value)||r.issues.push({code:"invalid_format",format:"base64",input:r.value,inst:t,continue:!e.abort})}});function ob(t){if(!sa.test(t))return!1;let e=t.replace(/[-_]/g,n=>n==="-"?"+":"/"),r=e.padEnd(Math.ceil(e.length/4)*4,"=");return em(r)}var rm=S("$ZodBase64URL",(t,e)=>{e.pattern??(e.pattern=sa),Q.init(t,e),t._zod.bag.contentEncoding="base64url",t._zod.check=r=>{ob(r.value)||r.issues.push({code:"invalid_format",format:"base64url",input:r.value,inst:t,continue:!e.abort})}}),nm=S("$ZodE164",(t,e)=>{e.pattern??(e.pattern=Qp),Q.init(t,e)});function sb(t,e=null){try{let r=t.split(".");if(r.length!==3)return!1;let[n]=r;if(!n)return!1;let o=JSON.parse(atob(n));return!("typ"in o&&o?.typ!=="JWT"||!o.alg||e&&(!("alg"in o)||o.alg!==e))}catch{return!1}}var om=S("$ZodJWT",(t,e)=>{Q.init(t,e),t._zod.check=r=>{sb(r.value,e.alg)||r.issues.push({code:"invalid_format",format:"jwt",input:r.value,inst:t,continue:!e.abort})}});var la=S("$ZodNumber",(t,e)=>{X.init(t,e),t._zod.pattern=t._zod.bag.pattern??ia,t._zod.parse=(r,n)=>{if(e.coerce)try{r.value=Number(r.value)}catch{}let o=r.value;if(typeof o=="number"&&!Number.isNaN(o)&&Number.isFinite(o))return r;let s=typeof o=="number"?Number.isNaN(o)?"NaN":Number.isFinite(o)?void 0:"Infinity":void 0;return r.issues.push({expected:"number",code:"invalid_type",input:o,inst:t,...s?{received:s}:{}}),r}}),sm=S("$ZodNumberFormat",(t,e)=>{mf.init(t,e),la.init(t,e)}),im=S("$ZodBoolean",(t,e)=>{X.init(t,e),t._zod.pattern=cf,t._zod.parse=(r,n)=>{if(e.coerce)try{r.value=!!r.value}catch{}let o=r.value;return typeof o=="boolean"||r.issues.push({expected:"boolean",code:"invalid_type",input:o,inst:t}),r}});var am=S("$ZodNull",(t,e)=>{X.init(t,e),t._zod.pattern=uf,t._zod.values=new Set([null]),t._zod.parse=(r,n)=>{let o=r.value;return o===null||r.issues.push({expected:"null",code:"invalid_type",input:o,inst:t}),r}});var cm=S("$ZodUnknown",(t,e)=>{X.init(t,e),t._zod.parse=r=>r}),um=S("$ZodNever",(t,e)=>{X.init(t,e),t._zod.parse=(r,n)=>(r.issues.push({expected:"never",code:"invalid_type",input:r.value,inst:t}),r)});function Pf(t,e,r){t.issues.length&&e.issues.push(...kt(r,t.issues)),e.value[r]=t.value}var lm=S("$ZodArray",(t,e)=>{X.init(t,e),t._zod.parse=(r,n)=>{let o=r.value;if(!Array.isArray(o))return r.issues.push({expected:"array",code:"invalid_type",input:o,inst:t}),r;r.value=Array(o.length);let s=[];for(let i=0;i<o.length;i++){let a=o[i],c=e.element._zod.run({value:a,issues:[]},n);c instanceof Promise?s.push(c.then(u=>Pf(u,r,i))):Pf(c,r,i)}return s.length?Promise.all(s).then(()=>r):r}});function Go(t,e,r,n,o,s){let i=r in n;if(t.issues.length){if(o&&s&&!i)return;e.issues.push(...kt(r,t.issues))}if(!i&&!o){t.issues.length||e.issues.push({code:"invalid_type",expected:"nonoptional",input:void 0,path:[r]});return}t.value===void 0?i&&(e.value[r]=void 0):e.value[r]=t.value}function dm(t){let e=Object.keys(t.shape);for(let n of e)if(!t.shape?.[n]?._zod?.traits?.has("$ZodType"))throw new Error(`Invalid element at key "${n}": expected a Zod schema`);let r=Qi(t.shape);return{...t,keys:e,keySet:new Set(e),numKeys:e.length,optionalKeys:new Set(r)}}function pm(t,e,r,n,o,s){let i=[],a=o.keySet,c=o.catchall._zod,u=c.def.type,l=c.optin==="optional",d=c.optout==="optional";for(let p in e){if(p==="__proto__"||a.has(p))continue;if(u==="never"){i.push(p);continue}let m=c.run({value:e[p],issues:[]},n);m instanceof Promise?t.push(m.then(h=>Go(h,r,p,e,l,d))):Go(m,r,p,e,l,d)}return i.length&&r.issues.push({code:"unrecognized_keys",keys:i,input:e,inst:s}),t.length?Promise.all(t).then(()=>r):r}var ib=S("$ZodObject",(t,e)=>{if(X.init(t,e),!Object.getOwnPropertyDescriptor(e,"shape")?.get){let a=e.shape;Object.defineProperty(e,"shape",{get:()=>{let c={...a};return Object.defineProperty(e,"shape",{value:c}),c}})}let n=Or(()=>dm(e));K(t._zod,"propValues",()=>{let a=e.shape,c={};for(let u in a){let l=a[u]._zod;if(l.values){c[u]??(c[u]=new Set);for(let d of l.values)c[u].add(d)}}return c});let o=rr,s=e.catchall,i;t._zod.parse=(a,c)=>{i??(i=n.value);let u=a.value;if(!o(u))return a.issues.push({expected:"object",code:"invalid_type",input:u,inst:t}),a;a.value={};let l=[],d=i.shape;for(let p of i.keys){let m=d[p],h=m._zod.optin==="optional",y=m._zod.optout==="optional",g=m._zod.run({value:u[p],issues:[]},c);g instanceof Promise?l.push(g.then(E=>Go(E,a,p,u,h,y))):Go(g,a,p,u,h,y)}return s?pm(l,u,a,c,n.value,t):l.length?Promise.all(l).then(()=>a):a}}),fm=S("$ZodObjectJIT",(t,e)=>{ib.init(t,e);let r=t._zod.parse,n=Or(()=>dm(e)),o=p=>{let m=new Wo(["shape","payload","ctx"]),h=n.value,y=w=>{let $=jo(w);return`shape[${$}]._zod.run({ value: input[${$}], issues: [] }, ctx)`};m.write("const input = payload.value;");let g=Object.create(null),E=0;for(let w of h.keys)g[w]=`key_${E++}`;m.write("const newResult = {};");for(let w of h.keys){let $=g[w],x=jo(w),je=p[w],Ve=je?._zod?.optin==="optional",an=je?._zod?.optout==="optional";m.write(`const ${$} = ${y(w)};`),Ve&&an?m.write(`
26
26
  if (${$}.issues.length) {
@@ -220,7 +220,7 @@ ${m}`}let c=i.lineStart;for(let l=i.lineStart-1;l>=0;l--){let d=a[l].trim();if(d
220
220
  ${u}`}var V_=new Set([".js",".jsx",".ts",".tsx",".mjs",".cjs",".py",".pyw",".go",".rs",".rb",".java",".cs",".cpp",".cc",".cxx",".c",".h",".hpp",".hh",".swift",".kt",".kts",".php",".vue",".svelte",".ex",".exs",".lua",".scala",".sc",".sh",".bash",".zsh",".hs",".zig",".css",".scss",".toml",".yml",".yaml",".sql",".md",".mdx"]),KP=new Set(["node_modules",".git","dist","build",".next","__pycache__",".venv","venv","env",".env","target","vendor",".cache",".turbo","coverage",".nyc_output",".claude",".smart-file-read"]),JP=512*1024;async function*G_(t,e,r=20,n){if(r<=0)return;let o;try{o=await(0,qr.readdir)(t,{withFileTypes:!0})}catch(s){y.debug("WORKER",`walkDir: failed to read directory ${t}`,void 0,s instanceof Error?s:void 0);return}for(let s of o){if(s.name.startsWith(".")&&s.name!=="."||KP.has(s.name))continue;let i=(0,ro.join)(t,s.name);if(s.isDirectory())yield*G_(i,e,r-1,n);else if(s.isFile()){let a=s.name.slice(s.name.lastIndexOf("."));(V_.has(a)||n&&n.has(a))&&(yield i)}}}async function BP(t){try{let e=await(0,qr.stat)(t);if(e.size>JP||e.size===0)return null;let r=await(0,qr.readFile)(t,"utf-8");return r.slice(0,1e3).includes("\0")?null:r}catch(e){return y.debug("WORKER",`safeReadFile: failed to read ${t}`,void 0,e instanceof Error?e:void 0),null}}async function K_(t,e,r={}){let n=r.maxResults||20,o=e.toLowerCase(),s=o.split(/[\s_\-./]+/).filter(E=>E.length>0),i=r.projectRoot||t,a=to(i),c=new Set;for(let E of Object.values(a.grammars))for(let v of E.extensions)V_.has(v)||c.add(v);let u=[];for await(let E of G_(t,t,20,c.size>0?c:void 0)){if(r.filePattern&&!(0,ro.relative)(t,E).toLowerCase().includes(r.filePattern.toLowerCase()))continue;let v=await BP(E);v&&u.push({absolutePath:E,relativePath:(0,ro.relative)(t,E),content:v})}let l=F_(u,i),d=[],p=[],f=0;for(let[E,v]of l){f+=YP(v);let x=Ws(E.toLowerCase(),s)>0,ve=[],xe=(Zt,ir)=>{for(let ce of Zt){let kt=0,Be="",Zr=Ws(ce.name.toLowerCase(),s);Zr>0&&(kt+=Zr*3,Be="name match"),ce.signature.toLowerCase().includes(o)&&(kt+=2,Be=Be?`${Be} + signature`:"signature match"),ce.jsdoc&&ce.jsdoc.toLowerCase().includes(o)&&(kt+=1,Be=Be?`${Be} + jsdoc`:"jsdoc match"),kt>0&&(x=!0,ve.push({filePath:E,symbolName:ir?`${ir}.${ce.name}`:ce.name,kind:ce.kind,signature:ce.signature,jsdoc:ce.jsdoc,lineStart:ce.lineStart,lineEnd:ce.lineEnd,matchReason:Be})),ce.children&&xe(ce.children,ce.name)}};xe(v.symbols),x&&(d.push(v),p.push(...ve))}p.sort((E,v)=>{let $=Ws(E.symbolName.toLowerCase(),s);return Ws(v.symbolName.toLowerCase(),s)-$});let m=p.slice(0,n),_=new Set(m.map(E=>E.filePath)),S=d.filter(E=>_.has(E.filePath)).slice(0,n),b=S.reduce((E,v)=>E+v.foldedTokenEstimate,0);return{foldedFiles:S,matchingSymbols:m,totalFilesScanned:u.length,totalSymbolsFound:f,tokenEstimate:b}}function Ws(t,e){let r=0;for(let n of e)if(t===n)r+=10;else if(t.includes(n))r+=5;else{let o=0,s=0;for(let i of n){let a=t.indexOf(i,o);a!==-1&&(s++,o=a+1)}s===n.length&&(r+=1)}return r}function YP(t){let e=t.symbols.length;for(let r of t.symbols)r.children&&(e+=r.children.length);return e}function J_(t,e){let r=[];if(r.push(`\u{1F50D} Smart Search: "${e}"`),r.push(` Scanned ${t.totalFilesScanned} files, found ${t.totalSymbolsFound} symbols`),r.push(` ${t.matchingSymbols.length} matches across ${t.foldedFiles.length} files (~${t.tokenEstimate} tokens for folded view)`),r.push(""),t.matchingSymbols.length===0)return r.push(" No matching symbols found."),r.join(`
221
221
  `);r.push("\u2500\u2500 Matching Symbols \u2500\u2500"),r.push("");for(let n of t.matchingSymbols){if(r.push(` ${n.kind} ${n.symbolName} (${n.filePath}:${n.lineStart+1})`),r.push(` ${n.signature}`),n.jsdoc){let o=n.jsdoc.split(`
222
222
  `).find(s=>s.replace(/^[\s*/]+/,"").trim().length>0);o&&r.push(` \u{1F4AC} ${o.replace(/^[\s*/]+/,"").trim()}`)}r.push("")}r.push("\u2500\u2500 Folded File Views \u2500\u2500"),r.push("");for(let n of t.foldedFiles)r.push(Ur(n)),r.push("");return r.push("\u2500\u2500 Actions \u2500\u2500"),r.push(" To see full implementation: use smart_unfold with file path and symbol name"),r.join(`
223
- `)}var Du=require("node:fs/promises"),Ks=require("node:fs"),nt=require("node:path"),oy=require("node:os"),sy=require("node:url");var B_="claude";function XP(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Vs(t){if(!t)return B_;let e=XP(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:B_}var QP=Et(ue.API_REQUEST),Je=class extends Error{kind;status;cause;constructor(e,r,n={}){super(r),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Gs=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=eT(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??QP}async startSession(e){let r=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",r)}async recordEvent(e){let r=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,r)}async endSession(e){if(!e.sessionId)throw new Je("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e){return this.request("POST","/v1/context",this.buildSearchPayload(e))}async getJobStatus(e){if(!e)throw new Je("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let r=e.content,n=e.kind??"manual",o=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,type:n,narrative:r,...o?{title:o}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,r,n){if(!this.apiKey||!this.apiKey.trim())throw new Je("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let o=`${this.baseUrl}${r}`,s={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(s.body=JSON.stringify(n));let i;try{i=await wu(o,s,this.timeoutMs)}catch(c){let u=c instanceof Error?c.message:String(c),l=/timed out|timeout/i.test(u);throw new Je(l?"timeout":"transport",`Server ${e} ${r} failed: ${u}`,{cause:c})}if(!i.ok){let c=await i.text().catch(()=>"");throw new Je("http_error",`Server ${e} ${r} returned ${i.status}: ${tT(c,200)}`,{status:i.status})}let a=await i.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){throw new Je("invalid_response",`Server ${e} ${r} returned non-JSON response`,{cause:c})}}};function Y_(t){return t instanceof Je}function eT(t){return t.replace(/\/+$/,"")}function Au(t){return typeof t=="string"?Vs(t):null}function tT(t,e){return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Mu(){let e=(Ms().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function X_(){let t=Ms(),e=(...i)=>{for(let a of i){let c=(a??"").trim();if(c.length>0)return c}return""},r=e(t.CLAUDE_MEM_SERVER_URL,t.CLAUDE_MEM_SERVER_BETA_URL),n=e(t.CLAUDE_MEM_SERVER_API_KEY,t.CLAUDE_MEM_SERVER_BETA_API_KEY),o=e(t.CLAUDE_MEM_SERVER_PROJECT_ID,t.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!r)return y.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return y.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!o)return y.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let s={serverBaseUrl:r,apiKey:n};return{runtime:"server",client:new Gs(s),projectId:o,serverBaseUrl:r}}var ST={},rT="1.3.2";console.log=(...t)=>{y.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var iy=!1,ay=(()=>{if(typeof __dirname<"u")return __dirname;try{return(0,nt.dirname)((0,sy.fileURLToPath)(ST.url))}catch{return iy=!0,process.cwd()}})(),Nu=T_()??(0,nt.resolve)(ay,"worker-service.cjs");function nT(){iy&&((0,Ks.existsSync)(Nu)||y.error("SYSTEM","mcp-server: dirname resolution failed (both __dirname and import.meta.url are unavailable). Fell back to process.cwd() and the resolved WORKER_SCRIPT_PATH does not exist. This is the actual problem \u2014 the worker bundle is fine, but mcp-server cannot locate it. Worker auto-start will fail until the dirname-resolution path is fixed.",{workerScriptPath:Nu,mcpServerDir:ay}))}var Q_={search:"/api/search",timeline:"/api/timeline"};async function Cu(t,e){y.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.json();return y.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),s}catch(o){return y.error("SYSTEM","\u2190 Worker API error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function oT(t,e){y.debug("SYSTEM","\u2192 Worker API text",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.text();return y.debug("SYSTEM","\u2190 Worker API text success",void 0,{endpoint:t}),{content:[{type:"text",text:s}]}}catch(o){return y.error("SYSTEM","\u2190 Worker API text error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function sT(t,e){let r=await Xn(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok){let o=await r.text();throw new Error(`Worker API error (${r.status}): ${o}`)}let n=await r.json();return y.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(n,null,2)}]}}async function sr(t,e){y.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{return await sT(t,e)}catch(r){return y.error("HTTP","Worker API error (POST)",{endpoint:t},r instanceof Error?r:new Error(String(r))),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function iT(){try{return(await Xn("/api/health")).ok}catch(t){return y.debug("SYSTEM","Worker health check failed",{},t instanceof Error?t:new Error(String(t))),!1}}function aT(){if(Mu()!=="server")return null;let e=X_();return e?{...e,available:!0}:{runtime:"server",available:!1,reason:"server runtime is selected but configuration is incomplete (missing url, api key, or project id)"}}function oo(t){return Y_(t)?{content:[{type:"text",text:`Server error (${t.kind}${t.status?` ${t.status}`:""}): ${t.message}`}],isError:!0}:{content:[{type:"text",text:`Tool error: ${t instanceof Error?t.message:String(t)}`}],isError:!0}}function so(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}function io(t){let e=aT();if(!e)throw new Je("transport",`${t} requires CLAUDE_MEM_RUNTIME=server. Current runtime is "worker"; use the existing search/timeline/get_observations tools for worker-mode memory access.`);if(!e.available)throw new Je("missing_api_key",`${t}: ${e.reason}`);return e}async function ey(t){try{let e=io("observation_add");if(typeof t?.content!="string"||t.content.trim().length===0)throw new Error('observation_add: "content" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,content:t.content,...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.kind!==void 0?{kind:t.kind}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}},o=await e.client.addObservation(n);return so(o)}catch(e){return oo(e)}}function Bs(t){return typeof t=="string"?Vs(t):null}async function cT(t){try{let e=io("observation_record_event");if(typeof t?.eventType!="string"||t.eventType.trim().length===0)throw new Error('observation_record_event: "eventType" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,sourceType:t.sourceType??"api",eventType:t.eventType,occurredAtEpoch:typeof t.occurredAtEpoch=="number"?t.occurredAtEpoch:Date.now(),...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.memorySessionId!==void 0?{memorySessionId:t.memorySessionId}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.payload!==void 0?{payload:t.payload}:{},...t.generate!==void 0?{generate:t.generate}:{}},o=await e.client.recordEvent(n);return so(o)}catch(e){return oo(e)}}async function ty(t){try{let e=io("observation_search");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_search: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.searchObservations(n);return so(o)}catch(e){return oo(e)}}async function ry(t){try{let e=io("observation_context");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_context: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.contextObservations(n);return so(o)}catch(e){return oo(e)}}function uT(t){return Array.isArray(t.projects)?t.projects.map(e=>typeof e=="string"?e.trim():"").filter(Boolean):typeof t.projects=="string"?t.projects.split(",").map(e=>e.trim()).filter(Boolean):typeof t.project=="string"&&t.project.trim().length>0?[t.project.trim()]:[]}async function lT(t){let e=uT(t);return e.length===0?{content:[{type:"text",text:'session_start_context: "project" or "projects" is required'}],isError:!0}:oT("/api/context/inject",{projects:e.join(","),...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.full!==void 0?{full:t.full}:{},...t.colors!==void 0?{colors:t.colors}:{}})}async function dT(t){try{let e=io("observation_generation_status"),r=(t?.jobId??t?.job_id??"").trim();if(!r)throw new Error('observation_generation_status: "jobId" is required');let n=await e.client.getJobStatus(r);return so(n)}catch(e){return oo(e)}}async function pT(){if(await iT())return!0;y.warn("SYSTEM","Worker not available, attempting auto-start for MCP client"),nT();try{let t=xu(),e=await R_(t,Nu);return e==="dead"&&y.error("SYSTEM","Worker auto-start failed \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running. Check earlier log lines for the specific failure reason (Bun not found, missing worker bundle, port conflict, etc.)."),e!=="dead"}catch(t){return y.error("SYSTEM","Worker auto-start threw \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running.",void 0,t instanceof Error?t:new Error(String(t))),!1}}var cy=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW):
223
+ `)}var Du=require("node:fs/promises"),Ks=require("node:fs"),nt=require("node:path"),oy=require("node:os"),sy=require("node:url");var B_="claude";function XP(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Vs(t){if(!t)return B_;let e=XP(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:B_}var QP=Et(ue.API_REQUEST),Je=class extends Error{kind;status;cause;constructor(e,r,n={}){super(r),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Gs=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=eT(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??QP}async startSession(e){let r=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",r)}async recordEvent(e){let r=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,r)}async endSession(e){if(!e.sessionId)throw new Je("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e){return this.request("POST","/v1/context",this.buildSearchPayload(e))}async getJobStatus(e){if(!e)throw new Je("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let r=e.content,n=e.kind??"manual",o=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,type:n,narrative:r,...o?{title:o}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,r,n){if(!this.apiKey||!this.apiKey.trim())throw new Je("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let o=`${this.baseUrl}${r}`,s={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(s.body=JSON.stringify(n));let i;try{i=await wu(o,s,this.timeoutMs)}catch(c){let u=c instanceof Error?c.message:String(c),l=/timed out|timeout/i.test(u);throw new Je(l?"timeout":"transport",`Server ${e} ${r} failed: ${u}`,{cause:c})}if(!i.ok){let c=await i.text().catch(()=>"");throw new Je("http_error",`Server ${e} ${r} returned ${i.status}: ${tT(c,200)}`,{status:i.status})}let a=await i.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){throw new Je("invalid_response",`Server ${e} ${r} returned non-JSON response`,{cause:c})}}};function Y_(t){return t instanceof Je}function eT(t){return t.replace(/\/+$/,"")}function Au(t){return typeof t=="string"?Vs(t):null}function tT(t,e){return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Mu(){let e=(Ms().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function X_(){let t=Ms(),e=(...i)=>{for(let a of i){let c=(a??"").trim();if(c.length>0)return c}return""},r=e(t.CLAUDE_MEM_SERVER_URL,t.CLAUDE_MEM_SERVER_BETA_URL),n=e(t.CLAUDE_MEM_SERVER_API_KEY,t.CLAUDE_MEM_SERVER_BETA_API_KEY),o=e(t.CLAUDE_MEM_SERVER_PROJECT_ID,t.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!r)return y.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return y.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!o)return y.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let s={serverBaseUrl:r,apiKey:n};return{runtime:"server",client:new Gs(s),projectId:o,serverBaseUrl:r}}var ST={},rT="1.3.3";console.log=(...t)=>{y.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var iy=!1,ay=(()=>{if(typeof __dirname<"u")return __dirname;try{return(0,nt.dirname)((0,sy.fileURLToPath)(ST.url))}catch{return iy=!0,process.cwd()}})(),Nu=T_()??(0,nt.resolve)(ay,"worker-service.cjs");function nT(){iy&&((0,Ks.existsSync)(Nu)||y.error("SYSTEM","mcp-server: dirname resolution failed (both __dirname and import.meta.url are unavailable). Fell back to process.cwd() and the resolved WORKER_SCRIPT_PATH does not exist. This is the actual problem \u2014 the worker bundle is fine, but mcp-server cannot locate it. Worker auto-start will fail until the dirname-resolution path is fixed.",{workerScriptPath:Nu,mcpServerDir:ay}))}var Q_={search:"/api/search",timeline:"/api/timeline"};async function Cu(t,e){y.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.json();return y.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),s}catch(o){return y.error("SYSTEM","\u2190 Worker API error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function oT(t,e){y.debug("SYSTEM","\u2192 Worker API text",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.text();return y.debug("SYSTEM","\u2190 Worker API text success",void 0,{endpoint:t}),{content:[{type:"text",text:s}]}}catch(o){return y.error("SYSTEM","\u2190 Worker API text error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function sT(t,e){let r=await Xn(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok){let o=await r.text();throw new Error(`Worker API error (${r.status}): ${o}`)}let n=await r.json();return y.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(n,null,2)}]}}async function sr(t,e){y.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{return await sT(t,e)}catch(r){return y.error("HTTP","Worker API error (POST)",{endpoint:t},r instanceof Error?r:new Error(String(r))),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function iT(){try{return(await Xn("/api/health")).ok}catch(t){return y.debug("SYSTEM","Worker health check failed",{},t instanceof Error?t:new Error(String(t))),!1}}function aT(){if(Mu()!=="server")return null;let e=X_();return e?{...e,available:!0}:{runtime:"server",available:!1,reason:"server runtime is selected but configuration is incomplete (missing url, api key, or project id)"}}function oo(t){return Y_(t)?{content:[{type:"text",text:`Server error (${t.kind}${t.status?` ${t.status}`:""}): ${t.message}`}],isError:!0}:{content:[{type:"text",text:`Tool error: ${t instanceof Error?t.message:String(t)}`}],isError:!0}}function so(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}function io(t){let e=aT();if(!e)throw new Je("transport",`${t} requires CLAUDE_MEM_RUNTIME=server. Current runtime is "worker"; use the existing search/timeline/get_observations tools for worker-mode memory access.`);if(!e.available)throw new Je("missing_api_key",`${t}: ${e.reason}`);return e}async function ey(t){try{let e=io("observation_add");if(typeof t?.content!="string"||t.content.trim().length===0)throw new Error('observation_add: "content" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,content:t.content,...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.kind!==void 0?{kind:t.kind}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}},o=await e.client.addObservation(n);return so(o)}catch(e){return oo(e)}}function Bs(t){return typeof t=="string"?Vs(t):null}async function cT(t){try{let e=io("observation_record_event");if(typeof t?.eventType!="string"||t.eventType.trim().length===0)throw new Error('observation_record_event: "eventType" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,sourceType:t.sourceType??"api",eventType:t.eventType,occurredAtEpoch:typeof t.occurredAtEpoch=="number"?t.occurredAtEpoch:Date.now(),...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.memorySessionId!==void 0?{memorySessionId:t.memorySessionId}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.payload!==void 0?{payload:t.payload}:{},...t.generate!==void 0?{generate:t.generate}:{}},o=await e.client.recordEvent(n);return so(o)}catch(e){return oo(e)}}async function ty(t){try{let e=io("observation_search");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_search: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.searchObservations(n);return so(o)}catch(e){return oo(e)}}async function ry(t){try{let e=io("observation_context");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_context: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.contextObservations(n);return so(o)}catch(e){return oo(e)}}function uT(t){return Array.isArray(t.projects)?t.projects.map(e=>typeof e=="string"?e.trim():"").filter(Boolean):typeof t.projects=="string"?t.projects.split(",").map(e=>e.trim()).filter(Boolean):typeof t.project=="string"&&t.project.trim().length>0?[t.project.trim()]:[]}async function lT(t){let e=uT(t);return e.length===0?{content:[{type:"text",text:'session_start_context: "project" or "projects" is required'}],isError:!0}:oT("/api/context/inject",{projects:e.join(","),...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.full!==void 0?{full:t.full}:{},...t.colors!==void 0?{colors:t.colors}:{}})}async function dT(t){try{let e=io("observation_generation_status"),r=(t?.jobId??t?.job_id??"").trim();if(!r)throw new Error('observation_generation_status: "jobId" is required');let n=await e.client.getJobStatus(r);return so(n)}catch(e){return oo(e)}}async function pT(){if(await iT())return!0;y.warn("SYSTEM","Worker not available, attempting auto-start for MCP client"),nT();try{let t=xu(),e=await R_(t,Nu);return e==="dead"&&y.error("SYSTEM","Worker auto-start failed \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running. Check earlier log lines for the specific failure reason (Bun not found, missing worker bundle, port conflict, etc.)."),e!=="dead"}catch(t){return y.error("SYSTEM","Worker auto-start threw \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running.",void 0,t instanceof Error?t:new Error(String(t))),!1}}var cy=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW):
224
224
  1. search(query) \u2192 Get index with IDs (~50-100 tokens/result)
225
225
  2. timeline(anchor=ID) \u2192 Get context around interesting results
226
226
  3. get_observations([IDs]) \u2192 Fetch full details ONLY for filtered IDs