keepmind 1.3.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
- var Uu=Object.create;var $n=Object.defineProperty;var Fu=Object.getOwnPropertyDescriptor;var Wu=Object.getOwnPropertyNames;var ju=Object.getPrototypeOf,Gu=Object.prototype.hasOwnProperty;var S=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var Ci=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}},he=(t,e)=>{for(var r in e)$n(t,r,{get:e[r],enumerable:!0})},Bu=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Wu(e))!Gu.call(t,s)&&s!==r&&$n(t,s,{get:()=>e[s],enumerable:!(n=Fu(e,s))||n.enumerable});return t};var je=(t,e,r)=>(r=t!=null?Uu(ju(t)):{},Bu(e||!t||!t.__esModule?$n(r,"default",{value:t,enumerable:!0}):r,t));var rt=Ci((zE,es)=>{var Gr=process||{},wi=Gr.argv||[],jr=Gr.env||{},Hu=!(jr.NO_COLOR||wi.includes("--no-color"))&&(!!jr.FORCE_COLOR||wi.includes("--color")||Gr.platform==="win32"||(Gr.stdout||{}).isTTY&&jr.TERM!=="dumb"||!!jr.CI),Ju=(t,e,r=t)=>n=>{let s=""+n,o=s.indexOf(e,t.length);return~o?t+Ku(s,e,r,o)+e:t+s+e},Ku=(t,e,r,n)=>{let s="",o=0;do s+=t.substring(o,n)+r,o=n+e.length,n=t.indexOf(e,o);while(~n);return s+t.substring(o)},Ii=(t=Hu)=>{let e=t?Ju:()=>String;return{isColorSupported:t,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};es.exports=Ii();es.exports.createColors=Ii});import{existsSync as Vu,readFileSync as Xu}from"fs";function z(t,e){if(!Vu(t))return e;try{return JSON.parse(Xu(t,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${t}: ${r instanceof Error?r.message:String(r)}`)}}var Qt=S(()=>{"use strict"});import{closeSync as ts,existsSync as $t,fsyncSync as Oi,lstatSync as Yu,mkdirSync as qu,openSync as rs,readFileSync as ki,readlinkSync as zu,realpathSync as Zu,renameSync as Qu,statSync as $u,unlinkSync as ed,writeSync as td}from"fs";import{homedir as rd}from"os";import{basename as nd,dirname as Br,join as Ee,resolve as sd}from"path";import{fileURLToPath as od}from"url";import{randomBytes as id}from"crypto";function ns(){return process.env.CLAUDE_CONFIG_DIR||Ee(rd(),".claude")}function ee(){return Ee(ns(),"plugins","marketplaces","keepmind")}function Se(){return Ee(ns(),"plugins")}function xe(){return Ee(Se(),"known_marketplaces.json")}function Le(){return Ee(Se(),"installed_plugins.json")}function Ce(){return Ee(ns(),"settings.json")}function nt(t){return Ee(Se(),"cache","keepmind","keepmind",t)}function Hr(){let t=od(import.meta.url),e=Ee(Br(t),"..","..");if(!$t(Ee(e,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${e}. Bundle structure may have changed \u2014 update the path walk.`);return e}function ss(){return Ee(Hr(),"plugin")}function xt(){let t=Ee(ss(),".claude-plugin","plugin.json");if($t(t))try{let r=JSON.parse(ki(t,"utf-8"));if(r.version)return r.version}catch{}let e=Ee(Hr(),"package.json");if($t(e))try{let r=JSON.parse(ki(e,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function Lt(){let t=ee();return $t(Ee(t,"plugin",".claude-plugin","plugin.json"))}function er(t){$t(t)||qu(t,{recursive:!0})}function se(t,e){let r=t;try{if(Yu(t).isSymbolicLink())try{r=Zu(t)}catch{let c=zu(t);r=sd(Br(t),c)}}catch(c){let u=c.code;if(u!=="ENOENT"&&u!=="ENOTDIR")throw c}er(Br(r));let n=Br(r),s=nd(r),o=Ee(n,`.${s}.${process.pid}.${id(6).toString("hex")}.tmp`),i=Buffer.from(JSON.stringify(e,null,2)+`
3
- `,"utf-8"),a;try{a=$u(r).mode&511}catch{}let l;try{l=a!==void 0?rs(o,"w",a):rs(o,"w");let c=0;for(;c<i.length;){let u=td(l,i,c,i.length-c);if(u===0)throw new Error(`writeSync stalled at ${c}/${i.length} bytes`);c+=u}if(Oi(l),ts(l),l=void 0,Qu(o,r),!j){let u;try{u=rs(n,"r"),Oi(u)}catch{}finally{if(u!==void 0)try{ts(u)}catch{}}}}catch(c){if(l!==void 0)try{ts(l)}catch{}try{ed(o)}catch{}throw c}}var j,Ae=S(()=>{"use strict";Qt();j=process.platform==="win32"});var _i,Ai,Ni,Mi=S(()=>{_i=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return e=>{let r=0;for(t.lastIndex=0;t.test(e);)r+=1;return e.length-r}})(),Ai=t=>t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510,Ni=t=>t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141});var ad,ld,xi,cd,Li,ud,dd,pd,Di,Pi,Ui=S(()=>{Mi();ad=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,ld=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,xi=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,cd=/\t{1,1000}/y,Li=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),ud=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,dd=new RegExp("\\p{M}+","gu"),pd={limit:1/0,ellipsis:""},Di=(t,e={},r={})=>{let n=e.limit??1/0,s=e.ellipsis??"",o=e?.ellipsisWidth??(s?Di(s,pd,r).width:0),i=0,a=r.controlWidth??0,l=r.tabWidth??8,c=r.emojiWidth??2,u=2,m=r.regularWidth??1,f=r.wideWidth??u,E=[[ud,m],[ad,i],[ld,a],[cd,l],[Li,c],[xi,f]],h=0,b=0,y=t.length,R=0,A=!1,D=y,C=Math.max(0,n-o),T=0,v=0,I=0,Y=0;e:for(;;){if(v>T||b>=y&&b>h){let Z=t.slice(T,v)||t.slice(h,b);R=0;for(let ve of Z.replaceAll(dd,"")){let Q=ve.codePointAt(0)||0;if(Ai(Q)?Y=u:Ni(Q)?Y=f:Y=m,I+Y>C&&(D=Math.min(D,Math.max(T,h)+R)),I+Y>n){A=!0;break e}R+=ve.length,I+=Y}T=v=0}if(b>=y)break e;for(let Z=0,ve=E.length;Z<ve;Z++){let[Q,Mt]=E[Z];if(Q.lastIndex=b,Q.test(t)){if(R=Q===xi?_i(t.slice(b,Q.lastIndex)):Q===Li?1:Q.lastIndex-b,Y=R*Mt,I+Y>C&&(D=Math.min(D,b+Math.floor((C-I)/Mt))),I+Y>n){A=!0;break e}I+=Y,T=h,v=b,b=h=Q.lastIndex;continue e}}b+=1}return{width:A?C:I,index:A?D:y,truncated:A,ellipsed:A&&n>=o}},Pi=Di});var md,fd,pe,os=S(()=>{Ui();md={limit:1/0,ellipsis:"",ellipsisWidth:0},fd=(t,e={})=>Pi(t,md,e).width,pe=fd});function De(t,e,r){return String(t).normalize().split(bd).map(n=>Sd(n,e,r)).join(`
2
+ var Uu=Object.create;var $n=Object.defineProperty;var Fu=Object.getOwnPropertyDescriptor;var Wu=Object.getOwnPropertyNames;var ju=Object.getPrototypeOf,Gu=Object.prototype.hasOwnProperty;var S=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var Ri=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}},he=(t,e)=>{for(var r in e)$n(t,r,{get:e[r],enumerable:!0})},Bu=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Wu(e))!Gu.call(t,s)&&s!==r&&$n(t,s,{get:()=>e[s],enumerable:!(n=Fu(e,s))||n.enumerable});return t};var je=(t,e,r)=>(r=t!=null?Uu(ju(t)):{},Bu(e||!t||!t.__esModule?$n(r,"default",{value:t,enumerable:!0}):r,t));var rt=Ri((zE,es)=>{var Gr=process||{},wi=Gr.argv||[],jr=Gr.env||{},Hu=!(jr.NO_COLOR||wi.includes("--no-color"))&&(!!jr.FORCE_COLOR||wi.includes("--color")||Gr.platform==="win32"||(Gr.stdout||{}).isTTY&&jr.TERM!=="dumb"||!!jr.CI),Ju=(t,e,r=t)=>n=>{let s=""+n,o=s.indexOf(e,t.length);return~o?t+Ku(s,e,r,o)+e:t+s+e},Ku=(t,e,r,n)=>{let s="",o=0;do s+=t.substring(o,n)+r,o=n+e.length,n=t.indexOf(e,o);while(~n);return s+t.substring(o)},Ii=(t=Hu)=>{let e=t?Ju:()=>String;return{isColorSupported:t,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};es.exports=Ii();es.exports.createColors=Ii});import{existsSync as Vu,readFileSync as Xu}from"fs";function z(t,e){if(!Vu(t))return e;try{return JSON.parse(Xu(t,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${t}: ${r instanceof Error?r.message:String(r)}`)}}var Qt=S(()=>{"use strict"});import{closeSync as ts,existsSync as $t,fsyncSync as Oi,lstatSync as Yu,mkdirSync as qu,openSync as rs,readFileSync as ki,readlinkSync as zu,realpathSync as Zu,renameSync as Qu,statSync as $u,unlinkSync as ed,writeSync as td}from"fs";import{homedir as rd}from"os";import{basename as nd,dirname as Br,join as Ee,resolve as sd}from"path";import{fileURLToPath as od}from"url";import{randomBytes as id}from"crypto";function ns(){return process.env.CLAUDE_CONFIG_DIR||Ee(rd(),".claude")}function ee(){return Ee(ns(),"plugins","marketplaces","keepmind")}function Se(){return Ee(ns(),"plugins")}function xe(){return Ee(Se(),"known_marketplaces.json")}function Le(){return Ee(Se(),"installed_plugins.json")}function Re(){return Ee(ns(),"settings.json")}function nt(t){return Ee(Se(),"cache","keepmind","keepmind",t)}function Hr(){let t=od(import.meta.url),e=Ee(Br(t),"..","..");if(!$t(Ee(e,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${e}. Bundle structure may have changed \u2014 update the path walk.`);return e}function ss(){return Ee(Hr(),"plugin")}function xt(){let t=Ee(ss(),".claude-plugin","plugin.json");if($t(t))try{let r=JSON.parse(ki(t,"utf-8"));if(r.version)return r.version}catch{}let e=Ee(Hr(),"package.json");if($t(e))try{let r=JSON.parse(ki(e,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function Lt(){let t=ee();return $t(Ee(t,"plugin",".claude-plugin","plugin.json"))}function er(t){$t(t)||qu(t,{recursive:!0})}function se(t,e){let r=t;try{if(Yu(t).isSymbolicLink())try{r=Zu(t)}catch{let c=zu(t);r=sd(Br(t),c)}}catch(c){let u=c.code;if(u!=="ENOENT"&&u!=="ENOTDIR")throw c}er(Br(r));let n=Br(r),s=nd(r),o=Ee(n,`.${s}.${process.pid}.${id(6).toString("hex")}.tmp`),i=Buffer.from(JSON.stringify(e,null,2)+`
3
+ `,"utf-8"),a;try{a=$u(r).mode&511}catch{}let l;try{l=a!==void 0?rs(o,"w",a):rs(o,"w");let c=0;for(;c<i.length;){let u=td(l,i,c,i.length-c);if(u===0)throw new Error(`writeSync stalled at ${c}/${i.length} bytes`);c+=u}if(Oi(l),ts(l),l=void 0,Qu(o,r),!j){let u;try{u=rs(n,"r"),Oi(u)}catch{}finally{if(u!==void 0)try{ts(u)}catch{}}}}catch(c){if(l!==void 0)try{ts(l)}catch{}try{ed(o)}catch{}throw c}}var j,Ae=S(()=>{"use strict";Qt();j=process.platform==="win32"});var _i,Ai,Ni,Mi=S(()=>{_i=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return e=>{let r=0;for(t.lastIndex=0;t.test(e);)r+=1;return e.length-r}})(),Ai=t=>t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510,Ni=t=>t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141});var ad,ld,xi,cd,Li,ud,dd,pd,Di,Pi,Ui=S(()=>{Mi();ad=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,ld=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,xi=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,cd=/\t{1,1000}/y,Li=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),ud=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,dd=new RegExp("\\p{M}+","gu"),pd={limit:1/0,ellipsis:""},Di=(t,e={},r={})=>{let n=e.limit??1/0,s=e.ellipsis??"",o=e?.ellipsisWidth??(s?Di(s,pd,r).width:0),i=0,a=r.controlWidth??0,l=r.tabWidth??8,c=r.emojiWidth??2,u=2,m=r.regularWidth??1,f=r.wideWidth??u,E=[[ud,m],[ad,i],[ld,a],[cd,l],[Li,c],[xi,f]],h=0,b=0,y=t.length,C=0,A=!1,D=y,R=Math.max(0,n-o),T=0,v=0,I=0,Y=0;e:for(;;){if(v>T||b>=y&&b>h){let Z=t.slice(T,v)||t.slice(h,b);C=0;for(let ve of Z.replaceAll(dd,"")){let Q=ve.codePointAt(0)||0;if(Ai(Q)?Y=u:Ni(Q)?Y=f:Y=m,I+Y>R&&(D=Math.min(D,Math.max(T,h)+C)),I+Y>n){A=!0;break e}C+=ve.length,I+=Y}T=v=0}if(b>=y)break e;for(let Z=0,ve=E.length;Z<ve;Z++){let[Q,Mt]=E[Z];if(Q.lastIndex=b,Q.test(t)){if(C=Q===xi?_i(t.slice(b,Q.lastIndex)):Q===Li?1:Q.lastIndex-b,Y=C*Mt,I+Y>R&&(D=Math.min(D,b+Math.floor((R-I)/Mt))),I+Y>n){A=!0;break e}I+=Y,T=h,v=b,b=h=Q.lastIndex;continue e}}b+=1}return{width:A?R:I,index:A?D:y,truncated:A,ellipsed:A&&n>=o}},Pi=Di});var md,fd,pe,os=S(()=>{Ui();md={limit:1/0,ellipsis:"",ellipsisWidth:0},fd=(t,e={})=>Pi(t,md,e).width,pe=fd});function De(t,e,r){return String(t).normalize().split(bd).map(n=>Sd(n,e,r)).join(`
4
4
  `)}var Jr,Bi,gd,as,Hi,hd,Ji,ls,Fi,Wi,ji,Gi,is,Ed,Sd,bd,cs=S(()=>{os();Jr="\x1B",Bi="\x9B",gd=39,as="\x07",Hi="[",hd="]",Ji="m",ls=`${hd}8;;`,Fi=new RegExp(`(?:\\${Hi}(?<code>\\d+)m|\\${ls}(?<uri>.*)${as})`,"y"),Wi=t=>{if(t>=30&&t<=37||t>=90&&t<=97)return 39;if(t>=40&&t<=47||t>=100&&t<=107)return 49;if(t===1||t===2)return 22;if(t===3)return 23;if(t===4)return 24;if(t===7)return 27;if(t===8)return 28;if(t===9)return 29;if(t===0)return 0},ji=t=>`${Jr}${Hi}${t}${Ji}`,Gi=t=>`${Jr}${ls}${t}${as}`,is=(t,e,r)=>{let n=e[Symbol.iterator](),s=!1,o=!1,i=t.at(-1),a=i===void 0?0:pe(i),l=n.next(),c=n.next(),u=0;for(;!l.done;){let m=l.value,f=pe(m);a+f<=r?t[t.length-1]+=m:(t.push(m),a=0),(m===Jr||m===Bi)&&(s=!0,o=e.startsWith(ls,u+1)),s?o?m===as&&(s=!1,o=!1):m===Ji&&(s=!1):(a+=f,a===r&&!c.done&&(t.push(""),a=0)),l=c,c=n.next(),u+=m.length}i=t.at(-1),!a&&i!==void 0&&i.length&&t.length>1&&(t[t.length-2]+=t.pop())},Ed=t=>{let e=t.split(" "),r=e.length;for(;r&&!pe(e[r-1]);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},Sd=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let n="",s,o,i=t.split(" "),a=[""],l=0;for(let m=0;m<i.length;m++){let f=i[m];if(r.trim!==!1){let h=a.at(-1)??"",b=h.trimStart();h.length!==b.length&&(a[a.length-1]=b,l=pe(b))}m!==0&&(l>=e&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),l=0),(l||r.trim===!1)&&(a[a.length-1]+=" ",l++));let E=pe(f);if(r.hard&&E>e){let h=e-l,b=1+Math.floor((E-h-1)/e);Math.floor((E-1)/e)<b&&a.push(""),is(a,f,e),l=pe(a.at(-1)??"");continue}if(l+E>e&&l&&E){if(r.wordWrap===!1&&l<e){is(a,f,e),l=pe(a.at(-1)??"");continue}a.push(""),l=0}if(l+E>e&&r.wordWrap===!1){is(a,f,e),l=pe(a.at(-1)??"");continue}a[a.length-1]+=f,l+=E}r.trim!==!1&&(a=a.map(m=>Ed(m)));let c=a.join(`
5
5
  `),u=!1;for(let m=0;m<c.length;m++){let f=c[m];if(n+=f,u)u=!1;else if(u=f>="\uD800"&&f<="\uDBFF",u)continue;if(f===Jr||f===Bi){Fi.lastIndex=m+1;let h=Fi.exec(c)?.groups;if(h?.code!==void 0){let b=Number.parseFloat(h.code);s=b===gd?void 0:b}else h?.uri!==void 0&&(o=h.uri.length===0?void 0:h.uri)}if(c[m+1]===`
6
6
  `){o&&(n+=Gi(""));let E=s?Wi(s):void 0;s&&E&&(n+=ji(E))}else f===`
7
- `&&(s&&Wi(s)&&(n+=ji(s)),o&&(n+=Gi(o)))}return n},bd=/\r?\n/});var ds=Ci((mS,Ki)=>{"use strict";var us={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},yd={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Td={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?us.up():"");return t&&(e+=us.left),e}};Ki.exports={cursor:us,scroll:yd,erase:Td,beep:"\x07"}});import{styleText as ps}from"node:util";import{stdout as fs,stdin as Xi}from"node:process";import*as st from"node:readline";import vd from"node:readline";import{ReadStream as Vi}from"node:tty";function St(t,e,r){if(!r.some(i=>!i.disabled))return t;let n=t+e,s=Math.max(r.length-1,0),o=n<0?s:n>s?0:n;return r[o].disabled?St(o,e<0?-1:1,r):o}function gs(t,e){if(typeof t=="string")return te.aliases.get(t)===e;for(let r of t)if(r!==void 0&&gs(r,e))return!0;return!1}function wd(t,e){if(t===e)return;let r=t.split(`
7
+ `&&(s&&Wi(s)&&(n+=ji(s)),o&&(n+=Gi(o)))}return n},bd=/\r?\n/});var ds=Ri((mS,Ki)=>{"use strict";var us={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},yd={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Td={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?us.up():"");return t&&(e+=us.left),e}};Ki.exports={cursor:us,scroll:yd,erase:Td,beep:"\x07"}});import{styleText as ps}from"node:util";import{stdout as fs,stdin as Xi}from"node:process";import*as st from"node:readline";import vd from"node:readline";import{ReadStream as Vi}from"node:tty";function St(t,e,r){if(!r.some(i=>!i.disabled))return t;let n=t+e,s=Math.max(r.length-1,0),o=n<0?s:n>s?0:n;return r[o].disabled?St(o,e<0?-1:1,r):o}function gs(t,e){if(typeof t=="string")return te.aliases.get(t)===e;for(let r of t)if(r!==void 0&&gs(r,e))return!0;return!1}function wd(t,e){if(t===e)return;let r=t.split(`
8
8
  `),n=e.split(`
9
9
  `),s=Math.max(r.length,n.length),o=[];for(let i=0;i<s;i++)r[i]!==n[i]&&o.push(i);return{lines:o,numLinesBefore:r.length,numLinesAfter:n.length,numLines:s}}function X(t){return t===ms}function Kr(t,e){let r=t;r.isTTY&&r.setRawMode(e)}function Yi({input:t=Xi,output:e=fs,overwrite:r=!0,hideCursor:n=!0}={}){let s=st.createInterface({input:t,output:e,prompt:"",tabSize:1});st.emitKeypressEvents(t,s),t instanceof Vi&&t.isTTY&&t.setRawMode(!0);let o=(i,{name:a,sequence:l})=>{let c=String(i);if(gs([c,a,l],"cancel")){n&&e.write(le.cursor.show),process.exit(0);return}if(!r)return;st.moveCursor(e,a==="return"?0:-1,a==="return"?-1:0,()=>{st.clearLine(e,1,()=>{t.once("keypress",o)})})};return n&&e.write(le.cursor.hide),t.once("keypress",o),()=>{t.off("keypress",o),n&&e.write(le.cursor.show),t instanceof Vi&&t.isTTY&&!Id&&t.setRawMode(!1),s.terminal=!1,s.close()}}function ot(t,e,r,n=r,s=r,o){let i=tr(t??fs);return De(e,i-r.length,{hard:!0,trim:!1}).split(`
10
10
  `).map((a,l,c)=>{let u=o?o(a,l):a;return l===0?`${n}${u}`:l===c.length-1?`${s}${u}`:`${r}${u}`}).join(`
11
- `)}function qi(t,e){if("~standard"in t){let r=t["~standard"].validate(e);if(r instanceof Promise)throw new TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return r.issues?.at(0)?.message}return t(e)}var le,Rd,Cd,te,Id,ms,tr,hs,bt,Vr,zi,Xr,Yr,qr,Es=S(()=>{cs();le=je(ds(),1);Rd=["up","down","left","right","space","enter","cancel"],Cd=["January","February","March","April","May","June","July","August","September","October","November","December"],te={actions:new Set(Rd),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...Cd],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:t=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:t=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};Id=globalThis.process.platform.startsWith("win"),ms=Symbol("clack:cancel");tr=t=>"columns"in t&&typeof t.columns=="number"?t.columns:80,hs=t=>"rows"in t&&typeof t.rows=="number"?t.rows:20;bt=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,r=!0){let{input:n=Xi,output:s=fs,render:o,signal:i,...a}=e;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=o.bind(this),this._track=r,this._abortSignal=i,this.input=n,this.output=s}unsubscribe(){this._subscribers.clear()}setSubscriber(e,r){let n=this._subscribers.get(e)??[];n.push(r),this._subscribers.set(e,n)}on(e,r){this.setSubscriber(e,{cb:r})}once(e,r){this.setSubscriber(e,{cb:r,once:!0})}emit(e,...r){let n=this._subscribers.get(e)??[],s=[];for(let o of n)o.cb(...r),o.once&&s.push(()=>n.splice(n.indexOf(o),1));for(let o of s)o()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(ms);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=vd.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),Kr(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(le.cursor.show),this.output.off("resize",this.render),Kr(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(le.cursor.show),this.output.off("resize",this.render),Kr(this.input,!1),e(ms)})})}_isActionKey(e,r){return e===" "}_shouldSubmit(e,r){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,r){this.userInput=e??"",this.emit("userInput",this.userInput),r&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,r){if(this._track&&r.name!=="return"&&(r.name&&this._isActionKey(e,r)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&te.aliases.has(r.name)&&this.emit("cursor",te.aliases.get(r.name)),te.actions.has(r.name)&&this.emit("cursor",r.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e,r),r?.name==="return"&&this._shouldSubmit(e,r)){if(this.opts.validate){let n=qi(this.opts.validate,this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}gs([e,r?.name,r?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
11
+ `)}function qi(t,e){if("~standard"in t){let r=t["~standard"].validate(e);if(r instanceof Promise)throw new TypeError("Schema validation must be synchronous. Update `validate()` and remove any asynchronous logic.");return r.issues?.at(0)?.message}return t(e)}var le,Cd,Rd,te,Id,ms,tr,hs,bt,Vr,zi,Xr,Yr,qr,Es=S(()=>{cs();le=je(ds(),1);Cd=["up","down","left","right","space","enter","cancel"],Rd=["January","February","March","April","May","June","July","August","September","October","November","December"],te={actions:new Set(Cd),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0,date:{monthNames:[...Rd],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(t,e)=>`There are only ${t} days in ${e}`,afterMin:t=>`Date must be on or after ${t.toISOString().slice(0,10)}`,beforeMax:t=>`Date must be on or before ${t.toISOString().slice(0,10)}`}}};Id=globalThis.process.platform.startsWith("win"),ms=Symbol("clack:cancel");tr=t=>"columns"in t&&typeof t.columns=="number"?t.columns:80,hs=t=>"rows"in t&&typeof t.rows=="number"?t.rows:20;bt=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,r=!0){let{input:n=Xi,output:s=fs,render:o,signal:i,...a}=e;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=o.bind(this),this._track=r,this._abortSignal=i,this.input=n,this.output=s}unsubscribe(){this._subscribers.clear()}setSubscriber(e,r){let n=this._subscribers.get(e)??[];n.push(r),this._subscribers.set(e,n)}on(e,r){this.setSubscriber(e,{cb:r})}once(e,r){this.setSubscriber(e,{cb:r,once:!0})}emit(e,...r){let n=this._subscribers.get(e)??[],s=[];for(let o of n)o.cb(...r),o.once&&s.push(()=>n.splice(n.indexOf(o),1));for(let o of s)o()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(ms);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=vd.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),Kr(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(le.cursor.show),this.output.off("resize",this.render),Kr(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(le.cursor.show),this.output.off("resize",this.render),Kr(this.input,!1),e(ms)})})}_isActionKey(e,r){return e===" "}_shouldSubmit(e,r){return!0}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,r){this.userInput=e??"",this.emit("userInput",this.userInput),r&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(e,r){if(this._track&&r.name!=="return"&&(r.name&&this._isActionKey(e,r)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&te.aliases.has(r.name)&&this.emit("cursor",te.aliases.get(r.name)),te.actions.has(r.name)&&this.emit("cursor",r.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e,r),r?.name==="return"&&this._shouldSubmit(e,r)){if(this.opts.validate){let n=qi(this.opts.validate,this.value);n&&(this.error=n instanceof Error?n.message:n,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}gs([e,r?.name,r?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
12
12
  `),Kr(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=De(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
13
13
  `).length-1;this.output.write(le.cursor.move(-999,e*-1))}render(){let e=De(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(le.cursor.hide);else{let r=wd(this._prevFrame,e),n=hs(this.output);if(this.restoreCursor(),r){let s=Math.max(0,r.numLinesAfter-n),o=Math.max(0,r.numLinesBefore-n),i=r.lines.find(a=>a>=s);if(i===void 0){this._prevFrame=e;return}if(r.lines.length===1){this.output.write(le.cursor.move(0,i-o)),this.output.write(le.erase.lines(1));let a=e.split(`
14
14
  `);this.output.write(a[i]),this._prevFrame=e,this.output.write(le.cursor.move(0,a.length-i-1));return}else if(r.lines.length>1){if(s<o)i=s;else{let l=i-o;l>0&&this.output.write(le.cursor.move(0,l))}this.output.write(le.erase.down());let a=e.split(`
15
15
  `).slice(i);this.output.write(a.join(`
16
- `)),this._prevFrame=e;return}}this.output.write(le.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}},Vr=class extends bt{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(le.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},zi=class extends bt{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,r=this.value!==void 0&&this.value.length===e.length;this.value=r?[]:e.map(n=>n.value)}toggleInvert(){let e=this.value;if(!e)return;let r=this._enabledOptions.filter(n=>!e.includes(n.value));this.value=r.map(n=>n.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(r=>r!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let r=Math.max(this.options.findIndex(({value:n})=>n===e.cursorAt),0);this.cursor=this.options[r].disabled?St(r,1,this.options):r,this.on("key",(n,s)=>{s.name==="a"&&this.toggleAll(),s.name==="i"&&this.toggleInvert()}),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=St(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=St(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Xr=class extends bt{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let e=this.userInput;if(this.cursor>=e.length)return`${this.masked}${ps(["inverse","hidden"],"_")}`;let r=this.masked,n=r.slice(0,this.cursor),s=r.slice(this.cursor);return`${n}${ps("inverse",s[0])}${s.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:e,...r}){super(r),this._mask=e??"\u2022",this.on("userInput",n=>{this._setValue(n)}),this.on("finalize",()=>{this.value===void 0&&(this.value="")})}},Yr=class extends bt{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(e){super(e,!1),this.options=e.options;let r=this.options.findIndex(({value:s})=>s===e.initialValue),n=r===-1?0:r;this.cursor=this.options[n].disabled?St(n,1,this.options):n,this.changeValue(),this.on("cursor",s=>{switch(s){case"left":case"up":this.cursor=St(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=St(this.cursor,1,this.options);break}this.changeValue()})}},qr=class extends bt{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}\u2588`;let r=e.slice(0,this.cursor),[n,...s]=e.slice(this.cursor);return`${r}${ps("inverse",n)}${s.join("")}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}});import{styleText as p,stripVTControlCharacters as _S}from"node:util";import we from"node:process";function Od(){return we.platform!=="win32"?we.env.TERM!=="linux":!!we.env.CI||!!we.env.WT_SESSION||!!we.env.TERMINUS_SUBLIME||we.env.ConEmuTask==="{cmd::Cmder}"||we.env.TERM_PROGRAM==="Terminus-Sublime"||we.env.TERM_PROGRAM==="vscode"||we.env.TERM==="xterm-256color"||we.env.TERM==="alacritty"||we.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function sa(t,e){let r=[`${e?`${p("cyan",O)} `:""}${t.join(" \u2022 ")}`];return e&&r.push(p("cyan",Ge)),r}var nr,Ss,kd,W,_d,ta,ra,Qr,Ad,O,Ge,xS,LS,bs,Zr,Nd,Zi,Qi,Md,$i,xd,Ld,Dd,Pd,DS,Ud,Fd,Wd,jd,sr,na,ea,ys,yt,Gd,rr,oa,H,Ie,or,Be,Bd,Hd,Dt,$r,Jd,Tt,PS,Kd,zr,it,US,en,Ts,vs=S(()=>{Es();Es();cs();os();nr=je(ds(),1);Ss=Od(),kd=()=>process.env.CI==="true",W=(t,e)=>Ss?t:e,_d=W("\u25C6","*"),ta=W("\u25A0","x"),ra=W("\u25B2","x"),Qr=W("\u25C7","o"),Ad=W("\u250C","T"),O=W("\u2502","|"),Ge=W("\u2514","\u2014"),xS=W("\u2510","T"),LS=W("\u2518","\u2014"),bs=W("\u25CF",">"),Zr=W("\u25CB"," "),Nd=W("\u25FB","[\u2022]"),Zi=W("\u25FC","[+]"),Qi=W("\u25FB","[ ]"),Md=W("\u25AA","\u2022"),$i=W("\u2500","-"),xd=W("\u256E","+"),Ld=W("\u251C","+"),Dd=W("\u256F","+"),Pd=W("\u2570","+"),DS=W("\u256D","+"),Ud=W("\u25CF","\u2022"),Fd=W("\u25C6","*"),Wd=W("\u25B2","!"),jd=W("\u25A0","x"),sr=t=>{switch(t){case"initial":case"active":return p("cyan",_d);case"cancel":return p("red",ta);case"error":return p("yellow",ra);case"submit":return p("green",Qr)}},na=t=>{switch(t){case"initial":case"active":return p("cyan",O);case"cancel":return p("red",O);case"error":return p("yellow",O);case"submit":return p("green",O)}};ea=(t,e,r,n,s,o=!1)=>{let i=e,a=0;if(o)for(let l=n-1;l>=r&&(i-=t[l].length,a++,!(i<=s));l--);else for(let l=r;l<n&&(i-=t[l].length,a++,!(i<=s));l++);return{lineCount:i,removals:a}},ys=({cursor:t,options:e,style:r,output:n=process.stdout,maxItems:s=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:i=4})=>{let a=tr(n)-o,l=hs(n),c=p("dim","..."),u=Math.max(l-i,0),m=Math.max(Math.min(s,u),5),f=0;t>=m-3&&(f=Math.max(Math.min(t-m+3,e.length-m),0));let E=m<e.length&&f>0,h=m<e.length&&f+m<e.length,b=Math.min(f+m,e.length),y=[],R=0;E&&R++,h&&R++;let A=f+(E?1:0),D=b-(h?1:0);for(let T=A;T<D;T++){let v=De(r(e[T],T===t),a,{hard:!0,trim:!1}).split(`
17
- `);y.push(v),R+=v.length}if(R>u){let T=0,v=0,I=R,Y=t-A,Z=u,ve=()=>ea(y,I,0,Y,Z),Q=()=>ea(y,I,Y+1,y.length,Z,!0);E?({lineCount:I,removals:T}=ve(),I>Z&&(h||(Z-=1),{lineCount:I,removals:v}=Q())):(h||(Z-=1),{lineCount:I,removals:v}=Q(),I>Z&&(Z-=1,{lineCount:I,removals:T}=ve())),T>0&&(E=!0,y.splice(0,T)),v>0&&(h=!0,y.splice(y.length-v,v))}let C=[];E&&C.push(c);for(let T of y)for(let v of T)C.push(v);return h&&C.push(c),C},yt=t=>{let e=t.active??"Yes",r=t.inactive??"No";return new Vr({active:e,inactive:r,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let n=t.withGuide??te.withGuide,s=`${sr(this.state)} `,o=n?`${p("gray",O)} `:"",i=ot(t.output,t.message,o,s),a=`${n?`${p("gray",O)}
16
+ `)),this._prevFrame=e;return}}this.output.write(le.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}},Vr=class extends bt{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(le.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},zi=class extends bt{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(e=>e.disabled!==!0)}toggleAll(){let e=this._enabledOptions,r=this.value!==void 0&&this.value.length===e.length;this.value=r?[]:e.map(n=>n.value)}toggleInvert(){let e=this.value;if(!e)return;let r=this._enabledOptions.filter(n=>!e.includes(n.value));this.value=r.map(n=>n.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(r=>r!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let r=Math.max(this.options.findIndex(({value:n})=>n===e.cursorAt),0);this.cursor=this.options[r].disabled?St(r,1,this.options):r,this.on("key",(n,s)=>{s.name==="a"&&this.toggleAll(),s.name==="i"&&this.toggleInvert()}),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=St(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=St(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Xr=class extends bt{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let e=this.userInput;if(this.cursor>=e.length)return`${this.masked}${ps(["inverse","hidden"],"_")}`;let r=this.masked,n=r.slice(0,this.cursor),s=r.slice(this.cursor);return`${n}${ps("inverse",s[0])}${s.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:e,...r}){super(r),this._mask=e??"\u2022",this.on("userInput",n=>{this._setValue(n)}),this.on("finalize",()=>{this.value===void 0&&(this.value="")})}},Yr=class extends bt{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(e){super(e,!1),this.options=e.options;let r=this.options.findIndex(({value:s})=>s===e.initialValue),n=r===-1?0:r;this.cursor=this.options[n].disabled?St(n,1,this.options):n,this.changeValue(),this.on("cursor",s=>{switch(s){case"left":case"up":this.cursor=St(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=St(this.cursor,1,this.options);break}this.changeValue()})}},qr=class extends bt{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let e=this.userInput;if(this.cursor>=e.length)return`${this.userInput}\u2588`;let r=e.slice(0,this.cursor),[n,...s]=e.slice(this.cursor);return`${r}${ps("inverse",n)}${s.join("")}`}get cursor(){return this._cursor}constructor(e){super({...e,initialUserInput:e.initialUserInput??e.initialValue}),this.on("userInput",r=>{this._setValue(r)}),this.on("finalize",()=>{this.value||(this.value=e.defaultValue),this.value===void 0&&(this.value="")})}}});import{styleText as p,stripVTControlCharacters as _S}from"node:util";import we from"node:process";function Od(){return we.platform!=="win32"?we.env.TERM!=="linux":!!we.env.CI||!!we.env.WT_SESSION||!!we.env.TERMINUS_SUBLIME||we.env.ConEmuTask==="{cmd::Cmder}"||we.env.TERM_PROGRAM==="Terminus-Sublime"||we.env.TERM_PROGRAM==="vscode"||we.env.TERM==="xterm-256color"||we.env.TERM==="alacritty"||we.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function sa(t,e){let r=[`${e?`${p("cyan",O)} `:""}${t.join(" \u2022 ")}`];return e&&r.push(p("cyan",Ge)),r}var nr,Ss,kd,W,_d,ta,ra,Qr,Ad,O,Ge,xS,LS,bs,Zr,Nd,Zi,Qi,Md,$i,xd,Ld,Dd,Pd,DS,Ud,Fd,Wd,jd,sr,na,ea,ys,yt,Gd,rr,oa,H,Ie,or,Be,Bd,Hd,Dt,$r,Jd,Tt,PS,Kd,zr,it,US,en,Ts,vs=S(()=>{Es();Es();cs();os();nr=je(ds(),1);Ss=Od(),kd=()=>process.env.CI==="true",W=(t,e)=>Ss?t:e,_d=W("\u25C6","*"),ta=W("\u25A0","x"),ra=W("\u25B2","x"),Qr=W("\u25C7","o"),Ad=W("\u250C","T"),O=W("\u2502","|"),Ge=W("\u2514","\u2014"),xS=W("\u2510","T"),LS=W("\u2518","\u2014"),bs=W("\u25CF",">"),Zr=W("\u25CB"," "),Nd=W("\u25FB","[\u2022]"),Zi=W("\u25FC","[+]"),Qi=W("\u25FB","[ ]"),Md=W("\u25AA","\u2022"),$i=W("\u2500","-"),xd=W("\u256E","+"),Ld=W("\u251C","+"),Dd=W("\u256F","+"),Pd=W("\u2570","+"),DS=W("\u256D","+"),Ud=W("\u25CF","\u2022"),Fd=W("\u25C6","*"),Wd=W("\u25B2","!"),jd=W("\u25A0","x"),sr=t=>{switch(t){case"initial":case"active":return p("cyan",_d);case"cancel":return p("red",ta);case"error":return p("yellow",ra);case"submit":return p("green",Qr)}},na=t=>{switch(t){case"initial":case"active":return p("cyan",O);case"cancel":return p("red",O);case"error":return p("yellow",O);case"submit":return p("green",O)}};ea=(t,e,r,n,s,o=!1)=>{let i=e,a=0;if(o)for(let l=n-1;l>=r&&(i-=t[l].length,a++,!(i<=s));l--);else for(let l=r;l<n&&(i-=t[l].length,a++,!(i<=s));l++);return{lineCount:i,removals:a}},ys=({cursor:t,options:e,style:r,output:n=process.stdout,maxItems:s=Number.POSITIVE_INFINITY,columnPadding:o=0,rowPadding:i=4})=>{let a=tr(n)-o,l=hs(n),c=p("dim","..."),u=Math.max(l-i,0),m=Math.max(Math.min(s,u),5),f=0;t>=m-3&&(f=Math.max(Math.min(t-m+3,e.length-m),0));let E=m<e.length&&f>0,h=m<e.length&&f+m<e.length,b=Math.min(f+m,e.length),y=[],C=0;E&&C++,h&&C++;let A=f+(E?1:0),D=b-(h?1:0);for(let T=A;T<D;T++){let v=De(r(e[T],T===t),a,{hard:!0,trim:!1}).split(`
17
+ `);y.push(v),C+=v.length}if(C>u){let T=0,v=0,I=C,Y=t-A,Z=u,ve=()=>ea(y,I,0,Y,Z),Q=()=>ea(y,I,Y+1,y.length,Z,!0);E?({lineCount:I,removals:T}=ve(),I>Z&&(h||(Z-=1),{lineCount:I,removals:v}=Q())):(h||(Z-=1),{lineCount:I,removals:v}=Q(),I>Z&&(Z-=1,{lineCount:I,removals:T}=ve())),T>0&&(E=!0,y.splice(0,T)),v>0&&(h=!0,y.splice(y.length-v,v))}let R=[];E&&R.push(c);for(let T of y)for(let v of T)R.push(v);return h&&R.push(c),R},yt=t=>{let e=t.active??"Yes",r=t.inactive??"No";return new Vr({active:e,inactive:r,signal:t.signal,input:t.input,output:t.output,initialValue:t.initialValue??!0,render(){let n=t.withGuide??te.withGuide,s=`${sr(this.state)} `,o=n?`${p("gray",O)} `:"",i=ot(t.output,t.message,o,s),a=`${n?`${p("gray",O)}
18
18
  `:""}${i}
19
19
  `,l=this.value?e:r;switch(this.state){case"submit":{let c=n?`${p("gray",O)} `:"";return`${a}${c}${p("dim",l)}`}case"cancel":{let c=n?`${p("gray",O)} `:"";return`${a}${c}${p(["strikethrough","dim"],l)}${n?`
20
20
  ${p("gray",O)}`:""}`}default:{let c=n?`${p("cyan",O)} `:"",u=n?p("cyan",Ge):"";return`${a}${c}${this.value?`${p("green",bs)} ${e}`:`${p("dim",Zr)} ${p("dim",e)}`}${t.vertical?n?`
@@ -63,10 +63,10 @@ ${i}${p("yellow",this.error)}
63
63
  `}case"submit":{let o=e?`${p("gray",O)} `:"",i=s?p("dim",s):"";return`${r}${o}${i}`}case"cancel":{let o=e?`${p("gray",O)} `:"",i=s?p(["strikethrough","dim"],s):"";return`${r}${o}${i}${s&&e?`
64
64
  ${p("gray",O)}`:""}`}default:{let o=e?`${p("cyan",O)} `:"",i=e?p("cyan",Ge):"";return`${r}${o}${n}
65
65
  ${i}
66
- `}}}}).prompt(),Jd=t=>p("magenta",t),Tt=({indicator:t="dots",onCancel:e,output:r=process.stdout,cancelMessage:n,errorMessage:s,frames:o=Ss?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:i=Ss?80:120,signal:a,...l}={})=>{let c=kd(),u,m,f=!1,E=!1,h="",b,y=performance.now(),R=tr(r),A=l?.styleFrame??Jd,D=G=>{let w=G>1?s??te.messages.error:n??te.messages.cancel;E=G===1,f&&(tt(w,G),E&&typeof e=="function"&&e())},C=()=>D(2),T=()=>D(1),v=()=>{process.on("uncaughtExceptionMonitor",C),process.on("unhandledRejection",C),process.on("SIGINT",T),process.on("SIGTERM",T),process.on("exit",D),a&&a.addEventListener("abort",T)},I=()=>{process.removeListener("uncaughtExceptionMonitor",C),process.removeListener("unhandledRejection",C),process.removeListener("SIGINT",T),process.removeListener("SIGTERM",T),process.removeListener("exit",D),a&&a.removeEventListener("abort",T)},Y=()=>{if(b===void 0)return;c&&r.write(`
67
- `);let G=De(b,R,{hard:!0,trim:!1}).split(`
66
+ `}}}}).prompt(),Jd=t=>p("magenta",t),Tt=({indicator:t="dots",onCancel:e,output:r=process.stdout,cancelMessage:n,errorMessage:s,frames:o=Ss?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:i=Ss?80:120,signal:a,...l}={})=>{let c=kd(),u,m,f=!1,E=!1,h="",b,y=performance.now(),C=tr(r),A=l?.styleFrame??Jd,D=G=>{let w=G>1?s??te.messages.error:n??te.messages.cancel;E=G===1,f&&(tt(w,G),E&&typeof e=="function"&&e())},R=()=>D(2),T=()=>D(1),v=()=>{process.on("uncaughtExceptionMonitor",R),process.on("unhandledRejection",R),process.on("SIGINT",T),process.on("SIGTERM",T),process.on("exit",D),a&&a.addEventListener("abort",T)},I=()=>{process.removeListener("uncaughtExceptionMonitor",R),process.removeListener("unhandledRejection",R),process.removeListener("SIGINT",T),process.removeListener("SIGTERM",T),process.removeListener("exit",D),a&&a.removeEventListener("abort",T)},Y=()=>{if(b===void 0)return;c&&r.write(`
67
+ `);let G=De(b,C,{hard:!0,trim:!1}).split(`
68
68
  `);G.length>1&&r.write(nr.cursor.up(G.length-1)),r.write(nr.cursor.to(0)),r.write(nr.erase.down())},Z=G=>G.replace(/\.+$/,""),ve=G=>{let w=(performance.now()-G)/1e3,N=Math.floor(w/60),L=Math.floor(w%60);return N>0?`[${N}m ${L}s]`:`[${L}s]`},Q=l.withGuide??te.withGuide,Mt=(G="")=>{f=!0,u=Yi({output:r}),h=Z(G),y=performance.now(),Q&&r.write(`${p("gray",O)}
69
- `);let w=0,N=0;v(),m=setInterval(()=>{if(c&&h===b)return;Y(),b=h;let L=A(o[w]),$;if(c)$=`${L} ${h}...`;else if(t==="timer")$=`${L} ${h} ${ve(y)}`;else{let Qn=".".repeat(Math.floor(N)).slice(0,3);$=`${L} ${h}${Qn}`}let Re=De($,R,{hard:!0,trim:!1});r.write(Re),w=w+1<o.length?w+1:0,N=N<4?N+.125:0},i)},tt=(G="",w=0,N=!1)=>{if(!f)return;f=!1,clearInterval(m),Y();let L=w===0?p("green",Qr):w===1?p("red",ta):p("red",ra);h=G??h,N||(t==="timer"?r.write(`${L} ${h} ${ve(y)}
69
+ `);let w=0,N=0;v(),m=setInterval(()=>{if(c&&h===b)return;Y(),b=h;let L=A(o[w]),$;if(c)$=`${L} ${h}...`;else if(t==="timer")$=`${L} ${h} ${ve(y)}`;else{let Qn=".".repeat(Math.floor(N)).slice(0,3);$=`${L} ${h}${Qn}`}let Ce=De($,C,{hard:!0,trim:!1});r.write(Ce),w=w+1<o.length?w+1:0,N=N<4?N+.125:0},i)},tt=(G="",w=0,N=!1)=>{if(!f)return;f=!1,clearInterval(m),Y();let L=w===0?p("green",Qr):w===1?p("red",ta):p("red",ra);h=G??h,N||(t==="timer"?r.write(`${L} ${h} ${ve(y)}
70
70
  `):r.write(`${L} ${h}
71
71
  `)),I(),u()};return{start:Mt,stop:(G="")=>tt(G,0),message:(G="")=>{h=Z(G??h)},cancel:(G="")=>tt(G,1),error:(G="")=>tt(G,2),clear:()=>tt("",0,!0),get isCancelled(){return E}}},PS={light:W("\u2500","-"),heavy:W("\u2501","="),block:W("\u2588","#")},Kd=[`${p("dim","\u2191/\u2193")} to navigate`,`${p("dim","Enter:")} confirm`],zr=(t,e)=>t.includes(`
72
72
  `)?t.split(`
@@ -87,7 +87,7 @@ ${l}${i}
87
87
  `}case"submit":{let i=o?` ${p("dim",o)}`:"",a=e?p("gray",O):"";return`${r}${a}${i}`}case"cancel":{let i=o?` ${p(["strikethrough","dim"],o)}`:"",a=e?p("gray",O):"";return`${r}${a}${i}${o.trim()?`
88
88
  ${a}`:""}`}default:{let i=e?`${p("cyan",O)} `:"",a=e?p("cyan",Ge):"";return`${r}${i}${s}
89
89
  ${a}
90
- `}}}}).prompt()});import{spawn as Vd}from"node:child_process";function He(t,e,r){return Vd(t,e??[],{windowsHide:!0,...r})}var Pt=S(()=>{"use strict"});function vt(t){return process.platform==="win32"?Math.round(t*oe.WINDOWS_MULTIPLIER):t}var oe,ir=S(()=>{"use strict";oe={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}});import{readFileSync as Xd,existsSync as Rs,mkdirSync as Yd,renameSync as qd}from"fs";import{join as aa,dirname as zd}from"path";import{homedir as la}from"os";var re,Rt=S(()=>{"use strict";ir();Ae();re=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(vt(oe.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:aa(la(),".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_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:aa(la(),".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 s=this.envOverride(n);s!==void 0&&(r[n]=s)}return r}static loadFromFile(e,r=!0){try{if(!Rs(e)){let a=this.getAllDefaults();try{let l=zd(e);Rs(l)||Yd(l,{recursive:!0}),se(e,a),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(l){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,l instanceof Error?l.message:String(l))}return r?this.applyEnvOverrides(a):a}let n=Xd(e,"utf-8"),s=JSON.parse(n.replace(/^\uFEFF/,"")),o=s;if(s.env&&typeof s.env=="object"){o=s.env;try{se(e,o),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))o[a]!==void 0&&(i[a]=o[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 s=this.getAllDefaults();try{if(Rs(e)){let o=`${e}.corrupt-${Date.now()}`;qd(e,o),console.warn("[SETTINGS] Backed up corrupt settings file to:",o)}se(e,s),console.warn("[SETTINGS] Recovered settings file with defaults:",e)}catch(o){console.warn("[SETTINGS] Failed to recover corrupt settings file:",e,o instanceof Error?o.message:String(o))}return r?this.applyEnvOverrides(s):s}}}});function Qd(t){return(Zd??process.stderr.write.bind(process.stderr))(t)}function tn(t){Qd(t)}var Zd,Cs=S(()=>{"use strict";Zd=null});import{appendFileSync as $d,existsSync as ca,mkdirSync as ep,readFileSync as tp,readdirSync as rp,unlinkSync as np}from"fs";import{join as ua}from"path";var sp,Is,ws,Os,d,V=S(()=>{"use strict";J();Cs();sp=14,Is=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(Is||{}),ws=null,Os=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=P.logsDir();ca(e)||ep(e,{recursive:!0});let r=new Date().toISOString().split("T")[0];this.logFilePath=ua(e,`keepmind-${r}.log`),this.pruneOldLogs(e)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e instanceof Error?e.message:String(e)),this.logFilePath=null}}}pruneOldLogs(e){try{let r=Date.now()-sp*24*60*60*1e3;for(let n of rp(e)){let s=/^keepmind-(\d{4}-\d{2}-\d{2})\.log$/.exec(n);if(!s)continue;let o=Date.parse(s[1]);if(Number.isFinite(o)&&o<r)try{np(ua(e,n))}catch{}}}catch{}}getLevel(){if(this.level===null)try{let e=P.settings();if(ca(e)){let r=tp(e,"utf-8"),s=(JSON.parse(r).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=Is[s]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
90
+ `}}}}).prompt()});import{spawn as Vd}from"node:child_process";function He(t,e,r){return Vd(t,e??[],{windowsHide:!0,...r})}var Pt=S(()=>{"use strict"});function vt(t){return process.platform==="win32"?Math.round(t*oe.WINDOWS_MULTIPLIER):t}var oe,ir=S(()=>{"use strict";oe={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}});import{readFileSync as Xd,existsSync as Cs,mkdirSync as Yd,renameSync as qd}from"fs";import{join as aa,dirname as zd}from"path";import{homedir as la}from"os";var re,Ct=S(()=>{"use strict";ir();Ae();re=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(vt(oe.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:aa(la(),".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:aa(la(),".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 s=this.envOverride(n);s!==void 0&&(r[n]=s)}return r}static loadFromFile(e,r=!0){try{if(!Cs(e)){let a=this.getAllDefaults();try{let l=zd(e);Cs(l)||Yd(l,{recursive:!0}),se(e,a),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(l){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,l instanceof Error?l.message:String(l))}return r?this.applyEnvOverrides(a):a}let n=Xd(e,"utf-8"),s=JSON.parse(n.replace(/^\uFEFF/,"")),o=s;if(s.env&&typeof s.env=="object"){o=s.env;try{se(e,o),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))o[a]!==void 0&&(i[a]=o[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 s=this.getAllDefaults();try{if(Cs(e)){let o=`${e}.corrupt-${Date.now()}`;qd(e,o),console.warn("[SETTINGS] Backed up corrupt settings file to:",o)}se(e,s),console.warn("[SETTINGS] Recovered settings file with defaults:",e)}catch(o){console.warn("[SETTINGS] Failed to recover corrupt settings file:",e,o instanceof Error?o.message:String(o))}return r?this.applyEnvOverrides(s):s}}}});function Qd(t){return(Zd??process.stderr.write.bind(process.stderr))(t)}function tn(t){Qd(t)}var Zd,Rs=S(()=>{"use strict";Zd=null});import{appendFileSync as $d,existsSync as ca,mkdirSync as ep,readFileSync as tp,readdirSync as rp,unlinkSync as np}from"fs";import{join as ua}from"path";var sp,Is,ws,Os,d,V=S(()=>{"use strict";J();Rs();sp=14,Is=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(Is||{}),ws=null,Os=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=P.logsDir();ca(e)||ep(e,{recursive:!0});let r=new Date().toISOString().split("T")[0];this.logFilePath=ua(e,`keepmind-${r}.log`),this.pruneOldLogs(e)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e instanceof Error?e.message:String(e)),this.logFilePath=null}}}pruneOldLogs(e){try{let r=Date.now()-sp*24*60*60*1e3;for(let n of rp(e)){let s=/^keepmind-(\d{4}-\d{2}-\d{2})\.log$/.exec(n);if(!s)continue;let o=Date.parse(s[1]);if(Number.isFinite(o)&&o<r)try{np(ua(e,n))}catch{}}}catch{}}getLevel(){if(this.level===null)try{let e=P.settings();if(ca(e)){let r=tp(e,"utf-8"),s=(JSON.parse(r).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=Is[s]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
91
91
  ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let r=Object.keys(e);return r.length===0?"{}":r.length<=3?JSON.stringify(e):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,r){if(!r)return e;let n=r;if(typeof r=="string")try{n=JSON.parse(r)}catch{n=r}if(e==="Bash"&&n.command)return`${e}(${n.command})`;if(n.file_path)return`${e}(${n.file_path})`;if(n.notebook_path)return`${e}(${n.notebook_path})`;if(e==="Glob"&&n.pattern)return`${e}(${n.pattern})`;if(e==="Grep"&&n.pattern)return`${e}(${n.pattern})`;if(n.url)return`${e}(${n.url})`;if(n.query)return`${e}(${n.query})`;if(e==="Task"){if(n.subagent_type)return`${e}(${n.subagent_type})`;if(n.description)return`${e}(${n.description})`}return e==="Skill"&&n.skill?`${e}(${n.skill})`:e==="LSP"&&n.operation?`${e}(${n.operation})`:e}formatTimestamp(e){let r=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),o=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),l=String(e.getMilliseconds()).padStart(3,"0");return`${r}-${n}-${s} ${o}:${i}:${a}.${l}`}log(e,r,n,s,o){if(e<this.getLevel())return;this.ensureLogFileInitialized();let i=this.formatTimestamp(new Date),a=Is[e].padEnd(5),l=r.padEnd(6),c="";s?.correlationId?c=`[${s.correlationId}] `:s?.sessionId&&(c=`[session-${s.sessionId}] `);let u="";if(o!=null)if(o instanceof Error)u=this.getLevel()===0?`
92
92
  ${o.message}
93
93
  ${o.stack}`:` ${o.message}`;else if(this.getLevel()===0&&typeof o=="object")try{u=`
@@ -95,10 +95,10 @@ ${o.stack}`:` ${o.message}`;else if(this.getLevel()===0&&typeof o=="object")try{
95
95
  `,"utf8")}catch(E){tn(`[LOGGER] Failed to write to log file: ${E instanceof Error?E.message:String(E)}
96
96
  `)}else tn(f+`
97
97
  `)}debug(e,r,n,s){this.log(0,e,r,n,s)}info(e,r,n,s){this.log(1,e,r,n,s)}warn(e,r,n,s){this.log(2,e,r,n,s)}setErrorSink(e){ws=e}error(e,r,n,s){this.log(3,e,r,n,s),this.routeErrorToSink(r,n,s)}routeErrorToSink(e,r,n){try{if(!ws||!(n instanceof Error))return;ws(n)}catch{}}dataIn(e,r,n,s){this.info(e,`\u2192 ${r}`,n,s)}dataOut(e,r,n,s){this.info(e,`\u2190 ${r}`,n,s)}success(e,r,n,s){this.info(e,`\u2713 ${r}`,n,s)}failure(e,r,n,s){this.error(e,`\u2717 ${r}`,n,s)}happyPathError(e,r,n,s,o=""){let c=((new Error().stack||"").split(`
98
- `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),u=c?`${c[1].split("/").pop()}:${c[2]}`:"unknown",m={...n,location:u};return this.warn(e,`[HAPPY-PATH] ${r}`,m,s),o}},d=new Os});import{join as U,dirname as op,basename as ip}from"path";import{homedir as da}from"os";import{existsSync as at,mkdirSync as ap,readFileSync as lp,renameSync as cp}from"fs";import{execSync as ob}from"child_process";import{fileURLToPath as up}from"url";function dp(){return typeof __dirname<"u"?__dirname:op(up(import.meta.url))}function lt(){let t=process.env.KEEPMIND_DATA_DIR??process.env.CLAUDE_MEM_DATA_DIR;if(t)return t;let e=U(da(),".keepmind"),r=U(e,"settings.json");try{if(at(r)){let n=JSON.parse(lp(r,"utf-8")),s=n.env??n,o=s.KEEPMIND_DATA_DIR??s.CLAUDE_MEM_DATA_DIR;if(o)return o}}catch{}return e}function nn(t){ap(t,{recursive:!0})}function Ep(){try{if(at(B)||!at(ar))return at(B);for(let t of["","-wal","-shm"]){let e=ar+t,r=B+t;at(e)&&!at(r)&&cp(e,r)}return d.info("DB","Migrated legacy claude-mem.db to keepmind.db",{from:ar,to:B}),!0}catch(t){return d.warn("DB","Could not rename legacy claude-mem.db to keepmind.db (file may be locked) \u2014 falling back to legacy path",{},t instanceof Error?t:new Error(String(t))),!1}}function cr(){return Ep(),!at(B)&&at(ar)?ar:B}var lb,M,rn,lr,pp,mp,fp,gp,hp,Je,B,ar,ks,pa,_s,cb,ub,db,P,J=S(()=>{"use strict";V();lb=dp();M=lt(),rn=process.env.CLAUDE_CONFIG_DIR||U(da(),".claude"),lr=U(rn,"plugins","marketplaces","keepmind"),pp=U(M,"archives"),mp=U(M,"logs"),fp=U(M,"trash"),gp=U(M,"backups"),hp=U(M,"modes"),Je=U(M,"settings.json"),B=U(M,"keepmind.db"),ar=U(M,"claude-mem.db"),ks=U(M,"vector-db"),pa=U(M,"observer-sessions"),_s=ip(pa),cb=U(rn,"settings.json"),ub=U(rn,"commands"),db=U(rn,"CLAUDE.md");P={dataDir:()=>M,workerPid:()=>U(M,"worker.pid"),workerPort:()=>U(M,"worker.port"),serverPid:()=>U(M,".server-beta.pid"),serverPort:()=>U(M,".server-beta.port"),serverRuntime:()=>U(M,".server-beta.runtime.json"),settings:()=>U(M,"settings.json"),database:()=>cr(),chroma:()=>U(M,"chroma"),combinedCerts:()=>U(M,"combined_certs.pem"),transcriptsConfig:()=>U(M,"transcript-watch.json"),transcriptsState:()=>U(M,"transcript-watch-state.json"),corpora:()=>U(M,"corpora"),supervisorRegistry:()=>U(M,"supervisor.json"),envFile:()=>U(M,".env"),logsDir:()=>mp,archives:()=>pp,trash:()=>fp,backups:()=>gp,modes:()=>hp,vectorDb:()=>ks,observerSessions:()=>pa}});import{execFile as Sp}from"child_process";import{promisify as bp}from"util";import{existsSync as hb,readFileSync as Eb,writeFileSync as Sb,mkdirSync as bb,unlinkSync as yb}from"fs";import{userInfo as vb}from"os";import{join as Cb}from"path";var Ob,ma=S(()=>{"use strict";J();V();Ob=bp(Sp)});import{existsSync as As,readFileSync as ga,writeFileSync as yp,mkdirSync as Tp,chmodSync as fa}from"fs";import{parseEnv as vp}from"util";function ha(){return process.env.CLAUDE_MEM_ENV_FILE??P.envFile()}function Sa(t){return vp(t)}function Rp(t){let e=["# claude-mem credentials","# This file stores keys and gateway settings for the claude-mem memory agent","# Edit this file or use claude-mem settings to configure",""];for(let[r,n]of Object.entries(t))if(n){let s=/[\s#=]/.test(n);e.push(`${r}=${s?`"${n}"`:n}`)}return e.join(`
98
+ `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),u=c?`${c[1].split("/").pop()}:${c[2]}`:"unknown",m={...n,location:u};return this.warn(e,`[HAPPY-PATH] ${r}`,m,s),o}},d=new Os});import{join as U,dirname as op,basename as ip}from"path";import{homedir as da}from"os";import{existsSync as at,mkdirSync as ap,readFileSync as lp,renameSync as cp}from"fs";import{execSync as ob}from"child_process";import{fileURLToPath as up}from"url";function dp(){return typeof __dirname<"u"?__dirname:op(up(import.meta.url))}function lt(){let t=process.env.KEEPMIND_DATA_DIR??process.env.CLAUDE_MEM_DATA_DIR;if(t)return t;let e=U(da(),".keepmind"),r=U(e,"settings.json");try{if(at(r)){let n=JSON.parse(lp(r,"utf-8")),s=n.env??n,o=s.KEEPMIND_DATA_DIR??s.CLAUDE_MEM_DATA_DIR;if(o)return o}}catch{}return e}function nn(t){ap(t,{recursive:!0})}function Ep(){try{if(at(B)||!at(ar))return at(B);for(let t of["","-wal","-shm"]){let e=ar+t,r=B+t;at(e)&&!at(r)&&cp(e,r)}return d.info("DB","Migrated legacy claude-mem.db to keepmind.db",{from:ar,to:B}),!0}catch(t){return d.warn("DB","Could not rename legacy claude-mem.db to keepmind.db (file may be locked) \u2014 falling back to legacy path",{},t instanceof Error?t:new Error(String(t))),!1}}function cr(){return Ep(),!at(B)&&at(ar)?ar:B}var lb,M,rn,lr,pp,mp,fp,gp,hp,Je,B,ar,ks,pa,_s,cb,ub,db,P,J=S(()=>{"use strict";V();lb=dp();M=lt(),rn=process.env.CLAUDE_CONFIG_DIR||U(da(),".claude"),lr=U(rn,"plugins","marketplaces","keepmind"),pp=U(M,"archives"),mp=U(M,"logs"),fp=U(M,"trash"),gp=U(M,"backups"),hp=U(M,"modes"),Je=U(M,"settings.json"),B=U(M,"keepmind.db"),ar=U(M,"claude-mem.db"),ks=U(M,"vector-db"),pa=U(M,"observer-sessions"),_s=ip(pa),cb=U(rn,"settings.json"),ub=U(rn,"commands"),db=U(rn,"CLAUDE.md");P={dataDir:()=>M,workerPid:()=>U(M,"worker.pid"),workerPort:()=>U(M,"worker.port"),serverPid:()=>U(M,".server-beta.pid"),serverPort:()=>U(M,".server-beta.port"),serverRuntime:()=>U(M,".server-beta.runtime.json"),settings:()=>U(M,"settings.json"),database:()=>cr(),chroma:()=>U(M,"chroma"),combinedCerts:()=>U(M,"combined_certs.pem"),transcriptsConfig:()=>U(M,"transcript-watch.json"),transcriptsState:()=>U(M,"transcript-watch-state.json"),corpora:()=>U(M,"corpora"),supervisorRegistry:()=>U(M,"supervisor.json"),envFile:()=>U(M,".env"),logsDir:()=>mp,archives:()=>pp,trash:()=>fp,backups:()=>gp,modes:()=>hp,vectorDb:()=>ks,observerSessions:()=>pa}});import{execFile as Sp}from"child_process";import{promisify as bp}from"util";import{existsSync as hb,readFileSync as Eb,writeFileSync as Sb,mkdirSync as bb,unlinkSync as yb}from"fs";import{userInfo as vb}from"os";import{join as Rb}from"path";var Ob,ma=S(()=>{"use strict";J();V();Ob=bp(Sp)});import{existsSync as As,readFileSync as ga,writeFileSync as yp,mkdirSync as Tp,chmodSync as fa}from"fs";import{parseEnv as vp}from"util";function ha(){return process.env.CLAUDE_MEM_ENV_FILE??P.envFile()}function Sa(t){return vp(t)}function Cp(t){let e=["# claude-mem credentials","# This file stores keys and gateway settings for the claude-mem memory agent","# Edit this file or use claude-mem settings to configure",""];for(let[r,n]of Object.entries(t))if(n){let s=/[\s#=]/.test(n);e.push(`${r}=${s?`"${n}"`:n}`)}return e.join(`
99
99
  `)+`
100
- `}function ur(){let t=ha();if(!As(t))return{};try{let e=ga(t,"utf-8"),r=Sa(e),n={};for(let s of Ea)r[s]&&(n[s]=r[s]);return n}catch(e){return d.warn("ENV","Failed to load .env file",{path:t},e instanceof Error?e:new Error(String(e))),{}}}function dr(t){let e=ha(),r={};try{As(P.dataDir())||Tp(P.dataDir(),{recursive:!0,mode:448}),fa(P.dataDir(),448),r=As(e)?Sa(ga(e,"utf-8")):{}}catch(s){let o=s instanceof Error?s:new Error(String(s));throw d.error("ENV","Failed to set up env directory or read existing env",{},o),o}let n={...r};for(let s of Ea){let o=t[s];o!==void 0&&(o?n[s]=o:delete n[s])}try{yp(e,Rp(n),{encoding:"utf-8",mode:384}),fa(e,384)}catch(s){throw d.error("ENV","Failed to save .env file",{path:e},s instanceof Error?s:new Error(String(s))),s}}var Ea,ba=S(()=>{"use strict";V();J();ma();Ea=["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","GEMINI_API_KEY","OPENROUTER_API_KEY"]});function ya(t){return t instanceof Error?t:new Error(String(t))}var Ta=S(()=>{"use strict"});function Ct(t=process.env){let e={};for(let[r,n]of Object.entries(t))if(n!==void 0){if(Ip.has(r)){e[r]=n;continue}wp.has(r)||Cp.some(s=>r.startsWith(s))||(e[r]=n)}return e}var Cp,wp,Ip,sn=S(()=>{"use strict";Cp=["CLAUDECODE_","CLAUDE_CODE_"],wp=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"]),Ip=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"])});import{spawnSync as wa}from"child_process";import{existsSync as Op,mkdirSync as va,readFileSync as Ia,writeFileSync as kp}from"fs";import Ra from"path";function Ke(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:(d.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return d.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function on(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(n=>!Ke(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function xp(t){let e=Ca.get(t);if(e&&Date.now()-e.capturedAtMs<Mp)return e.token;let r=null;try{let n=wa("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Ct(process.env),LC_ALL:"C",LANG:"C"}});if(n.status===0){let s=n.stdout.trim();r=s.length>0?s:null}}catch(n){d.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:n instanceof Error?n.message:String(n)}),r=null}return Ca.set(t,{token:r,capturedAtMs:Date.now()}),r}function Oa(t){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux")try{let e=Ia(`/proc/${t}/stat`,"utf-8"),r=e.lastIndexOf(") ");if(r<0)return null;let s=e.slice(r+2).split(" ")[19];return s&&/^\d+$/.test(s)?s:null}catch(e){return d.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}if(process.platform==="win32")return xp(t);try{let e=wa("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Ct(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 d.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}}function Ls(t){if(!t||!Ke(t.pid))return!1;if(!t.startToken)return!0;let e=Oa(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||d.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function an(){return Ns||(Ns=new xs),Ns}function Ms(){let t=Lp.shift();t&&t()}var _p,Ap,Np,Mp,Ca,xs,Ns,Lp,pr=S(()=>{"use strict";Pt();V();sn();J();_p=5e3,Ap=1e3,Np=P.supervisorRegistry();Mp=5e3,Ca=new Map;xs=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Np){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,va(Ra.dirname(this.registryPath),{recursive:!0}),!Op(this.registryPath)){this.persist();return}try{let n=JSON.parse(Ia(this.registryPath,"utf-8")).processes??{};for(let[s,o]of Object.entries(n))this.entries.set(s,o)}catch(r){r instanceof Error?d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&d.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"&&Ms()}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),s=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}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,s]of this.entries)Ke(s.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,s.type==="sdk"&&(r+=1));e>0&&this.persist();for(let n=0;n<r;n+=1)Ms();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;d.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:n,pids:r.map(i=>i.pid)});let s=r.filter(i=>Ke(i.pid));for(let i of s)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"&&d.debug("SYSTEM",`Failed to SIGTERM session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):d.warn("SYSTEM",`Failed to SIGTERM session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}await on(s,_p);let o=s.filter(i=>Ke(i.pid));for(let i of o){d.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"&&d.debug("SYSTEM",`Failed to SIGKILL session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):d.warn("SYSTEM",`Failed to SIGKILL session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}}if(o.length>0){let i=Date.now()+Ap;for(;Date.now()<i&&o.filter(l=>Ke(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,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"&&Ms();return d.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())};va(Ra.dirname(this.registryPath),{recursive:!0}),kp(this.registryPath,JSON.stringify(e,null,2))}},Ns=null;Lp=[]});import{execFile as Dp}from"child_process";import{existsSync as Pp,readFileSync as Up,rmSync as Fp}from"fs";import{promisify as Wp}from"util";async function _a(t){let e=t.currentPid??process.pid,r=t.pidFilePath??Gp,n=t.registry.getAll(),s=[...n].filter(i=>i.pid!==e).sort((i,a)=>Date.parse(a.startedAt)-Date.parse(i.startedAt));for(let i of s){if(!Ke(i.pid)){t.registry.unregister(i.id);continue}try{await ka(i,"SIGTERM")}catch(a){a instanceof Error?d.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):d.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}}await on(s,5e3);let o=s.filter(i=>Ke(i.pid));for(let i of o)try{await ka(i,"SIGKILL")}catch(a){a instanceof Error?d.debug("SYSTEM","Failed to force kill child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):d.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}await on(o,1e3);for(let i of s)t.registry.unregister(i.id);for(let i of n.filter(a=>a.pid===e))t.registry.unregister(i.id);Bp(r,e),t.registry.pruneDeadEntries()}function Bp(t,e){if(!Pp(t))return;let r=null;try{let n=JSON.parse(Up(t,"utf-8"));r=typeof n.pid=="number"?n.pid:null}catch(n){d.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){d.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{Fp(t,{force:!0})}catch(n){n instanceof Error?d.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:t},n):d.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:t,error:String(n)})}}async function ka(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 s=await Hp();if(s){await new Promise((i,a)=>{s(r,e,l=>{if(!l){i();return}if(l.code==="ESRCH"){i();return}a(l)})});return}let o=["/PID",String(r),"/T"];e==="SIGKILL"&&o.push("/F"),await jp("taskkill",o,{timeout:oe.POWERSHELL_COMMAND,windowsHide:!0})}async function Hp(){let t="tree-kill";try{let e=await import(t);return e.default??e}catch(e){return d.debug("SYSTEM","tree-kill module not available, using fallback",{},e instanceof Error?e:void 0),null}}var jp,Gp,Aa=S(()=>{"use strict";V();ir();pr();J();jp=Wp(Dp),Gp=P.workerPid()});function Jp(){let e=an().pruneDeadEntries();e>0&&d.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function Ma(){Ut===null&&(Ut=setInterval(Jp,Na),Ut.unref(),d.debug("SYSTEM","Health checker started",{intervalMs:Na}))}function xa(){Ut!==null&&(clearInterval(Ut),Ut=null,d.debug("SYSTEM","Health checker stopped"))}var Na,Ut,La=S(()=>{"use strict";V();pr();Na=3e4,Ut=null});import{existsSync as Kp,readFileSync as Vp,rmSync as Da}from"fs";function Ps(){return Yp}function ln(t={}){let e=t.pidFilePath??Xp;if(!Kp(e))return"missing";let r=null;try{r=JSON.parse(Vp(e,"utf-8"))}catch(s){return s instanceof Error?d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),Da(e,{force:!0}),"invalid"}return Ls(r)&&r?((t.logAlive??!0)&&d.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(d.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),Da(e,{force:!0}),"stale")}var Xp,Ds,Yp,cn=S(()=>{"use strict";V();pr();Aa();La();J();Xp=P.workerPid(),Ds=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(),ln({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Ma()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){d.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,d.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?d.error("SYSTEM","Error during shutdown",{},s):d.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(o){o instanceof Error?d.debug("SYSTEM","Supervisor shutdown fallback failed",{},o):d.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(o)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{d.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}xa(),this.stopPromise=_a({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}},Yp=new Ds(an())});import qp from"path";import{homedir as zp}from"os";import{existsSync as mr,writeFileSync as hy,readFileSync as Zp,unlinkSync as Qp,mkdirSync as Ey,rmSync as Sy,statSync as by,utimesSync as $p}from"fs";import{execSync as em}from"child_process";function Pa(t){return t?/(^|[\\/])node(\.exe)?$/i.test(t.trim()):!1}function tm(t,e){let r=e==="win32"?`where ${t}`:`which ${t}`,n;try{n=em(r,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(o){return o instanceof Error?d.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},o):d.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},new Error(String(o))),null}return n.split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0)||null}function un(t={}){let e=Object.keys(t).length===0;if(e&&Us!==void 0)return Us;let r=rm(t);return e&&r!==null&&(Us=r),r}function rm(t){let e=t.platform??process.platform,r=t.execPath??process.execPath;if(Pa(r))return r;let n=t.env??process.env,s=t.homeDirectory??zp(),o=t.pathExists??mr,i=t.lookupInPath??tm,a=e==="win32"?[n.NODE,qp.join(s,".nvm","current","bin","node.exe"),"node"]:[n.NODE,"/usr/local/bin/node","/opt/homebrew/bin/node","/usr/bin/node","node"];for(let l of a){let c=l?.trim();if(c&&(Pa(c)&&o(c)||c.toLowerCase()==="node"))return c}return i("node",e)}function Ua(){if(!mr(Pe))return null;try{return JSON.parse(Zp(Pe,"utf-8"))}catch(t){return t instanceof Error?d.warn("SYSTEM","Failed to parse PID file",{path:Pe},t):d.warn("SYSTEM","Failed to parse PID file",{path:Pe},new Error(String(t))),null}}function Fa(){if(mr(Pe))try{Qp(Pe)}catch(t){t instanceof Error?d.warn("SYSTEM","Failed to remove PID file",{path:Pe},t):d.warn("SYSTEM","Failed to remove PID file",{path:Pe},new Error(String(t)))}}function ct(t){return process.platform==="win32"?Math.round(t*2):t}function Wa(t,e,r={}){Ps().assertCanSpawn("worker daemon");let n=Ct({...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r}),s=un();if(!s){d.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 u=He(s,[t,"--daemon"],{detached:!0,stdio:"ignore",windowsHide:!0,env:n});if(u.pid===void 0){d.error("SYSTEM","Worker daemon spawn produced no PID on Windows",{runtimePath:s});return}return u.unref(),u.pid}catch(u){d.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:s},ya(u));return}let o="/usr/bin/setsid",i=mr(o),c=He(i?o:s,i?[s,t,"--daemon"]:[t,"--daemon"],{detached:!0,stdio:"ignore",env:n});if(c.pid!==void 0)return c.unref(),c.pid}function ja(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;d.debug("SYSTEM","Process not alive",{pid:t,code:r})}else d.debug("SYSTEM","Process not alive (non-Error thrown)",{pid:t},new Error(String(e)));return!1}}function Ga(){try{if(!mr(Pe))return;let t=new Date;$p(Pe,t,t)}catch{}}function Ba(){return ln({logAlive:!1})}var Oy,Pe,ky,Us,fr=S(()=>{"use strict";Pt();V();Ta();sn();cn();J();pr();Oy=P.dataDir(),Pe=P.workerPid(),ky=P.workerPort()});import My from"path";import nm from"net";import{readFileSync as Dy}from"fs";async function om(t,e,r="GET"){let n=await fetch(`http://127.0.0.1:${t}${e}`,{method:r,signal:AbortSignal.timeout(sm)}),s="";try{s=await n.text()}catch{}return{ok:n.ok,statusCode:n.status,body:s}}async function Ha(t){return new Promise(e=>{let r=nm.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 Ja(t,e,r,n){let s=Date.now();for(;Date.now()-s<r;){try{if((await om(t,e)).ok)return!0}catch(o){o instanceof Error?d.debug("SYSTEM",n,{},o):d.debug("SYSTEM",n,{error:String(o)})}await new Promise(o=>setTimeout(o,500))}return!1}function gr(t,e=3e4){return Ja(t,"/api/health",e,"Service not ready yet, will retry")}function hr(t,e=3e4){return Ja(t,"/api/readiness",e,"Worker not ready yet, will retry")}var sm,Fs=S(()=>{"use strict";V();J();sm=2500});import{dirname as im,join as am}from"path";import{mkdirSync as lm,readFileSync as cm,statSync as Ka,unlinkSync as Va,writeFileSync as um}from"fs";function Xa(){return am(lt(),"spawn.lock")}function Ws(){let t=Xa(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let r=0;r<2;r++)try{return lm(im(t),{recursive:!0}),um(t,e,{flag:"wx"}),!0}catch(n){if(n?.code!=="EEXIST")return!0;if(r>0)return!1;let o;try{o=Ka(t).mtimeMs}catch{continue}if(Date.now()-o<=dm)return!1;let i;try{i=Ka(t).mtimeMs}catch{continue}if(i!==o)return!1;try{Va(t)}catch{return!1}}return!1}function js(){let t=Xa();try{if(JSON.parse(cm(t,"utf-8")).pid!==process.pid)return;Va(t)}catch{}}var dm,Gs=S(()=>{"use strict";J();dm=6e4});import{existsSync as pm}from"fs";function mm(t){let e=Ua();return e&&typeof e.port=="number"&&ja(e.pid)?e.port:t}async function fm(t,e){let r=Date.now()+e;for(;Date.now()<r;){let n=mm(t);if(await gr(n,800))return n;await new Promise(s=>setTimeout(s,300))}return null}async function Ya(t,e){if(!e)return d.error("SYSTEM","ensureWorkerStarted called with empty workerScriptPath \u2014 caller bug"),"dead";if(!pm(e))return d.error("SYSTEM","ensureWorkerStarted: worker script not found at expected path \u2014 likely a partial install or build artifact missing",{workerScriptPath:e}),"dead";if(await gr(t,1e3)){let a=await hr(t,ct(oe.READINESS_WAIT));return a||d.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),d.info("SYSTEM","Worker already running and healthy (fast path)"),a?"ready":"warming"}if(Ba()==="alive"){if(d.info("SYSTEM","Worker PID file points to a live process, waiting for it to become healthy"),await gr(t,ct(oe.POST_SPAWN_WAIT))){let l=await hr(t,ct(oe.READINESS_WAIT));return d.info("SYSTEM","Worker became healthy while waiting on live PID"),l?"ready":"warming"}d.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"),Fa()}if(await Ha(t)){if(d.info("SYSTEM","Port in use, waiting for worker to become healthy"),await gr(t,ct(oe.PORT_IN_USE_WAIT))){let l=await hr(t,ct(oe.READINESS_WAIT));return d.info("SYSTEM","Worker is now healthy"),l?"ready":"warming"}d.warn("SYSTEM","Configured port in use but no healthy worker \u2014 spawning anyway (worker will pick a free ephemeral port)")}let s=Ws(),o=t;try{if(s){if(d.info("SYSTEM","Starting worker daemon",{workerScriptPath:e}),Wa(e,t)===void 0)return d.error("SYSTEM","Failed to spawn worker daemon"),"dead"}else d.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping duplicate spawn and waiting for its worker");let a=await fm(t,ct(oe.POST_SPAWN_WAIT));if(a===null)return d.warn("SYSTEM",s?"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";o=a}finally{s&&js()}let i=await hr(o,ct(oe.READINESS_WAIT));return i||d.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),Ga(),d.info("SYSTEM",s?"Worker started successfully":"Worker is up (started by another launcher)"),i?"ready":"warming"}var qa=S(()=>{"use strict";V();ir();fr();Fs();Gs()});function wt(t){return t instanceof Error?t.message:typeof t=="string"?t:t&&typeof t=="object"&&"message"in t?String(t.message):String(t??"")}function za(t,e){for(let r of Bs)if(r.match(t,e))return r;return Bs[Bs.length-1]}var gm,hm,Bs,dn=S(()=>{"use strict";gm=t=>t.platform==="win32"?'Install Bun manually then re-run `npx keepmind install`. Windows: `winget install Oven-sh.Bun` (or `powershell -c "irm bun.sh/install.ps1 | iex"`).':"Install Bun manually then re-run `npx keepmind install`. macOS/Linux: `curl -fsSL https://bun.sh/install | bash` (or `brew install oven-sh/bun/bun`).",hm=t=>t.platform==="win32"?'Install uv manually then re-run `npx keepmind install`. Windows: `winget install astral-sh.uv` (or `powershell -c "irm https://astral.sh/uv/install.ps1 | iex"`).':"Install uv manually then re-run `npx keepmind install`. macOS/Linux: `curl -LsSf https://astral.sh/uv/install.sh | sh` (or `brew install uv`).",Bs=[{id:"bun-missing-after-install",severity:"ABORT",match:t=>{let e=wt(t);return e.includes("Bun executable not found")||e.includes("Bun installation completed but binary not found")||e.includes("Failed to install Bun")},remediation:gm},{id:"uv-missing-after-install",severity:"ABORT",match:t=>{let e=wt(t);return e.includes("uv executable not found")||e.includes("uv installed but version probe failed")||e.includes("uv binary not found")||e.includes("Failed to install uv")},remediation:hm},{id:"tree-sitter-eresolve",severity:"ABORT",match:t=>/\bERESOLVE\b/.test(wt(t)),remediation:()=>"ERESOLVE peer-dependency conflict in marketplace deps that --legacy-peer-deps could not resolve. Open an issue at https://github.com/ManuelStaggl/keepmind/issues with the conflicting peer ranges shown above."},{id:"bun-install-network-fail",severity:"SILENT_RETRY",match:t=>/error: failed to resolve/.test(wt(t)),remediation:()=>"bun install failed to resolve packages \u2014 check network connectivity and re-run `npx keepmind install`. Cached packages in ~/.bun/install/cache will be reused."},{id:"marketplace-dir-not-writable",severity:"ABORT",match:t=>/\b(EACCES|EPERM)\b/.test(wt(t)),remediation:t=>`Cannot write to the claude-mem data/marketplace directory under ${t.dataDir}. Check filesystem permissions or set CLAUDE_MEM_DATA_DIR to a writable path, then re-run.`},{id:"plugin-json-corrupt",severity:"ABORT",match:(t,e)=>e.component==="plugin-json"&&/Unexpected token|JSON|parse/i.test(wt(t)),remediation:()=>"Existing plugin.json is corrupt. Run `rm -rf ~/.claude/plugins/marketplaces/keepmind` and re-run `npx keepmind install`."},{id:"all-ides-failed",severity:"ABORT",match:(t,e)=>e.component==="all-ides",remediation:()=>"Every selected IDE integration failed. See the per-IDE errors above. Re-run with `--ide=<single>` to isolate the failure."},{id:"single-ide-failed",severity:"FAIL_LOUD_PER_IDE",match:(t,e)=>e.phase==="ide-install",remediation:()=>"Re-run `npx keepmind install --ide=<name>` to retry just this IDE. The captured stderr is shown above."},{id:"path-update-failed",severity:"WARN_CONTINUE",match:(t,e)=>e.component==="path-update",remediation:()=>"Could not auto-update PATH in your shell config. Add the printed export line manually and restart your shell."},{id:"auto-memory-toggle-failed",severity:"WARN_CONTINUE",match:(t,e)=>e.component==="auto-memory",remediation:()=>'Could not disable Claude Code auto-memory. Add `"CLAUDE_CODE_DISABLE_AUTO_MEMORY": "1"` to the env block in ~/.claude/settings.json.'},{id:"version-probe-transient",severity:"WARN_CONTINUE",match:(t,e)=>e.component.endsWith("-version-probe"),remediation:()=>"Could not verify the tool version after install \u2014 the installation is likely OK. Re-run `npx keepmind install` if features misbehave."},{id:"child-process-timeout",severity:"ABORT",match:t=>/timed out|ETIMEDOUT|SIGTERM|did not finish/i.test(wt(t)),remediation:()=>"An install command did not finish in time. Check network connectivity. On a slow host, raise the budget with CLAUDE_MEM_INSTALL_TIMEOUT_MS and re-run."},{id:"unknown-install-error",severity:"ABORT",match:()=>!0,remediation:t=>`An unexpected installer error occurred. Capture ${t.dataDir}/last-install-error.json and open an issue at https://github.com/ManuelStaggl/keepmind/issues.`}]});import{mkdirSync as Em,writeFileSync as Sm}from"fs";import{join as bm}from"path";function Qa(){return{warnings:[],failedIDEs:[],retryCount:{}}}function Ft(t){return t instanceof Error?t.message:typeof t=="string"?t:String(t??"")}function ym(t,e,r,n){try{Em(n,{recursive:!0});let s={severity:t.severity,categoryId:t.id,component:e.component,phase:e.phase,cause:Ft(e.cause),remediation:r,details:e.details??null,timestamp:new Date().toISOString()};Sm(bm(n,"last-install-error.json"),JSON.stringify(s,null,2))}catch{}}function ce(t,e,r){let n=lt(),s=za(e.cause,{component:e.component,phase:e.phase}),o=e.remediation??s.remediation({platform:process.platform,dataDir:n});switch(t){case"ABORT":throw ym(s,e,o,n),new Er(`${e.component} failed during ${e.phase}: ${Ft(e.cause)}`,{category:s,remediation:o,cause:e.cause});case"FAIL_LOUD_PER_IDE":{let i=e.ide??e.component;r.failedIDEs.includes(i)||r.failedIDEs.push(i),r.warnings.push({component:i,message:e.details?`${Ft(e.cause)}
101
- ${e.details}`:Ft(e.cause),remediation:o});return}case"WARN_CONTINUE":{r.warnings.push({component:e.component,message:Ft(e.cause),remediation:o});return}case"SILENT_RETRY":{let i=(r.retryCount[e.component]??0)+1;r.retryCount[e.component]=i,i>1&&r.warnings.push({component:e.component,message:Ft(e.cause),remediation:o});return}}}function Hs(t,e){if(t.warnings.length!==0){e(""),e("Warnings & remediation:");for(let r of t.warnings)e(` \u2022 [${r.component}] ${r.message}`),r.remediation&&r.remediation!=="No action required."&&e(` \u2192 ${r.remediation}`)}}var Er,Js=S(()=>{"use strict";dn();J();Er=class extends Error{category;remediation;constructor(e,r){super(e,{cause:r.cause}),this.name="InstallAbortError",this.category=r.category,this.remediation=r.remediation}}});import{existsSync as ut,readFileSync as Vs,writeFileSync as Tm}from"fs";import{exec as vm,execSync as pn,spawnSync as mn}from"child_process";import{createRequire as Rm}from"module";import{join as Oe}from"path";import{homedir as Wt}from"os";function $a(){return j?'Install Bun manually: `winget install Oven-sh.Bun` (or `powershell -c "irm bun.sh/install.ps1 | iex"`), then re-run `npx keepmind install`.':"Install Bun manually: `curl -fsSL https://bun.sh/install | bash` (or `brew install oven-sh/bun/bun`), then re-run `npx keepmind install`."}function el(){return j?'Install uv manually: `winget install astral-sh.uv` (or `powershell -c "irm https://astral.sh/uv/install.ps1 | iex"`), then re-run `npx keepmind install`.':"Install uv manually: `curl -LsSf https://astral.sh/uv/install.sh | sh` (or `brew install uv`), then re-run `npx keepmind install`."}function tl(){try{if(!ut(Je))return!1;let t=JSON.parse(Vs(Je,"utf-8"));if(!t||typeof t!="object")return!1;let e=t,r=e.env&&typeof e.env=="object"?e.env:{},n=e.CLAUDE_MEM_DISABLE_VECTOR_SEARCH??r.CLAUDE_MEM_DISABLE_VECTOR_SEARCH;return n===!0||n==="true"||n==="1"}catch{return!1}}function ol(t){return Oe(t,".install-version")}function Xs(){try{if(mn("bun",["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j}).status===0)return"bun"}catch{}return nl.find(ut)||null}function il(){return Xs()!==null}function Ks(){let t=Xs();if(!t)return null;try{let e=mn(t,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j});return e.status===0?e.stdout.trim():null}catch{return null}}function Ys(){try{if(mn("uv",["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j}).status===0)return"uv"}catch{}return sl.find(ut)||null}function al(){return Ys()!==null}function rl(){let t=Ys();if(!t)return null;try{let e=mn(t,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j});return e.status===0?e.stdout.trim():null}catch{return null}}function qs(t){if(t&&typeof t=="object"){let e=t,r=[];e.message&&r.push(e.message);let n=e.stderr?e.stderr.toString().trim():"";n&&r.push(`stderr: ${n}`);let s=e.stdout?e.stdout.toString().trim():"";return!n&&s&&r.push(`stdout: ${s}`),r.join(`
100
+ `}function ur(){let t=ha();if(!As(t))return{};try{let e=ga(t,"utf-8"),r=Sa(e),n={};for(let s of Ea)r[s]&&(n[s]=r[s]);return n}catch(e){return d.warn("ENV","Failed to load .env file",{path:t},e instanceof Error?e:new Error(String(e))),{}}}function dr(t){let e=ha(),r={};try{As(P.dataDir())||Tp(P.dataDir(),{recursive:!0,mode:448}),fa(P.dataDir(),448),r=As(e)?Sa(ga(e,"utf-8")):{}}catch(s){let o=s instanceof Error?s:new Error(String(s));throw d.error("ENV","Failed to set up env directory or read existing env",{},o),o}let n={...r};for(let s of Ea){let o=t[s];o!==void 0&&(o?n[s]=o:delete n[s])}try{yp(e,Cp(n),{encoding:"utf-8",mode:384}),fa(e,384)}catch(s){throw d.error("ENV","Failed to save .env file",{path:e},s instanceof Error?s:new Error(String(s))),s}}var Ea,ba=S(()=>{"use strict";V();J();ma();Ea=["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","GEMINI_API_KEY","OPENROUTER_API_KEY"]});function ya(t){return t instanceof Error?t:new Error(String(t))}var Ta=S(()=>{"use strict"});function Rt(t=process.env){let e={};for(let[r,n]of Object.entries(t))if(n!==void 0){if(Ip.has(r)){e[r]=n;continue}wp.has(r)||Rp.some(s=>r.startsWith(s))||(e[r]=n)}return e}var Rp,wp,Ip,sn=S(()=>{"use strict";Rp=["CLAUDECODE_","CLAUDE_CODE_"],wp=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"]),Ip=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"])});import{spawnSync as wa}from"child_process";import{existsSync as Op,mkdirSync as va,readFileSync as Ia,writeFileSync as kp}from"fs";import Ca from"path";function Ke(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:(d.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return d.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function on(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(n=>!Ke(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function xp(t){let e=Ra.get(t);if(e&&Date.now()-e.capturedAtMs<Mp)return e.token;let r=null;try{let n=wa("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Rt(process.env),LC_ALL:"C",LANG:"C"}});if(n.status===0){let s=n.stdout.trim();r=s.length>0?s:null}}catch(n){d.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:n instanceof Error?n.message:String(n)}),r=null}return Ra.set(t,{token:r,capturedAtMs:Date.now()}),r}function Oa(t){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux")try{let e=Ia(`/proc/${t}/stat`,"utf-8"),r=e.lastIndexOf(") ");if(r<0)return null;let s=e.slice(r+2).split(" ")[19];return s&&/^\d+$/.test(s)?s:null}catch(e){return d.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}if(process.platform==="win32")return xp(t);try{let e=wa("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Rt(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 d.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}}function Ls(t){if(!t||!Ke(t.pid))return!1;if(!t.startToken)return!0;let e=Oa(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||d.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function an(){return Ns||(Ns=new xs),Ns}function Ms(){let t=Lp.shift();t&&t()}var _p,Ap,Np,Mp,Ra,xs,Ns,Lp,pr=S(()=>{"use strict";Pt();V();sn();J();_p=5e3,Ap=1e3,Np=P.supervisorRegistry();Mp=5e3,Ra=new Map;xs=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Np){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,va(Ca.dirname(this.registryPath),{recursive:!0}),!Op(this.registryPath)){this.persist();return}try{let n=JSON.parse(Ia(this.registryPath,"utf-8")).processes??{};for(let[s,o]of Object.entries(n))this.entries.set(s,o)}catch(r){r instanceof Error?d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&d.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"&&Ms()}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),s=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}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,s]of this.entries)Ke(s.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,s.type==="sdk"&&(r+=1));e>0&&this.persist();for(let n=0;n<r;n+=1)Ms();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;d.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:n,pids:r.map(i=>i.pid)});let s=r.filter(i=>Ke(i.pid));for(let i of s)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"&&d.debug("SYSTEM",`Failed to SIGTERM session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):d.warn("SYSTEM",`Failed to SIGTERM session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}await on(s,_p);let o=s.filter(i=>Ke(i.pid));for(let i of o){d.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"&&d.debug("SYSTEM",`Failed to SIGKILL session process PID ${i.pid}`,{pid:i.pid,pgid:i.pgid},a):d.warn("SYSTEM",`Failed to SIGKILL session process PID ${i.pid} (non-Error)`,{pid:i.pid,pgid:i.pgid,error:String(a)})}}if(o.length>0){let i=Date.now()+Ap;for(;Date.now()<i&&o.filter(l=>Ke(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,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"&&Ms();return d.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())};va(Ca.dirname(this.registryPath),{recursive:!0}),kp(this.registryPath,JSON.stringify(e,null,2))}},Ns=null;Lp=[]});import{execFile as Dp}from"child_process";import{existsSync as Pp,readFileSync as Up,rmSync as Fp}from"fs";import{promisify as Wp}from"util";async function _a(t){let e=t.currentPid??process.pid,r=t.pidFilePath??Gp,n=t.registry.getAll(),s=[...n].filter(i=>i.pid!==e).sort((i,a)=>Date.parse(a.startedAt)-Date.parse(i.startedAt));for(let i of s){if(!Ke(i.pid)){t.registry.unregister(i.id);continue}try{await ka(i,"SIGTERM")}catch(a){a instanceof Error?d.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):d.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}}await on(s,5e3);let o=s.filter(i=>Ke(i.pid));for(let i of o)try{await ka(i,"SIGKILL")}catch(a){a instanceof Error?d.debug("SYSTEM","Failed to force kill child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):d.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}await on(o,1e3);for(let i of s)t.registry.unregister(i.id);for(let i of n.filter(a=>a.pid===e))t.registry.unregister(i.id);Bp(r,e),t.registry.pruneDeadEntries()}function Bp(t,e){if(!Pp(t))return;let r=null;try{let n=JSON.parse(Up(t,"utf-8"));r=typeof n.pid=="number"?n.pid:null}catch(n){d.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){d.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{Fp(t,{force:!0})}catch(n){n instanceof Error?d.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:t},n):d.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:t,error:String(n)})}}async function ka(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 s=await Hp();if(s){await new Promise((i,a)=>{s(r,e,l=>{if(!l){i();return}if(l.code==="ESRCH"){i();return}a(l)})});return}let o=["/PID",String(r),"/T"];e==="SIGKILL"&&o.push("/F"),await jp("taskkill",o,{timeout:oe.POWERSHELL_COMMAND,windowsHide:!0})}async function Hp(){let t="tree-kill";try{let e=await import(t);return e.default??e}catch(e){return d.debug("SYSTEM","tree-kill module not available, using fallback",{},e instanceof Error?e:void 0),null}}var jp,Gp,Aa=S(()=>{"use strict";V();ir();pr();J();jp=Wp(Dp),Gp=P.workerPid()});function Jp(){let e=an().pruneDeadEntries();e>0&&d.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function Ma(){Ut===null&&(Ut=setInterval(Jp,Na),Ut.unref(),d.debug("SYSTEM","Health checker started",{intervalMs:Na}))}function xa(){Ut!==null&&(clearInterval(Ut),Ut=null,d.debug("SYSTEM","Health checker stopped"))}var Na,Ut,La=S(()=>{"use strict";V();pr();Na=3e4,Ut=null});import{existsSync as Kp,readFileSync as Vp,rmSync as Da}from"fs";function Ps(){return Yp}function ln(t={}){let e=t.pidFilePath??Xp;if(!Kp(e))return"missing";let r=null;try{r=JSON.parse(Vp(e,"utf-8"))}catch(s){return s instanceof Error?d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),Da(e,{force:!0}),"invalid"}return Ls(r)&&r?((t.logAlive??!0)&&d.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(d.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),Da(e,{force:!0}),"stale")}var Xp,Ds,Yp,cn=S(()=>{"use strict";V();pr();Aa();La();J();Xp=P.workerPid(),Ds=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(),ln({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Ma()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){d.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,d.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?d.error("SYSTEM","Error during shutdown",{},s):d.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(o){o instanceof Error?d.debug("SYSTEM","Supervisor shutdown fallback failed",{},o):d.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(o)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{d.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}xa(),this.stopPromise=_a({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}},Yp=new Ds(an())});import qp from"path";import{homedir as zp}from"os";import{existsSync as mr,writeFileSync as hy,readFileSync as Zp,unlinkSync as Qp,mkdirSync as Ey,rmSync as Sy,statSync as by,utimesSync as $p}from"fs";import{execSync as em}from"child_process";function Pa(t){return t?/(^|[\\/])node(\.exe)?$/i.test(t.trim()):!1}function tm(t,e){let r=e==="win32"?`where ${t}`:`which ${t}`,n;try{n=em(r,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(o){return o instanceof Error?d.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},o):d.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r},new Error(String(o))),null}return n.split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0)||null}function un(t={}){let e=Object.keys(t).length===0;if(e&&Us!==void 0)return Us;let r=rm(t);return e&&r!==null&&(Us=r),r}function rm(t){let e=t.platform??process.platform,r=t.execPath??process.execPath;if(Pa(r))return r;let n=t.env??process.env,s=t.homeDirectory??zp(),o=t.pathExists??mr,i=t.lookupInPath??tm,a=e==="win32"?[n.NODE,qp.join(s,".nvm","current","bin","node.exe"),"node"]:[n.NODE,"/usr/local/bin/node","/opt/homebrew/bin/node","/usr/bin/node","node"];for(let l of a){let c=l?.trim();if(c&&(Pa(c)&&o(c)||c.toLowerCase()==="node"))return c}return i("node",e)}function Ua(){if(!mr(Pe))return null;try{return JSON.parse(Zp(Pe,"utf-8"))}catch(t){return t instanceof Error?d.warn("SYSTEM","Failed to parse PID file",{path:Pe},t):d.warn("SYSTEM","Failed to parse PID file",{path:Pe},new Error(String(t))),null}}function Fa(){if(mr(Pe))try{Qp(Pe)}catch(t){t instanceof Error?d.warn("SYSTEM","Failed to remove PID file",{path:Pe},t):d.warn("SYSTEM","Failed to remove PID file",{path:Pe},new Error(String(t)))}}function ct(t){return process.platform==="win32"?Math.round(t*2):t}function Wa(t,e,r={}){Ps().assertCanSpawn("worker daemon");let n=Rt({...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r}),s=un();if(!s){d.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 u=He(s,[t,"--daemon"],{detached:!0,stdio:"ignore",windowsHide:!0,env:n});if(u.pid===void 0){d.error("SYSTEM","Worker daemon spawn produced no PID on Windows",{runtimePath:s});return}return u.unref(),u.pid}catch(u){d.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:s},ya(u));return}let o="/usr/bin/setsid",i=mr(o),c=He(i?o:s,i?[s,t,"--daemon"]:[t,"--daemon"],{detached:!0,stdio:"ignore",env:n});if(c.pid!==void 0)return c.unref(),c.pid}function ja(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;d.debug("SYSTEM","Process not alive",{pid:t,code:r})}else d.debug("SYSTEM","Process not alive (non-Error thrown)",{pid:t},new Error(String(e)));return!1}}function Ga(){try{if(!mr(Pe))return;let t=new Date;$p(Pe,t,t)}catch{}}function Ba(){return ln({logAlive:!1})}var Oy,Pe,ky,Us,fr=S(()=>{"use strict";Pt();V();Ta();sn();cn();J();pr();Oy=P.dataDir(),Pe=P.workerPid(),ky=P.workerPort()});import My from"path";import nm from"net";import{readFileSync as Dy}from"fs";async function om(t,e,r="GET"){let n=await fetch(`http://127.0.0.1:${t}${e}`,{method:r,signal:AbortSignal.timeout(sm)}),s="";try{s=await n.text()}catch{}return{ok:n.ok,statusCode:n.status,body:s}}async function Ha(t){return new Promise(e=>{let r=nm.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 Ja(t,e,r,n){let s=Date.now();for(;Date.now()-s<r;){try{if((await om(t,e)).ok)return!0}catch(o){o instanceof Error?d.debug("SYSTEM",n,{},o):d.debug("SYSTEM",n,{error:String(o)})}await new Promise(o=>setTimeout(o,500))}return!1}function gr(t,e=3e4){return Ja(t,"/api/health",e,"Service not ready yet, will retry")}function hr(t,e=3e4){return Ja(t,"/api/readiness",e,"Worker not ready yet, will retry")}var sm,Fs=S(()=>{"use strict";V();J();sm=2500});import{dirname as im,join as am}from"path";import{mkdirSync as lm,readFileSync as cm,statSync as Ka,unlinkSync as Va,writeFileSync as um}from"fs";function Xa(){return am(lt(),"spawn.lock")}function Ws(){let t=Xa(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let r=0;r<2;r++)try{return lm(im(t),{recursive:!0}),um(t,e,{flag:"wx"}),!0}catch(n){if(n?.code!=="EEXIST")return!0;if(r>0)return!1;let o;try{o=Ka(t).mtimeMs}catch{continue}if(Date.now()-o<=dm)return!1;let i;try{i=Ka(t).mtimeMs}catch{continue}if(i!==o)return!1;try{Va(t)}catch{return!1}}return!1}function js(){let t=Xa();try{if(JSON.parse(cm(t,"utf-8")).pid!==process.pid)return;Va(t)}catch{}}var dm,Gs=S(()=>{"use strict";J();dm=6e4});import{existsSync as pm}from"fs";function mm(t){let e=Ua();return e&&typeof e.port=="number"&&ja(e.pid)?e.port:t}async function fm(t,e){let r=Date.now()+e;for(;Date.now()<r;){let n=mm(t);if(await gr(n,800))return n;await new Promise(s=>setTimeout(s,300))}return null}async function Ya(t,e){if(!e)return d.error("SYSTEM","ensureWorkerStarted called with empty workerScriptPath \u2014 caller bug"),"dead";if(!pm(e))return d.error("SYSTEM","ensureWorkerStarted: worker script not found at expected path \u2014 likely a partial install or build artifact missing",{workerScriptPath:e}),"dead";if(await gr(t,1e3)){let a=await hr(t,ct(oe.READINESS_WAIT));return a||d.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),d.info("SYSTEM","Worker already running and healthy (fast path)"),a?"ready":"warming"}if(Ba()==="alive"){if(d.info("SYSTEM","Worker PID file points to a live process, waiting for it to become healthy"),await gr(t,ct(oe.POST_SPAWN_WAIT))){let l=await hr(t,ct(oe.READINESS_WAIT));return d.info("SYSTEM","Worker became healthy while waiting on live PID"),l?"ready":"warming"}d.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"),Fa()}if(await Ha(t)){if(d.info("SYSTEM","Port in use, waiting for worker to become healthy"),await gr(t,ct(oe.PORT_IN_USE_WAIT))){let l=await hr(t,ct(oe.READINESS_WAIT));return d.info("SYSTEM","Worker is now healthy"),l?"ready":"warming"}d.warn("SYSTEM","Configured port in use but no healthy worker \u2014 spawning anyway (worker will pick a free ephemeral port)")}let s=Ws(),o=t;try{if(s){if(d.info("SYSTEM","Starting worker daemon",{workerScriptPath:e}),Wa(e,t)===void 0)return d.error("SYSTEM","Failed to spawn worker daemon"),"dead"}else d.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping duplicate spawn and waiting for its worker");let a=await fm(t,ct(oe.POST_SPAWN_WAIT));if(a===null)return d.warn("SYSTEM",s?"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";o=a}finally{s&&js()}let i=await hr(o,ct(oe.READINESS_WAIT));return i||d.warn("SYSTEM","Worker is alive but readiness timed out \u2014 proceeding anyway"),Ga(),d.info("SYSTEM",s?"Worker started successfully":"Worker is up (started by another launcher)"),i?"ready":"warming"}var qa=S(()=>{"use strict";V();ir();fr();Fs();Gs()});function wt(t){return t instanceof Error?t.message:typeof t=="string"?t:t&&typeof t=="object"&&"message"in t?String(t.message):String(t??"")}function za(t,e){for(let r of Bs)if(r.match(t,e))return r;return Bs[Bs.length-1]}var gm,hm,Bs,dn=S(()=>{"use strict";gm=t=>t.platform==="win32"?'Install Bun manually then re-run `npx keepmind install`. Windows: `winget install Oven-sh.Bun` (or `powershell -c "irm bun.sh/install.ps1 | iex"`).':"Install Bun manually then re-run `npx keepmind install`. macOS/Linux: `curl -fsSL https://bun.sh/install | bash` (or `brew install oven-sh/bun/bun`).",hm=t=>t.platform==="win32"?'Install uv manually then re-run `npx keepmind install`. Windows: `winget install astral-sh.uv` (or `powershell -c "irm https://astral.sh/uv/install.ps1 | iex"`).':"Install uv manually then re-run `npx keepmind install`. macOS/Linux: `curl -LsSf https://astral.sh/uv/install.sh | sh` (or `brew install uv`).",Bs=[{id:"bun-missing-after-install",severity:"ABORT",match:t=>{let e=wt(t);return e.includes("Bun executable not found")||e.includes("Bun installation completed but binary not found")||e.includes("Failed to install Bun")},remediation:gm},{id:"uv-missing-after-install",severity:"ABORT",match:t=>{let e=wt(t);return e.includes("uv executable not found")||e.includes("uv installed but version probe failed")||e.includes("uv binary not found")||e.includes("Failed to install uv")},remediation:hm},{id:"tree-sitter-eresolve",severity:"ABORT",match:t=>/\bERESOLVE\b/.test(wt(t)),remediation:()=>"ERESOLVE peer-dependency conflict in marketplace deps that --legacy-peer-deps could not resolve. Open an issue at https://github.com/ManuelStaggl/keepmind/issues with the conflicting peer ranges shown above."},{id:"bun-install-network-fail",severity:"SILENT_RETRY",match:t=>/error: failed to resolve/.test(wt(t)),remediation:()=>"bun install failed to resolve packages \u2014 check network connectivity and re-run `npx keepmind install`. Cached packages in ~/.bun/install/cache will be reused."},{id:"marketplace-dir-not-writable",severity:"ABORT",match:t=>/\b(EACCES|EPERM)\b/.test(wt(t)),remediation:t=>`Cannot write to the claude-mem data/marketplace directory under ${t.dataDir}. Check filesystem permissions or set CLAUDE_MEM_DATA_DIR to a writable path, then re-run.`},{id:"plugin-json-corrupt",severity:"ABORT",match:(t,e)=>e.component==="plugin-json"&&/Unexpected token|JSON|parse/i.test(wt(t)),remediation:()=>"Existing plugin.json is corrupt. Run `rm -rf ~/.claude/plugins/marketplaces/keepmind` and re-run `npx keepmind install`."},{id:"all-ides-failed",severity:"ABORT",match:(t,e)=>e.component==="all-ides",remediation:()=>"Every selected IDE integration failed. See the per-IDE errors above. Re-run with `--ide=<single>` to isolate the failure."},{id:"single-ide-failed",severity:"FAIL_LOUD_PER_IDE",match:(t,e)=>e.phase==="ide-install",remediation:()=>"Re-run `npx keepmind install --ide=<name>` to retry just this IDE. The captured stderr is shown above."},{id:"path-update-failed",severity:"WARN_CONTINUE",match:(t,e)=>e.component==="path-update",remediation:()=>"Could not auto-update PATH in your shell config. Add the printed export line manually and restart your shell."},{id:"auto-memory-toggle-failed",severity:"WARN_CONTINUE",match:(t,e)=>e.component==="auto-memory",remediation:()=>'Could not disable Claude Code auto-memory. Add `"CLAUDE_CODE_DISABLE_AUTO_MEMORY": "1"` to the env block in ~/.claude/settings.json.'},{id:"version-probe-transient",severity:"WARN_CONTINUE",match:(t,e)=>e.component.endsWith("-version-probe"),remediation:()=>"Could not verify the tool version after install \u2014 the installation is likely OK. Re-run `npx keepmind install` if features misbehave."},{id:"child-process-timeout",severity:"ABORT",match:t=>/timed out|ETIMEDOUT|SIGTERM|did not finish/i.test(wt(t)),remediation:()=>"An install command did not finish in time. Check network connectivity. On a slow host, raise the budget with CLAUDE_MEM_INSTALL_TIMEOUT_MS and re-run."},{id:"unknown-install-error",severity:"ABORT",match:()=>!0,remediation:t=>`An unexpected installer error occurred. Capture ${t.dataDir}/last-install-error.json and open an issue at https://github.com/ManuelStaggl/keepmind/issues.`}]});import{mkdirSync as Em,writeFileSync as Sm}from"fs";import{join as bm}from"path";function Qa(){return{warnings:[],failedIDEs:[],retryCount:{}}}function Ft(t){return t instanceof Error?t.message:typeof t=="string"?t:String(t??"")}function ym(t,e,r,n){try{Em(n,{recursive:!0});let s={severity:t.severity,categoryId:t.id,component:e.component,phase:e.phase,cause:Ft(e.cause),remediation:r,details:e.details??null,timestamp:new Date().toISOString()};Sm(bm(n,"last-install-error.json"),JSON.stringify(s,null,2))}catch{}}function ce(t,e,r){let n=lt(),s=za(e.cause,{component:e.component,phase:e.phase}),o=e.remediation??s.remediation({platform:process.platform,dataDir:n});switch(t){case"ABORT":throw ym(s,e,o,n),new Er(`${e.component} failed during ${e.phase}: ${Ft(e.cause)}`,{category:s,remediation:o,cause:e.cause});case"FAIL_LOUD_PER_IDE":{let i=e.ide??e.component;r.failedIDEs.includes(i)||r.failedIDEs.push(i),r.warnings.push({component:i,message:e.details?`${Ft(e.cause)}
101
+ ${e.details}`:Ft(e.cause),remediation:o});return}case"WARN_CONTINUE":{r.warnings.push({component:e.component,message:Ft(e.cause),remediation:o});return}case"SILENT_RETRY":{let i=(r.retryCount[e.component]??0)+1;r.retryCount[e.component]=i,i>1&&r.warnings.push({component:e.component,message:Ft(e.cause),remediation:o});return}}}function Hs(t,e){if(t.warnings.length!==0){e(""),e("Warnings & remediation:");for(let r of t.warnings)e(` \u2022 [${r.component}] ${r.message}`),r.remediation&&r.remediation!=="No action required."&&e(` \u2192 ${r.remediation}`)}}var Er,Js=S(()=>{"use strict";dn();J();Er=class extends Error{category;remediation;constructor(e,r){super(e,{cause:r.cause}),this.name="InstallAbortError",this.category=r.category,this.remediation=r.remediation}}});import{existsSync as ut,readFileSync as Vs,writeFileSync as Tm}from"fs";import{exec as vm,execSync as pn,spawnSync as mn}from"child_process";import{createRequire as Cm}from"module";import{join as Oe}from"path";import{homedir as Wt}from"os";function $a(){return j?'Install Bun manually: `winget install Oven-sh.Bun` (or `powershell -c "irm bun.sh/install.ps1 | iex"`), then re-run `npx keepmind install`.':"Install Bun manually: `curl -fsSL https://bun.sh/install | bash` (or `brew install oven-sh/bun/bun`), then re-run `npx keepmind install`."}function el(){return j?'Install uv manually: `winget install astral-sh.uv` (or `powershell -c "irm https://astral.sh/uv/install.ps1 | iex"`), then re-run `npx keepmind install`.':"Install uv manually: `curl -LsSf https://astral.sh/uv/install.sh | sh` (or `brew install uv`), then re-run `npx keepmind install`."}function tl(){try{if(!ut(Je))return!1;let t=JSON.parse(Vs(Je,"utf-8"));if(!t||typeof t!="object")return!1;let e=t,r=e.env&&typeof e.env=="object"?e.env:{},n=e.CLAUDE_MEM_DISABLE_VECTOR_SEARCH??r.CLAUDE_MEM_DISABLE_VECTOR_SEARCH;return n===!0||n==="true"||n==="1"}catch{return!1}}function ol(t){return Oe(t,".install-version")}function Xs(){try{if(mn("bun",["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j}).status===0)return"bun"}catch{}return nl.find(ut)||null}function il(){return Xs()!==null}function Ks(){let t=Xs();if(!t)return null;try{let e=mn(t,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j});return e.status===0?e.stdout.trim():null}catch{return null}}function Ys(){try{if(mn("uv",["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j}).status===0)return"uv"}catch{}return sl.find(ut)||null}function al(){return Ys()!==null}function rl(){let t=Ys();if(!t)return null;try{let e=mn(t,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:j});return e.status===0?e.stdout.trim():null}catch{return null}}function qs(t){if(t&&typeof t=="object"){let e=t,r=[];e.message&&r.push(e.message);let n=e.stderr?e.stderr.toString().trim():"";n&&r.push(`stderr: ${n}`);let s=e.stdout?e.stdout.toString().trim():"";return!n&&s&&r.push(`stdout: ${s}`),r.join(`
102
102
  `)}return String(t)}function wm(){try{if(j?pn('powershell -c "irm bun.sh/install.ps1 | iex"',{stdio:"pipe",timeout:Sr,shell:process.env.ComSpec??"cmd.exe"}):pn("curl -fsSL https://bun.sh/install | bash",{stdio:"pipe",timeout:Sr,shell:"/bin/bash"}),!il())throw new Error("Bun installation completed but binary not found. Please restart your terminal and try again.")}catch(t){let e=j?` - winget install Oven-sh.Bun
103
103
  - Or: powershell -c "irm bun.sh/install.ps1 | iex"`:` - curl -fsSL https://bun.sh/install | bash
104
104
  - Or: brew install oven-sh/bun/bun`;throw new Error(`Failed to install Bun. Please install manually:
@@ -109,13 +109,13 @@ Underlying error: ${qs(t)}`)}}function Im(){try{if(j?pn('powershell -ExecutionPo
109
109
  - Or: brew install uv (macOS)`;throw new Error(`Failed to install uv. Please install manually:
110
110
  ${e}
111
111
  Then restart your terminal and try again.
112
- Underlying error: ${qs(t)}`)}}function km(t){let e=JSON.parse(Vs(Oe(t,"package.json"),"utf-8")),r=Object.keys(e.dependencies||{}),n=Oe(t,"node_modules"),s=Rm(Oe(n,"noop.js")),o=[n],i=[];for(let a of r)try{s.resolve(a,{paths:o})}catch{try{s.resolve(`${a}/package.json`,{paths:o})}catch{i.push(a)}}if(r.includes("zod"))for(let a of Om)try{s.resolve(a,{paths:o})}catch{i.push(a)}if(i.length>0)throw new Error(`Post-install check failed: unresolvable modules: ${i.join(", ")}`)}function ll(t){return t??{warnings:[],failedIDEs:[],retryCount:{}}}async function It(t){let e=ll(t);if(!il())try{wm()}catch(s){ce("ABORT",{component:"bun-install",phase:"setup-runtime",cause:s,remediation:$a()},e)}let r=Xs();if(r||(r=nl.find(ut)??null),!r)throw ce("ABORT",{component:"bun-install",phase:"setup-runtime",cause:new Error("Bun executable not found after auto-install attempt"),remediation:$a()},e),new Error("unreachable");let n=Ks();return n||(await new Promise(s=>setTimeout(s,1e3)),n=Ks()),n?{bunPath:r,version:n}:(ce("WARN_CONTINUE",{component:"bun-version-probe",phase:"setup-runtime",cause:new Error(`Bun at ${r} did not respond to --version after retry`)},e),{bunPath:r,version:"unknown"})}async function zs(t,e={}){let r=ll(t);if(!al())try{Im()}catch(o){if(e.allowVectorSearchOptOut&&tl())return ce("WARN_CONTINUE",{component:"uv-install",phase:"setup-runtime",cause:o},r),{uvPath:"",version:"unknown"};ce("ABORT",{component:"uv-install",phase:"setup-runtime",cause:o,remediation:el()},r)}let n=Ys();if(n||(n=sl.find(ut)??null),!n){if(e.allowVectorSearchOptOut&&tl())return ce("WARN_CONTINUE",{component:"uv-install",phase:"setup-runtime",cause:new Error("uv binary not found after install; vector search disabled \u2014 continuing.")},r),{uvPath:"",version:"unknown"};throw ce("ABORT",{component:"uv-install",phase:"setup-runtime",cause:new Error("uv binary not found after auto-install attempt"),remediation:el()},r),new Error("unreachable")}let s=rl();return s||(await new Promise(o=>setTimeout(o,1e3)),s=rl()),s?{uvPath:n,version:s}:(ce("WARN_CONTINUE",{component:"uv-version-probe",phase:"setup-runtime",cause:new Error(`uv at ${n} did not respond to --version after retry`)},r),{uvPath:n,version:"unknown"})}async function br(t,e){if(!ut(Oe(t,"package.json")))throw new Error(`installPluginDependencies: no package.json at ${t}`);let r=j&&e.includes(" ")?`"${e}"`:e;try{await new Promise((n,s)=>{vm(`${r} install --frozen-lockfile --ignore-scripts`,{cwd:t,timeout:Sr,maxBuffer:16*1024*1024,...j?{shell:process.env.ComSpec??"cmd.exe"}:{}},(o,i,a)=>o?s(Object.assign(o,{stdout:i,stderr:a})):n())})}catch(n){throw new Error(`bun install failed in ${t}
113
- ${qs(n)}`)}km(t)}function _m(t){let e=ol(t);if(!ut(e))return null;let r=Vs(e,"utf-8");try{let s=JSON.parse(r);if(s&&typeof s=="object"&&typeof s.version=="string")return s}catch{}let n=r.trim();return Cm.test(n)?{version:n.replace(/^v/i,"")}:null}function Zs(t,e,r,n){let s={version:e,bun:r,uv:n,installedAt:new Date().toISOString()};Tm(ol(t),JSON.stringify(s))}function cl(t,e){if(!ut(Oe(t,"node_modules")))return!1;let r=_m(t);if(!r||r.version!==e)return!1;let n=Ks();return!(n&&!r.bun||!n&&r.bun||n&&r.bun&&n!==r.bun)}var Sr,nl,sl,Cm,Om,ul=S(()=>{"use strict";dn();Js();J();Ae();Sr=(()=>{let t=process.env.CLAUDE_MEM_INSTALL_TIMEOUT_MS;return t&&Number.isFinite(Number(t))?Number(t):300*1e3})();nl=j?[Oe(Wt(),".bun","bin","bun.exe")]:[Oe(Wt(),".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun"],sl=j?[Oe(Wt(),".local","bin","uv.exe"),Oe(Wt(),".cargo","bin","uv.exe")]:[Oe(Wt(),".local","bin","uv"),Oe(Wt(),".cargo","bin","uv"),"/usr/local/bin/uv","/opt/homebrew/bin/uv"],Cm=/^v?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;Om=["zod/v3","zod/v4","zod/v4-mini"]});var dt,dl=S(()=>{"use strict";dt={compressed:"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",frameCount:192,width:128,height:36,frameDelay:22}});import{inflateRawSync as Am}from"zlib";function Dm(t,e=1){if(!t)return"\x1B[38;5;208m";let r=Math.min(255,Math.round(230*e)),n=Math.min(255,Math.round(115*e)),s=Math.min(255,Math.round(70*e));return`\x1B[38;2;${r};${n};${s}m`}function Pm(t,e=1){if(!t)return"\x1B[38;5;215m";let r=Math.min(255,Math.round(255*e)),n=Math.min(255,Math.round(180*e)),s=Math.min(255,Math.round(122*e));return`\x1B[38;2;${r};${n};${s}m`}function Um(){if(yr)return yr;try{yr=Am(Buffer.from(dt.compressed,"base64")).toString("utf8").split(Lm).filter(Boolean)}catch{yr=[]}return yr}function Fm(t,e,r=1){let n=Dm(e,r),s=Pm(e,r),o=n,i=0,a=!1;for(;i<t.length;){let l=t[i];if(l==="<"){let c=t[i+1]==="/";for(;i<t.length&&t[i]!==">";)i++;i++,a=!c,o+=a?s:n;continue}o+=l,i++}return o+ml}function Wm(){return process.env.COLORTERM==="truecolor"||process.env.COLORTERM==="24bit"}function jm(t,e){let r=Qs[t],n=dt.width,s=r.slice(0,Math.min(Ot,e)).padEnd(Ot," "),o=Math.max(0,Math.floor((n-Ot)/2));return" ".repeat(o)+`\x1B[1;97m${s}\x1B[0m`+" ".repeat(Math.max(0,n-o-Ot))}function Gm(t){let e=dt.width,r=Math.max(0,Math.floor((e-t.length)/2));return" ".repeat(r)+`\x1B[2;37m${t}\x1B[0m`+" ".repeat(Math.max(0,e-r-t.length))}function Bm(){return!process.stdout.isTTY||process.env.CI||process.env.CLAUDE_MEM_NO_BANNER||process.env.NO_COLOR?!1:(process.stdout.columns??0)>=dt.width}async function hl(){if(!Bm())return;let t=Wm(),e=Um();if(e.length===0)return;let r=!1,n=()=>{r=!0};process.stdout.on("resize",n),process.stdout.write(xm),process.stdout.write(Nm),process.stdout.write(`
112
+ Underlying error: ${qs(t)}`)}}function km(t){let e=JSON.parse(Vs(Oe(t,"package.json"),"utf-8")),r=Object.keys(e.dependencies||{}),n=Oe(t,"node_modules"),s=Cm(Oe(n,"noop.js")),o=[n],i=[];for(let a of r)try{s.resolve(a,{paths:o})}catch{try{s.resolve(`${a}/package.json`,{paths:o})}catch{i.push(a)}}if(r.includes("zod"))for(let a of Om)try{s.resolve(a,{paths:o})}catch{i.push(a)}if(i.length>0)throw new Error(`Post-install check failed: unresolvable modules: ${i.join(", ")}`)}function ll(t){return t??{warnings:[],failedIDEs:[],retryCount:{}}}async function It(t){let e=ll(t);if(!il())try{wm()}catch(s){ce("ABORT",{component:"bun-install",phase:"setup-runtime",cause:s,remediation:$a()},e)}let r=Xs();if(r||(r=nl.find(ut)??null),!r)throw ce("ABORT",{component:"bun-install",phase:"setup-runtime",cause:new Error("Bun executable not found after auto-install attempt"),remediation:$a()},e),new Error("unreachable");let n=Ks();return n||(await new Promise(s=>setTimeout(s,1e3)),n=Ks()),n?{bunPath:r,version:n}:(ce("WARN_CONTINUE",{component:"bun-version-probe",phase:"setup-runtime",cause:new Error(`Bun at ${r} did not respond to --version after retry`)},e),{bunPath:r,version:"unknown"})}async function zs(t,e={}){let r=ll(t);if(!al())try{Im()}catch(o){if(e.allowVectorSearchOptOut&&tl())return ce("WARN_CONTINUE",{component:"uv-install",phase:"setup-runtime",cause:o},r),{uvPath:"",version:"unknown"};ce("ABORT",{component:"uv-install",phase:"setup-runtime",cause:o,remediation:el()},r)}let n=Ys();if(n||(n=sl.find(ut)??null),!n){if(e.allowVectorSearchOptOut&&tl())return ce("WARN_CONTINUE",{component:"uv-install",phase:"setup-runtime",cause:new Error("uv binary not found after install; vector search disabled \u2014 continuing.")},r),{uvPath:"",version:"unknown"};throw ce("ABORT",{component:"uv-install",phase:"setup-runtime",cause:new Error("uv binary not found after auto-install attempt"),remediation:el()},r),new Error("unreachable")}let s=rl();return s||(await new Promise(o=>setTimeout(o,1e3)),s=rl()),s?{uvPath:n,version:s}:(ce("WARN_CONTINUE",{component:"uv-version-probe",phase:"setup-runtime",cause:new Error(`uv at ${n} did not respond to --version after retry`)},r),{uvPath:n,version:"unknown"})}async function br(t,e){if(!ut(Oe(t,"package.json")))throw new Error(`installPluginDependencies: no package.json at ${t}`);let r=j&&e.includes(" ")?`"${e}"`:e;try{await new Promise((n,s)=>{vm(`${r} install --frozen-lockfile --ignore-scripts`,{cwd:t,timeout:Sr,maxBuffer:16*1024*1024,...j?{shell:process.env.ComSpec??"cmd.exe"}:{}},(o,i,a)=>o?s(Object.assign(o,{stdout:i,stderr:a})):n())})}catch(n){throw new Error(`bun install failed in ${t}
113
+ ${qs(n)}`)}km(t)}function _m(t){let e=ol(t);if(!ut(e))return null;let r=Vs(e,"utf-8");try{let s=JSON.parse(r);if(s&&typeof s=="object"&&typeof s.version=="string")return s}catch{}let n=r.trim();return Rm.test(n)?{version:n.replace(/^v/i,"")}:null}function Zs(t,e,r,n){let s={version:e,bun:r,uv:n,installedAt:new Date().toISOString()};Tm(ol(t),JSON.stringify(s))}function cl(t,e){if(!ut(Oe(t,"node_modules")))return!1;let r=_m(t);if(!r||r.version!==e)return!1;let n=Ks();return!(n&&!r.bun||!n&&r.bun||n&&r.bun&&n!==r.bun)}var Sr,nl,sl,Rm,Om,ul=S(()=>{"use strict";dn();Js();J();Ae();Sr=(()=>{let t=process.env.CLAUDE_MEM_INSTALL_TIMEOUT_MS;return t&&Number.isFinite(Number(t))?Number(t):300*1e3})();nl=j?[Oe(Wt(),".bun","bin","bun.exe")]:[Oe(Wt(),".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun"],sl=j?[Oe(Wt(),".local","bin","uv.exe"),Oe(Wt(),".cargo","bin","uv.exe")]:[Oe(Wt(),".local","bin","uv"),Oe(Wt(),".cargo","bin","uv"),"/usr/local/bin/uv","/opt/homebrew/bin/uv"],Rm=/^v?\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;Om=["zod/v3","zod/v4","zod/v4-mini"]});var dt,dl=S(()=>{"use strict";dt={compressed:"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",frameCount:192,width:128,height:36,frameDelay:22}});import{inflateRawSync as Am}from"zlib";function Dm(t,e=1){if(!t)return"\x1B[38;5;208m";let r=Math.min(255,Math.round(230*e)),n=Math.min(255,Math.round(115*e)),s=Math.min(255,Math.round(70*e));return`\x1B[38;2;${r};${n};${s}m`}function Pm(t,e=1){if(!t)return"\x1B[38;5;215m";let r=Math.min(255,Math.round(255*e)),n=Math.min(255,Math.round(180*e)),s=Math.min(255,Math.round(122*e));return`\x1B[38;2;${r};${n};${s}m`}function Um(){if(yr)return yr;try{yr=Am(Buffer.from(dt.compressed,"base64")).toString("utf8").split(Lm).filter(Boolean)}catch{yr=[]}return yr}function Fm(t,e,r=1){let n=Dm(e,r),s=Pm(e,r),o=n,i=0,a=!1;for(;i<t.length;){let l=t[i];if(l==="<"){let c=t[i+1]==="/";for(;i<t.length&&t[i]!==">";)i++;i++,a=!c,o+=a?s:n;continue}o+=l,i++}return o+ml}function Wm(){return process.env.COLORTERM==="truecolor"||process.env.COLORTERM==="24bit"}function jm(t,e){let r=Qs[t],n=dt.width,s=r.slice(0,Math.min(Ot,e)).padEnd(Ot," "),o=Math.max(0,Math.floor((n-Ot)/2));return" ".repeat(o)+`\x1B[1;97m${s}\x1B[0m`+" ".repeat(Math.max(0,n-o-Ot))}function Gm(t){let e=dt.width,r=Math.max(0,Math.floor((e-t.length)/2));return" ".repeat(r)+`\x1B[2;37m${t}\x1B[0m`+" ".repeat(Math.max(0,e-r-t.length))}function Bm(){return!process.stdout.isTTY||process.env.CI||process.env.CLAUDE_MEM_NO_BANNER||process.env.NO_COLOR?!1:(process.stdout.columns??0)>=dt.width}async function hl(){if(!Bm())return;let t=Wm(),e=Um();if(e.length===0)return;let r=!1,n=()=>{r=!0};process.stdout.on("resize",n),process.stdout.write(xm),process.stdout.write(Nm),process.stdout.write(`
114
114
  `.repeat(pl)),process.stdout.write(`\x1B[${pl}A`),process.stdout.write("\x1B[s");let s=" ".repeat(dt.width),o=(i,a,l,c=1)=>{process.stdout.write("\x1B[u"),process.stdout.write(Fm(i,t,c)),process.stdout.write(`
115
115
  `);for(let u=0;u<fl;u++)process.stdout.write(jm(u,a)),process.stdout.write(`
116
116
  `);for(let u=0;u<gl;u++)process.stdout.write(s),process.stdout.write(`
117
117
  `);process.stdout.write(Gm(l))};try{for(let c=0;c<e.length;c++){if(r)return;o(e[c],0,""),await Tr(dt.frameDelay)}let i=e[e.length-1],a="persistent memory across sessions",l=14;for(let c=1;c<=l;c++){if(r)return;let u=Math.ceil(Ot*(c/l));o(i,u,""),await Tr(45)}for(let c=1;c<=6;c++){if(r)return;let u=Math.ceil(a.length*(c/6));o(i,Ot,a.slice(0,u)),await Tr(33)}for(let c of[.85,.95,1]){if(r)return;o(i,Ot,a,c),await Tr(100)}await Tr(150)}finally{process.stdout.off("resize",n),process.stdout.write(ml),process.stdout.write(Mm),process.stdout.write(`
118
- `)}}var Nm,Mm,xm,ml,Lm,yr,Qs,fl,Ot,gl,pl,Tr,El=S(()=>{"use strict";dl();Nm="\x1B[?25l",Mm="\x1B[?25h",xm="\x1B[2J\x1B[3J\x1B[H",ml="\x1B[0m",Lm="";yr=null;Qs=[" _ _ "," ___| | __ _ _ _ __| | ___ _ __ ___ ___ _ __ ___ "," / __| |/ _` | | | |/ _` |/ _ \\_____| '_ ` _ \\ / _ \\ '_ ` _ \\ ","| (__| | (_| | |_| | (_| | __/_____| | | | | | __/ | | | | |"," \\___|_|\\__,_|\\__,_|\\__,_|\\___| |_| |_| |_|\\___|_| |_| |_|"],fl=Qs.length,Ot=Qs[0].length,gl=1,pl=dt.height+fl+gl+1;Tr=t=>new Promise(e=>setTimeout(e,t))});import{spawn as Hm}from"child_process";function Vm(t){let e=process.env.CLAUDE_MEM_INSTALL_TIMEOUT_MS;return e&&Number.isFinite(Number(e))?Number(e):t?Jm:Km}function Sl(t){return/\bERESOLVE\b/.test(t)||/code ERESOLVE/.test(t)}function bl(t){let e=t.search(/While resolving:/);return e===-1?t.trim():t.slice(e).trim()}function $s(t,e,r=!0){return new Promise(n=>{let s=Hm("npm",e,{cwd:t,stdio:["ignore","pipe","pipe"],...j?{shell:process.env.ComSpec??"cmd.exe"}:{}}),o="",i="",a=!1,l=null,c=setTimeout(()=>{a=!0,s.kill("SIGTERM")},Vm(r));s.stdout?.on("data",f=>{o+=f.toString()}),s.stderr?.on("data",f=>{i+=f.toString()});let u=!1,m=f=>{u||(u=!0,clearTimeout(c),n({code:typeof f=="number"?f:a?124:1,stdout:o,stderr:i||(l?String(l.message):""),timedOut:a}))};s.on("error",f=>{l=f,m(null)}),s.on("close",f=>{m(f)})})}var Jm,Km,yl=S(()=>{"use strict";Ae();Jm=300*1e3,Km=120*1e3});async function fn(t,e=1e4){let r=`http://127.0.0.1:${t}`,n=!1;try{await fetch(`${r}/api/admin/shutdown`,{method:"POST",signal:AbortSignal.timeout(5e3)}),n=!0}catch{return{workerWasRunning:!1}}let s=500,o=Math.ceil(e/s);for(let i=0;i<o;i++){await new Promise(a=>setTimeout(a,s));try{await fetch(`${r}/api/health`,{signal:AbortSignal.timeout(1e3)})}catch(a){if(a instanceof Error&&a.name==="AbortError")continue;return{workerWasRunning:n}}}return{workerWasRunning:n}}var eo=S(()=>{"use strict"});import{execSync as Xm}from"child_process";import{existsSync as Ve,readdirSync as Ym}from"fs";import{homedir as Tl}from"os";import{join as Xe}from"path";function vr(t){try{return Xm(`${j?"where":"which"} ${t}`,{stdio:"pipe"}),!0}catch(e){return process.env.DEBUG&&console.error(`[ide-detection] ${t} not in PATH:`,e instanceof Error?e.message:String(e)),!1}}function qm(t){let e=Xe(Tl(),".vscode","extensions");if(!Ve(e))return!1;try{return Ym(e).some(n=>n.toLowerCase().includes(t.toLowerCase()))}catch(r){return console.warn("[ide-detection] Failed to read VS Code extensions directory:",r instanceof Error?r.message:String(r)),!1}}function jt(){let t=Tl();return[{id:"claude-code",label:"Claude Code",detected:vr("claude"),supported:!0,hint:"recommended"},{id:"gemini-cli",label:"Gemini CLI",detected:Ve(Xe(t,".gemini")),supported:!0},{id:"opencode",label:"OpenCode",detected:Ve(Xe(t,".config","opencode"))||vr("opencode"),supported:!0,hint:"plugin-based integration"},{id:"windsurf",label:"Windsurf",detected:Ve(Xe(t,".codeium","windsurf")),supported:!0},{id:"codex-cli",label:"Codex CLI",detected:Ve(Xe(t,".codex")),supported:!0,hint:"native hooks integration"},{id:"cursor",label:"Cursor",detected:Ve(Xe(t,".cursor")),supported:!0,hint:"hooks + MCP integration"},{id:"copilot-cli",label:"Copilot CLI",detected:vr("copilot"),supported:!0,hint:"MCP-based integration"},{id:"antigravity",label:"Antigravity",detected:Ve(Xe(t,".gemini","antigravity")),supported:!0,hint:"MCP-based integration"},{id:"goose",label:"Goose",detected:Ve(Xe(t,".config","goose"))||vr("goose"),supported:!0,hint:"MCP-based integration"},{id:"roo-code",label:"Roo Code",detected:qm("roo-code"),supported:!0,hint:"MCP-based integration"},{id:"warp",label:"Warp",detected:Ve(Xe(t,".warp"))||vr("warp"),supported:!0,hint:"MCP-based integration"}]}var vl=S(()=>{"use strict";Ae()});var Rl=S(()=>{"use strict";Rt();J()});var Cl=S(()=>{"use strict";V();cn()});var wl=S(()=>{"use strict";fr();Fs();Cl()});import zm from"path";import{readFileSync as Zm,existsSync as Qm,writeFileSync as jT,renameSync as GT,mkdirSync as BT}from"fs";function to(t,e,r){let n=process.env[t];if(n){let s=parseInt(n,10);if(Number.isFinite(s)&&s>=r.min&&s<=r.max)return s;d.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max})}return e}async function ef(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}}function tf(){return zm.join(re.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function rf(t){if(!Number.isInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}function nf(){try{let t=P.workerPid();if(!Qm(t))return null;let e=JSON.parse(Zm(t,"utf-8"));return typeof e.pid!="number"||typeof e.port!="number"||!rf(e.pid)?null:e.port}catch{return null}}function ro(){return En!==null||(En=re.loadFromFile(tf())),En}function Il(t,e){if(!t)return null;let r=parseInt(t,10);return Number.isFinite(r)&&r>=e.min&&r<=e.max?r:null}function sf(t,e,r){let n=process.env[t];if(n!==void 0){let i=Il(n,r);return i!==null?i:(d.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max}),e)}let s=ro()[t],o=Il(s,r);return o!==null?o:(d.warn("SYSTEM",`Invalid ${t} in settings.json, using default`,{value:s,min:r.min,max:r.max}),e)}function of(){if(gn!==null)return gn;let t=ro();return gn=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),gn}function Rr(){let t=nf();return t!==null?t:of()}function af(){return hn!==null||(hn=ro().CLAUDE_MEM_WORKER_HOST),hn}function lf(){return Sn!==null||(Sn=sf("CLAUDE_MEM_API_TIMEOUT_MS",vt(oe.API_REQUEST),$m)),Sn}function cf(t){return`http://${af()}:${Rr()}${t}`}function bn(t,e={}){let r=e.method??"GET",n=e.timeoutMs??lf(),s=cf(t),o={method:r};return e.headers&&(o.headers=e.headers),e.body&&(o.body=e.body),n>0?ef(s,o,n):fetch(s,o)}var ev,tv,rv,$m,gn,hn,En,Sn,yn=S(()=>{"use strict";Pt();V();ir();Rt();J();Rl();cn();Cs();wl();fr();Gs();ev=to("CLAUDE_MEM_HEALTH_TIMEOUT_MS",vt(oe.HEALTH_CHECK),{min:500,max:3e5}),tv=to("CLAUDE_MEM_API_TIMEOUT_MS",vt(oe.API_REQUEST),{min:500,max:3e5}),rv=to("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",vt(oe.HOOK_READINESS_WAIT),{min:0,max:3e5}),$m={min:500,max:3e5};gn=null,hn=null,En=null,Sn=null});function Tn(t){if(!t)return t;let e="";for(let r of t){let n=r.codePointAt(0);if(!(n>=55296&&n<=57343)){if(n<=65535){e+=r;continue}e+=uf[r]??df}}return e}var uf,df,no=S(()=>{"use strict";uf={"\u{1F534}":"\u25CF","\u{1F7E3}":"\u25C6","\u{1F504}":"\u21BB","\u{1F535}":"\u25CB","\u{1F6A8}":"\u26A0","\u{1F510}":"\u26B7","\u{1F6E0}":"\u2692","\u{1F50D}":"\u2315","\u{1F3AF}":"\u25CE","\u{1F4AC}":"\u201D","\u{1F9E0}":"\u25C8"},df="\u2022"});import{existsSync as pf,readFileSync as mf,writeFileSync as Ol,mkdirSync as kl,renameSync as ff}from"fs";import{join as so}from"path";function _l(t){try{return pf(t)?JSON.parse(mf(t,"utf-8")):{}}catch(e){return d.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function Al(t,e){let r=so(t,"..");kl(r,{recursive:!0}),Ol(t,JSON.stringify(e,null,2))}function oo(t,e){let r=so(t,".cursor","rules"),n=so(r,"claude-mem-context.mdc"),s=`${n}.tmp`;kl(r,{recursive:!0});let o=`---
118
+ `)}}var Nm,Mm,xm,ml,Lm,yr,Qs,fl,Ot,gl,pl,Tr,El=S(()=>{"use strict";dl();Nm="\x1B[?25l",Mm="\x1B[?25h",xm="\x1B[2J\x1B[3J\x1B[H",ml="\x1B[0m",Lm="";yr=null;Qs=[" _ _ "," ___| | __ _ _ _ __| | ___ _ __ ___ ___ _ __ ___ "," / __| |/ _` | | | |/ _` |/ _ \\_____| '_ ` _ \\ / _ \\ '_ ` _ \\ ","| (__| | (_| | |_| | (_| | __/_____| | | | | | __/ | | | | |"," \\___|_|\\__,_|\\__,_|\\__,_|\\___| |_| |_| |_|\\___|_| |_| |_|"],fl=Qs.length,Ot=Qs[0].length,gl=1,pl=dt.height+fl+gl+1;Tr=t=>new Promise(e=>setTimeout(e,t))});import{spawn as Hm}from"child_process";function Vm(t){let e=process.env.CLAUDE_MEM_INSTALL_TIMEOUT_MS;return e&&Number.isFinite(Number(e))?Number(e):t?Jm:Km}function Sl(t){return/\bERESOLVE\b/.test(t)||/code ERESOLVE/.test(t)}function bl(t){let e=t.search(/While resolving:/);return e===-1?t.trim():t.slice(e).trim()}function $s(t,e,r=!0){return new Promise(n=>{let s=Hm("npm",e,{cwd:t,stdio:["ignore","pipe","pipe"],...j?{shell:process.env.ComSpec??"cmd.exe"}:{}}),o="",i="",a=!1,l=null,c=setTimeout(()=>{a=!0,s.kill("SIGTERM")},Vm(r));s.stdout?.on("data",f=>{o+=f.toString()}),s.stderr?.on("data",f=>{i+=f.toString()});let u=!1,m=f=>{u||(u=!0,clearTimeout(c),n({code:typeof f=="number"?f:a?124:1,stdout:o,stderr:i||(l?String(l.message):""),timedOut:a}))};s.on("error",f=>{l=f,m(null)}),s.on("close",f=>{m(f)})})}var Jm,Km,yl=S(()=>{"use strict";Ae();Jm=300*1e3,Km=120*1e3});async function fn(t,e=1e4){let r=`http://127.0.0.1:${t}`,n=!1;try{await fetch(`${r}/api/admin/shutdown`,{method:"POST",signal:AbortSignal.timeout(5e3)}),n=!0}catch{return{workerWasRunning:!1}}let s=500,o=Math.ceil(e/s);for(let i=0;i<o;i++){await new Promise(a=>setTimeout(a,s));try{await fetch(`${r}/api/health`,{signal:AbortSignal.timeout(1e3)})}catch(a){if(a instanceof Error&&a.name==="AbortError")continue;return{workerWasRunning:n}}}return{workerWasRunning:n}}var eo=S(()=>{"use strict"});import{execSync as Xm}from"child_process";import{existsSync as Ve,readdirSync as Ym}from"fs";import{homedir as Tl}from"os";import{join as Xe}from"path";function vr(t){try{return Xm(`${j?"where":"which"} ${t}`,{stdio:"pipe"}),!0}catch(e){return process.env.DEBUG&&console.error(`[ide-detection] ${t} not in PATH:`,e instanceof Error?e.message:String(e)),!1}}function qm(t){let e=Xe(Tl(),".vscode","extensions");if(!Ve(e))return!1;try{return Ym(e).some(n=>n.toLowerCase().includes(t.toLowerCase()))}catch(r){return console.warn("[ide-detection] Failed to read VS Code extensions directory:",r instanceof Error?r.message:String(r)),!1}}function jt(){let t=Tl();return[{id:"claude-code",label:"Claude Code",detected:vr("claude"),supported:!0,hint:"recommended"},{id:"gemini-cli",label:"Gemini CLI",detected:Ve(Xe(t,".gemini")),supported:!0},{id:"opencode",label:"OpenCode",detected:Ve(Xe(t,".config","opencode"))||vr("opencode"),supported:!0,hint:"plugin-based integration"},{id:"windsurf",label:"Windsurf",detected:Ve(Xe(t,".codeium","windsurf")),supported:!0},{id:"codex-cli",label:"Codex CLI",detected:Ve(Xe(t,".codex")),supported:!0,hint:"native hooks integration"},{id:"cursor",label:"Cursor",detected:Ve(Xe(t,".cursor")),supported:!0,hint:"hooks + MCP integration"},{id:"copilot-cli",label:"Copilot CLI",detected:vr("copilot"),supported:!0,hint:"MCP-based integration"},{id:"antigravity",label:"Antigravity",detected:Ve(Xe(t,".gemini","antigravity")),supported:!0,hint:"MCP-based integration"},{id:"goose",label:"Goose",detected:Ve(Xe(t,".config","goose"))||vr("goose"),supported:!0,hint:"MCP-based integration"},{id:"roo-code",label:"Roo Code",detected:qm("roo-code"),supported:!0,hint:"MCP-based integration"},{id:"warp",label:"Warp",detected:Ve(Xe(t,".warp"))||vr("warp"),supported:!0,hint:"MCP-based integration"}]}var vl=S(()=>{"use strict";Ae()});var Cl=S(()=>{"use strict";Ct();J()});var Rl=S(()=>{"use strict";V();cn()});var wl=S(()=>{"use strict";fr();Fs();Rl()});import zm from"path";import{readFileSync as Zm,existsSync as Qm,writeFileSync as jT,renameSync as GT,mkdirSync as BT}from"fs";function to(t,e,r){let n=process.env[t];if(n){let s=parseInt(n,10);if(Number.isFinite(s)&&s>=r.min&&s<=r.max)return s;d.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max})}return e}async function ef(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}}function tf(){return zm.join(re.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function rf(t){if(!Number.isInteger(t)||t<=0)return!1;try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}function nf(){try{let t=P.workerPid();if(!Qm(t))return null;let e=JSON.parse(Zm(t,"utf-8"));return typeof e.pid!="number"||typeof e.port!="number"||!rf(e.pid)?null:e.port}catch{return null}}function ro(){return En!==null||(En=re.loadFromFile(tf())),En}function Il(t,e){if(!t)return null;let r=parseInt(t,10);return Number.isFinite(r)&&r>=e.min&&r<=e.max?r:null}function sf(t,e,r){let n=process.env[t];if(n!==void 0){let i=Il(n,r);return i!==null?i:(d.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max}),e)}let s=ro()[t],o=Il(s,r);return o!==null?o:(d.warn("SYSTEM",`Invalid ${t} in settings.json, using default`,{value:s,min:r.min,max:r.max}),e)}function of(){if(gn!==null)return gn;let t=ro();return gn=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),gn}function Cr(){let t=nf();return t!==null?t:of()}function af(){return hn!==null||(hn=ro().CLAUDE_MEM_WORKER_HOST),hn}function lf(){return Sn!==null||(Sn=sf("CLAUDE_MEM_API_TIMEOUT_MS",vt(oe.API_REQUEST),$m)),Sn}function cf(t){return`http://${af()}:${Cr()}${t}`}function bn(t,e={}){let r=e.method??"GET",n=e.timeoutMs??lf(),s=cf(t),o={method:r};return e.headers&&(o.headers=e.headers),e.body&&(o.body=e.body),n>0?ef(s,o,n):fetch(s,o)}var ev,tv,rv,$m,gn,hn,En,Sn,yn=S(()=>{"use strict";Pt();V();ir();Ct();J();Cl();cn();Rs();wl();fr();Gs();ev=to("CLAUDE_MEM_HEALTH_TIMEOUT_MS",vt(oe.HEALTH_CHECK),{min:500,max:3e5}),tv=to("CLAUDE_MEM_API_TIMEOUT_MS",vt(oe.API_REQUEST),{min:500,max:3e5}),rv=to("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",vt(oe.HOOK_READINESS_WAIT),{min:0,max:3e5}),$m={min:500,max:3e5};gn=null,hn=null,En=null,Sn=null});function Tn(t){if(!t)return t;let e="";for(let r of t){let n=r.codePointAt(0);if(!(n>=55296&&n<=57343)){if(n<=65535){e+=r;continue}e+=uf[r]??df}}return e}var uf,df,no=S(()=>{"use strict";uf={"\u{1F534}":"\u25CF","\u{1F7E3}":"\u25C6","\u{1F504}":"\u21BB","\u{1F535}":"\u25CB","\u{1F6A8}":"\u26A0","\u{1F510}":"\u26B7","\u{1F6E0}":"\u2692","\u{1F50D}":"\u2315","\u{1F3AF}":"\u25CE","\u{1F4AC}":"\u201D","\u{1F9E0}":"\u25C8"},df="\u2022"});import{existsSync as pf,readFileSync as mf,writeFileSync as Ol,mkdirSync as kl,renameSync as ff}from"fs";import{join as so}from"path";function _l(t){try{return pf(t)?JSON.parse(mf(t,"utf-8")):{}}catch(e){return d.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function Al(t,e){let r=so(t,"..");kl(r,{recursive:!0}),Ol(t,JSON.stringify(e,null,2))}function oo(t,e){let r=so(t,".cursor","rules"),n=so(r,"claude-mem-context.mdc"),s=`${n}.tmp`;kl(r,{recursive:!0});let o=`---
119
119
  alwaysApply: true
120
120
  description: "Claude-mem context from past sessions (auto-updated)"
121
121
  ---
@@ -128,9 +128,9 @@ ${Tn(e)}
128
128
 
129
129
  ---
130
130
  *Updated after last session. Use claude-mem's MCP search tools for more detailed queries.*
131
- `;Ol(s,o),ff(s,n)}var Nl=S(()=>{"use strict";V();no()});import Ye from"path";import{homedir as Ml}from"os";import{existsSync as xl}from"fs";function Ll(t){for(let e of t)if(e&&xl(e))return e;return null}function gf(){let t=[process.env.CLAUDE_PLUGIN_ROOT,process.env.PLUGIN_ROOT,Ye.join(lr,"plugin"),Ye.join(process.cwd(),"plugin"),process.cwd()].filter(e=>!!e);for(let e of t)if(xl(Ye.join(e,"scripts")))return e;return null}function Dl(t){let e=gf(),r=[e?Ye.join(e,"scripts",t):"",Ye.join(lr,"plugin","scripts",t),Ye.join(process.cwd(),"plugin","scripts",t)];return Ll(r)}function Cr(){return Dl("mcp-server.cjs")}function Gt(){return Dl("worker-service.cjs")}function Bt(){let t=[Ye.join(Ml(),".bun","bin","bun"),"/usr/local/bin/bun","/usr/bin/bun",...process.platform==="win32"?[Ye.join(Ml(),".bun","bin","bun.exe"),Ye.join(process.env.LOCALAPPDATA||"","bun","bun.exe")]:[]];return Ll(t)??"bun"}function io(){return process.execPath}var wr=S(()=>{"use strict";J()});var Xl={};he(Xl,{checkCursorHooksStatus:()=>Vl,configureCursorMcp:()=>Ef,findBunPath:()=>Hl,findMcpServerPath:()=>Gl,findWorkerServicePath:()=>Bl,getTargetDir:()=>Rn,handleCursorCommand:()=>vf,installCursorHooks:()=>Jl,readCursorRegistry:()=>vn,registerCursorProject:()=>Wl,uninstallCursorHooks:()=>Kl,unregisterCursorProject:()=>jl,updateCursorContextForProject:()=>hf,writeCursorRegistry:()=>uo});import q from"path";import{homedir as Pl}from"os";import{existsSync as pt,readFileSync as Ul,writeFileSync as lo,unlinkSync as ao,mkdirSync as co}from"fs";function vn(){return _l(Fl)}function uo(t){Al(Fl,t)}function Wl(t,e){let r=vn();r[t]={workspacePath:e,installedAt:new Date().toISOString()},uo(r),d.info("CURSOR","Registered project for auto-context updates",{projectName:t,workspacePath:e})}function jl(t){let e=vn();e[t]&&(delete e[t],uo(e),d.info("CURSOR","Unregistered project",{projectName:t}))}async function hf(t,e){let n=vn()[t];if(n)try{let s=await bn(`/api/context/inject?project=${encodeURIComponent(t)}`);if(!s.ok)return;let o=await s.text();if(!o||!o.trim())return;oo(n.workspacePath,o),d.debug("CURSOR","Updated context file",{projectName:t,workspacePath:n.workspacePath})}catch(s){s instanceof Error?d.error("WORKER","Failed to update context file",{projectName:t},s):d.error("WORKER","Failed to update context file",{projectName:t},new Error(String(s)))}}function Gl(){return Cr()}function Bl(){return Gt()}function Hl(){return Bt()}function Rn(t){switch(t){case"project":return q.join(process.cwd(),".cursor");case"user":return q.join(Pl(),".cursor");case"enterprise":return process.platform==="darwin"?"/Library/Application Support/Cursor":process.platform==="linux"?"/etc/cursor":process.platform==="win32"?q.join(process.env.ProgramData||"C:\\ProgramData","Cursor"):null;default:return null}}function Ef(t){let e=Gl();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/mcp-server.cjs"),1;let r=Rn(t);if(!r)return console.error(`Invalid target: ${t}. Use: project or user`),1;let n=q.join(r,"mcp.json");try{co(r,{recursive:!0});let s={mcpServers:{}};if(pt(n))try{s=JSON.parse(Ul(n,"utf-8")),s.mcpServers||(s.mcpServers={})}catch(o){o instanceof Error?d.error("WORKER","Corrupt mcp.json, creating new config",{path:n},o):d.error("WORKER","Corrupt mcp.json, creating new config",{path:n},new Error(String(o))),s={mcpServers:{}}}return s.mcpServers["claude-mem"]={command:"node",args:[e]},lo(n,JSON.stringify(s,null,2)),console.log(` Configured MCP server in ${t==="user"?"~/.cursor":".cursor"}/mcp.json`),console.log(` Server path: ${e}`),0}catch(s){return console.error(`Failed to configure MCP: ${s.message}`),1}}async function Jl(t){console.log(`
131
+ `;Ol(s,o),ff(s,n)}var Nl=S(()=>{"use strict";V();no()});import Ye from"path";import{homedir as Ml}from"os";import{existsSync as xl}from"fs";function Ll(t){for(let e of t)if(e&&xl(e))return e;return null}function gf(){let t=[process.env.CLAUDE_PLUGIN_ROOT,process.env.PLUGIN_ROOT,Ye.join(lr,"plugin"),Ye.join(process.cwd(),"plugin"),process.cwd()].filter(e=>!!e);for(let e of t)if(xl(Ye.join(e,"scripts")))return e;return null}function Dl(t){let e=gf(),r=[e?Ye.join(e,"scripts",t):"",Ye.join(lr,"plugin","scripts",t),Ye.join(process.cwd(),"plugin","scripts",t)];return Ll(r)}function Rr(){return Dl("mcp-server.cjs")}function Gt(){return Dl("worker-service.cjs")}function Bt(){let t=[Ye.join(Ml(),".bun","bin","bun"),"/usr/local/bin/bun","/usr/bin/bun",...process.platform==="win32"?[Ye.join(Ml(),".bun","bin","bun.exe"),Ye.join(process.env.LOCALAPPDATA||"","bun","bun.exe")]:[]];return Ll(t)??"bun"}function io(){return process.execPath}var wr=S(()=>{"use strict";J()});var Xl={};he(Xl,{checkCursorHooksStatus:()=>Vl,configureCursorMcp:()=>Ef,findBunPath:()=>Hl,findMcpServerPath:()=>Gl,findWorkerServicePath:()=>Bl,getTargetDir:()=>Cn,handleCursorCommand:()=>vf,installCursorHooks:()=>Jl,readCursorRegistry:()=>vn,registerCursorProject:()=>Wl,uninstallCursorHooks:()=>Kl,unregisterCursorProject:()=>jl,updateCursorContextForProject:()=>hf,writeCursorRegistry:()=>uo});import q from"path";import{homedir as Pl}from"os";import{existsSync as pt,readFileSync as Ul,writeFileSync as lo,unlinkSync as ao,mkdirSync as co}from"fs";function vn(){return _l(Fl)}function uo(t){Al(Fl,t)}function Wl(t,e){let r=vn();r[t]={workspacePath:e,installedAt:new Date().toISOString()},uo(r),d.info("CURSOR","Registered project for auto-context updates",{projectName:t,workspacePath:e})}function jl(t){let e=vn();e[t]&&(delete e[t],uo(e),d.info("CURSOR","Unregistered project",{projectName:t}))}async function hf(t,e){let n=vn()[t];if(n)try{let s=await bn(`/api/context/inject?project=${encodeURIComponent(t)}`);if(!s.ok)return;let o=await s.text();if(!o||!o.trim())return;oo(n.workspacePath,o),d.debug("CURSOR","Updated context file",{projectName:t,workspacePath:n.workspacePath})}catch(s){s instanceof Error?d.error("WORKER","Failed to update context file",{projectName:t},s):d.error("WORKER","Failed to update context file",{projectName:t},new Error(String(s)))}}function Gl(){return Rr()}function Bl(){return Gt()}function Hl(){return Bt()}function Cn(t){switch(t){case"project":return q.join(process.cwd(),".cursor");case"user":return q.join(Pl(),".cursor");case"enterprise":return process.platform==="darwin"?"/Library/Application Support/Cursor":process.platform==="linux"?"/etc/cursor":process.platform==="win32"?q.join(process.env.ProgramData||"C:\\ProgramData","Cursor"):null;default:return null}}function Ef(t){let e=Gl();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/mcp-server.cjs"),1;let r=Cn(t);if(!r)return console.error(`Invalid target: ${t}. Use: project or user`),1;let n=q.join(r,"mcp.json");try{co(r,{recursive:!0});let s={mcpServers:{}};if(pt(n))try{s=JSON.parse(Ul(n,"utf-8")),s.mcpServers||(s.mcpServers={})}catch(o){o instanceof Error?d.error("WORKER","Corrupt mcp.json, creating new config",{path:n},o):d.error("WORKER","Corrupt mcp.json, creating new config",{path:n},new Error(String(o))),s={mcpServers:{}}}return s.mcpServers["claude-mem"]={command:"node",args:[e]},lo(n,JSON.stringify(s,null,2)),console.log(` Configured MCP server in ${t==="user"?"~/.cursor":".cursor"}/mcp.json`),console.log(` Server path: ${e}`),0}catch(s){return console.error(`Failed to configure MCP: ${s.message}`),1}}async function Jl(t){console.log(`
132
132
  Installing Claude-Mem Cursor hooks (${t} level)...
133
- `);let e=Rn(t);if(!e)return console.error(`Invalid target: ${t}. Use: project, user, or enterprise`),1;let r=Bl();if(!r)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/worker-service.cjs"),1;let n=process.cwd(),s=q.join(e,"hooks.json"),o=Hl(),i=o.replace(/\\/g,"\\\\"),a=r.replace(/\\/g,"\\\\"),l=u=>`"${i}" "${a}" hook cursor ${u}`;console.log(` Using Bun runtime: ${o}`);let c={version:1,hooks:{beforeSubmitPrompt:[{command:l("session-init")},{command:l("context")}],afterMCPExecution:[{command:l("observation")}],afterShellExecution:[{command:l("observation")}],afterFileEdit:[{command:l("file-edit")}],stop:[{command:l("summarize")}]}};try{return co(e,{recursive:!0}),await Sf(s,c,r,t,e,n),0}catch(u){let m=u instanceof Error?u.message:String(u);return console.error(`
133
+ `);let e=Cn(t);if(!e)return console.error(`Invalid target: ${t}. Use: project, user, or enterprise`),1;let r=Bl();if(!r)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/worker-service.cjs"),1;let n=process.cwd(),s=q.join(e,"hooks.json"),o=Hl(),i=o.replace(/\\/g,"\\\\"),a=r.replace(/\\/g,"\\\\"),l=u=>`"${i}" "${a}" hook cursor ${u}`;console.log(` Using Bun runtime: ${o}`);let c={version:1,hooks:{beforeSubmitPrompt:[{command:l("session-init")},{command:l("context")}],afterMCPExecution:[{command:l("observation")}],afterShellExecution:[{command:l("observation")}],afterFileEdit:[{command:l("file-edit")}],stop:[{command:l("summarize")}]}};try{return co(e,{recursive:!0}),await Sf(s,c,r,t,e,n),0}catch(u){let m=u instanceof Error?u.message:String(u);return console.error(`
134
134
  Installation failed: ${m}`),t==="enterprise"&&console.error(" Tip: Enterprise installation may require sudo/admin privileges"),1}}async function Sf(t,e,r,n,s,o){lo(t,JSON.stringify(e,null,2)),console.log(" Created hooks.json (unified CLI mode)"),console.log(` Worker service: ${r}`),n==="project"&&await bf(s,o),console.log(`
135
135
  Installation complete!
136
136
 
@@ -157,7 +157,7 @@ description: "Claude-mem context from past sessions (auto-updated)"
157
157
  Use claude-mem's MCP search tools for manual memory queries.
158
158
  `),console.log(" Created placeholder context file (will populate after first session)")}Wl(n,e),console.log(" Registered for auto-context updates")}async function yf(t,e){if(!(await bn("/api/readiness")).ok)return!1;let n=await bn(`/api/context/inject?project=${encodeURIComponent(t)}`);if(!n.ok)return!1;let s=await n.text();return s&&s.trim()?(oo(e,s),console.log(" Generated initial context from existing memory"),!0):!1}function Kl(t){console.log(`
159
159
  Uninstalling Claude-Mem Cursor hooks (${t} level)...
160
- `);let e=Rn(t);if(!e)return console.error(`Invalid target: ${t}`),1;let r=q.join(e,"hooks"),n=q.join(e,"hooks.json"),s=["common.sh","session-init.sh","context-inject.sh","save-observation.sh","save-file-edit.sh","session-summary.sh"],o=["common.ps1","session-init.ps1","context-inject.ps1","save-observation.ps1","save-file-edit.ps1","session-summary.ps1"],i=[...s,...o];try{return Tf(r,i,n,t,e),0}catch(a){let l=a instanceof Error?a.message:String(a);return console.error(`
160
+ `);let e=Cn(t);if(!e)return console.error(`Invalid target: ${t}`),1;let r=q.join(e,"hooks"),n=q.join(e,"hooks.json"),s=["common.sh","session-init.sh","context-inject.sh","save-observation.sh","save-file-edit.sh","session-summary.sh"],o=["common.ps1","session-init.ps1","context-inject.ps1","save-observation.ps1","save-file-edit.ps1","session-summary.ps1"],i=[...s,...o];try{return Tf(r,i,n,t,e),0}catch(a){let l=a instanceof Error?a.message:String(a);return console.error(`
161
161
  Uninstallation failed: ${l}`),1}}function Tf(t,e,r,n,s){for(let o of e){let i=q.join(t,o);pt(i)&&(ao(i),console.log(` Removed legacy script: ${o}`))}if(pt(r)&&(ao(r),console.log(" Removed hooks.json")),n==="project"){let o=q.join(s,"rules","claude-mem-context.mdc");pt(o)&&(ao(o),console.log(" Removed context file"));let i=q.basename(process.cwd());jl(i),console.log(" Unregistered from auto-context updates")}console.log(`
162
162
  Uninstallation complete!
163
163
  `),console.log("Restart Cursor to apply changes.")}function Vl(){console.log(`
@@ -187,12 +187,12 @@ Examples:
187
187
  claude-mem cursor status # Check if hooks are installed
188
188
 
189
189
  For more info: https://docs.claude-mem.ai/cursor
190
- `),0}}var Fl,Yl=S(()=>{"use strict";V();yn();J();Nl();wr();Fl=q.join(M,"cursor-projects.json")});var go={};he(go,{checkGeminiCliHooksStatus:()=>$l,handleGeminiCliCommand:()=>Nf,installGeminiCliHooks:()=>Zl,uninstallGeminiCliHooks:()=>Ql});import po from"path";import{homedir as Rf}from"os";import{existsSync as Ht,readFileSync as Cn,writeFileSync as mo,mkdirSync as ql}from"fs";function wf(t,e,r){let n=Jt[r];if(!n)throw new Error(`Unknown Gemini CLI event: ${r}`);let s=t.replace(/\\/g,"\\\\"),o=e.replace(/\\/g,"\\\\");return`"${s}" "${o}" hook gemini-cli ${n}`}function If(t){return{matcher:"*",hooks:[{name:Ir,type:"command",command:t,timeout:Cf}]}}function fo(){if(!Ht(me))return{};let t=Cn(me,"utf-8");try{return JSON.parse(t)}catch(e){throw e instanceof Error?d.error("WORKER","Corrupt JSON in Gemini settings",{path:me},e):d.error("WORKER","Corrupt JSON in Gemini settings",{path:me},new Error(String(e))),new Error(`Corrupt JSON in ${me}, refusing to overwrite user settings`)}}function zl(t){ql(wn,{recursive:!0}),mo(me,JSON.stringify(t,null,2)+`
190
+ `),0}}var Fl,Yl=S(()=>{"use strict";V();yn();J();Nl();wr();Fl=q.join(M,"cursor-projects.json")});var go={};he(go,{checkGeminiCliHooksStatus:()=>$l,handleGeminiCliCommand:()=>Nf,installGeminiCliHooks:()=>Zl,uninstallGeminiCliHooks:()=>Ql});import po from"path";import{homedir as Cf}from"os";import{existsSync as Ht,readFileSync as Rn,writeFileSync as mo,mkdirSync as ql}from"fs";function wf(t,e,r){let n=Jt[r];if(!n)throw new Error(`Unknown Gemini CLI event: ${r}`);let s=t.replace(/\\/g,"\\\\"),o=e.replace(/\\/g,"\\\\");return`"${s}" "${o}" hook gemini-cli ${n}`}function If(t){return{matcher:"*",hooks:[{name:Ir,type:"command",command:t,timeout:Rf}]}}function fo(){if(!Ht(me))return{};let t=Rn(me,"utf-8");try{return JSON.parse(t)}catch(e){throw e instanceof Error?d.error("WORKER","Corrupt JSON in Gemini settings",{path:me},e):d.error("WORKER","Corrupt JSON in Gemini settings",{path:me},new Error(String(e))),new Error(`Corrupt JSON in ${me}, refusing to overwrite user settings`)}}function zl(t){ql(wn,{recursive:!0}),mo(me,JSON.stringify(t,null,2)+`
191
191
  `)}function Of(t,e){let r={...t};r.hooks||(r.hooks={});for(let[n,s]of Object.entries(e)){let o=r.hooks[n]??[];for(let i of s){let a=o.findIndex(l=>l.hooks.some(c=>c.name===Ir));if(a>=0){let l=o[a],c=l.hooks.findIndex(u=>u.name===Ir);c>=0?l.hooks[c]=i.hooks[0]:l.hooks.push(i.hooks[0])}else o.push(i)}r.hooks[n]=o}return r}function kf(){let t="<claude-mem-context>",r=`${t}
192
192
  # Memory Context from Past Sessions
193
193
 
194
194
  *No context yet. Complete your first session and context will appear here.*
195
- </claude-mem-context>`,n="";if(Ht(Ne)&&(n=Cn(Ne,"utf-8")),n.includes(t))return;let s=n.length>0&&!n.endsWith(`
195
+ </claude-mem-context>`,n="";if(Ht(Ne)&&(n=Rn(Ne,"utf-8")),n.includes(t))return;let s=n.length>0&&!n.endsWith(`
196
196
  `)?`
197
197
 
198
198
  `:n.length>0?`
@@ -217,7 +217,7 @@ Context Injection:
217
217
  `)}function Ql(){if(console.log(`
218
218
  Uninstalling Claude-Mem Gemini CLI hooks...
219
219
  `),!Ht(me))return console.log(" No Gemini CLI settings found \u2014 nothing to uninstall."),0;try{let t=fo();if(!t.hooks)return console.log(" No hooks found in Gemini CLI settings \u2014 nothing to uninstall."),0;let e=0;for(let[r,n]of Object.entries(t.hooks)){let s=n.map(o=>{let i=o.hooks.filter(a=>a.name!==Ir);return e+=o.hooks.length-i.length,{...o,hooks:i}}).filter(o=>o.hooks.length>0);s.length>0?t.hooks[r]=s:delete t.hooks[r]}return Object.keys(t.hooks).length===0&&delete t.hooks,Af(t,e),0}catch(t){let e=t instanceof Error?t.message:String(t);return console.error(`
220
- Uninstallation failed: ${e}`),1}}function Af(t,e){if(zl(t),console.log(` Removed ${e} claude-mem hook(s) from ${me}`),Ht(Ne)){let r=Cn(Ne,"utf-8"),n=/\n?<claude-mem-context>[\s\S]*?<\/claude-mem-context>\n?/;n.test(r)&&(r=r.replace(n,""),mo(Ne,r),console.log(` Removed context section from ${Ne}`))}console.log(`
220
+ Uninstallation failed: ${e}`),1}}function Af(t,e){if(zl(t),console.log(` Removed ${e} claude-mem hook(s) from ${me}`),Ht(Ne)){let r=Rn(Ne,"utf-8"),n=/\n?<claude-mem-context>[\s\S]*?<\/claude-mem-context>\n?/;n.test(r)&&(r=r.replace(n,""),mo(Ne,r),console.log(` Removed context section from ${Ne}`))}console.log(`
221
221
  Uninstallation complete!
222
222
  `),console.log("Restart Gemini CLI to apply changes.")}function $l(){if(console.log(`
223
223
  Claude-Mem Gemini CLI Hooks Status
@@ -228,7 +228,7 @@ Claude-Mem Gemini CLI Hooks Status
228
228
  `),console.log(`No hooks installed. Run: claude-mem install --ide gemini-cli
229
229
  `),0;let e=[];for(let[r,n]of Object.entries(t.hooks))n.some(o=>o.hooks.some(i=>i.name===Ir))&&e.push(r);if(e.length===0)return console.log(`Gemini CLI settings: Found, but no claude-mem hooks
230
230
  `),console.log(`Run: claude-mem install --ide gemini-cli
231
- `),0;console.log(`Settings: ${me}`),console.log("Mode: Unified CLI (bun worker-service.cjs hook gemini-cli)"),console.log(`Events: ${e.length} of ${Object.keys(Jt).length} mapped`);for(let r of e){let n=Jt[r]??"unknown";console.log(` ${r} \u2192 ${n}`)}return Ht(Ne)?Cn(Ne,"utf-8").includes("<claude-mem-context>")?console.log(`Context: Active (${Ne})`):console.log("Context: GEMINI.md exists but missing claude-mem section"):console.log("Context: No GEMINI.md found"),console.log(""),0}async function Nf(t,e){switch(t){case"install":return Zl();case"uninstall":return Ql();case"status":return $l();default:return console.log(`
231
+ `),0;console.log(`Settings: ${me}`),console.log("Mode: Unified CLI (bun worker-service.cjs hook gemini-cli)"),console.log(`Events: ${e.length} of ${Object.keys(Jt).length} mapped`);for(let r of e){let n=Jt[r]??"unknown";console.log(` ${r} \u2192 ${n}`)}return Ht(Ne)?Rn(Ne,"utf-8").includes("<claude-mem-context>")?console.log(`Context: Active (${Ne})`):console.log("Context: GEMINI.md exists but missing claude-mem section"):console.log("Context: No GEMINI.md found"),console.log(""),0}async function Nf(t,e){switch(t){case"install":return Zl();case"uninstall":return Ql();case"status":return $l();default:return console.log(`
232
232
  Claude-Mem Gemini CLI Integration
233
233
 
234
234
  Usage: claude-mem gemini-cli <command>
@@ -244,7 +244,7 @@ Examples:
244
244
  claude-mem gemini-cli uninstall # Remove hooks
245
245
 
246
246
  For more info: https://docs.claude-mem.ai/usage/gemini-provider
247
- `),0}}var wn,me,Ne,Ir,Cf,Jt,ho=S(()=>{"use strict";V();wr();wn=po.join(Rf(),".gemini"),me=po.join(wn,"settings.json"),Ne=po.join(wn,"GEMINI.md"),Ir="claude-mem",Cf=1e4,Jt={SessionStart:"context",BeforeAgent:"session-init",AfterAgent:"observation",BeforeTool:"observation",AfterTool:"observation",PreCompress:"summarize",Notification:"observation"}});import Mf from"path";import{existsSync as xf,readFileSync as Lf,writeFileSync as Eo,mkdirSync as Df}from"fs";function In(t,e,r){let n=Mf.dirname(t);Df(n,{recursive:!0});let s=`${Or}
247
+ `),0}}var wn,me,Ne,Ir,Rf,Jt,ho=S(()=>{"use strict";V();wr();wn=po.join(Cf(),".gemini"),me=po.join(wn,"settings.json"),Ne=po.join(wn,"GEMINI.md"),Ir="claude-mem",Rf=1e4,Jt={SessionStart:"context",BeforeAgent:"session-init",AfterAgent:"observation",BeforeTool:"observation",AfterTool:"observation",PreCompress:"summarize",Notification:"observation"}});import Mf from"path";import{existsSync as xf,readFileSync as Lf,writeFileSync as Eo,mkdirSync as Df}from"fs";function In(t,e,r){let n=Mf.dirname(t);Df(n,{recursive:!0});let s=`${Or}
248
248
  ${Tn(e)}
249
249
  ${Kt}`;if(xf(t)){let o=Lf(t,"utf-8"),i=o.indexOf(Or),a=o.indexOf(Kt);i!==-1&&a!==-1?o=o.slice(0,i)+s+o.slice(a+Kt.length):o=o.trimEnd()+`
250
250
 
@@ -253,9 +253,9 @@ ${Kt}`;if(xf(t)){let o=Lf(t,"utf-8"),i=o.indexOf(Or),a=o.indexOf(Kt);i!==-1&&a!=
253
253
 
254
254
  ${s}
255
255
  `,"utf-8"):Eo(t,s+`
256
- `,"utf-8")}var Or,Kt,So=S(()=>{"use strict";no();Or="<claude-mem-context>",Kt="</claude-mem-context>"});var Ro={};he(Ro,{addOpenCodePluginReference:()=>nc,checkOpenCodeStatus:()=>Bf,deregisterOpenCodePluginFromConfig:()=>ic,findBuiltPluginPath:()=>ac,getInstalledPluginPath:()=>Ar,getOpenCodeAgentsMdPath:()=>_r,getOpenCodeConfigDirectory:()=>kr,getOpenCodeConfigPath:()=>vo,getOpenCodePluginsDirectory:()=>To,injectContextIntoAgentsMd:()=>cc,installOpenCodeIntegration:()=>Hf,installOpenCodePlugin:()=>lc,registerOpenCodePluginInConfig:()=>oc,removeOpenCodePluginReference:()=>sc,uninstallOpenCodePlugin:()=>Gf});import qe from"path";import{homedir as ec}from"os";import{fileURLToPath as Pf}from"url";import{existsSync as mt,readFileSync as On,writeFileSync as yo,mkdirSync as Uf,copyFileSync as Ff,unlinkSync as tc}from"fs";function kr(){return process.env.OPENCODE_CONFIG_DIR?process.env.OPENCODE_CONFIG_DIR:qe.join(ec(),".config","opencode")}function To(){return qe.join(kr(),"plugins")}function vo(){return qe.join(kr(),"opencode.json")}function _r(){return qe.join(kr(),"AGENTS.md")}function Ar(){return qe.join(To(),"claude-mem.js")}function rc(t){return Array.isArray(t.plugin)?t.plugin:t.plugin===void 0?[]:[t.plugin]}function nc(t){let e=rc(t);return e.includes(bo)?t:{...t,plugin:[...e,bo]}}function sc(t){return{...t,plugin:rc(t).filter(e=>e!==bo)}}function oc(){let t=vo(),e={$schema:"https://opencode.ai/config.json"};try{let r=mt(t)?JSON.parse(On(t,"utf-8")):e,n=nc(r);return yo(t,`${JSON.stringify(n,null,2)}
256
+ `,"utf-8")}var Or,Kt,So=S(()=>{"use strict";no();Or="<claude-mem-context>",Kt="</claude-mem-context>"});var Co={};he(Co,{addOpenCodePluginReference:()=>nc,checkOpenCodeStatus:()=>Bf,deregisterOpenCodePluginFromConfig:()=>ic,findBuiltPluginPath:()=>ac,getInstalledPluginPath:()=>Ar,getOpenCodeAgentsMdPath:()=>_r,getOpenCodeConfigDirectory:()=>kr,getOpenCodeConfigPath:()=>vo,getOpenCodePluginsDirectory:()=>To,injectContextIntoAgentsMd:()=>cc,installOpenCodeIntegration:()=>Hf,installOpenCodePlugin:()=>lc,registerOpenCodePluginInConfig:()=>oc,removeOpenCodePluginReference:()=>sc,uninstallOpenCodePlugin:()=>Gf});import qe from"path";import{homedir as ec}from"os";import{fileURLToPath as Pf}from"url";import{existsSync as mt,readFileSync as On,writeFileSync as yo,mkdirSync as Uf,copyFileSync as Ff,unlinkSync as tc}from"fs";function kr(){return process.env.OPENCODE_CONFIG_DIR?process.env.OPENCODE_CONFIG_DIR:qe.join(ec(),".config","opencode")}function To(){return qe.join(kr(),"plugins")}function vo(){return qe.join(kr(),"opencode.json")}function _r(){return qe.join(kr(),"AGENTS.md")}function Ar(){return qe.join(To(),"claude-mem.js")}function rc(t){return Array.isArray(t.plugin)?t.plugin:t.plugin===void 0?[]:[t.plugin]}function nc(t){let e=rc(t);return e.includes(bo)?t:{...t,plugin:[...e,bo]}}function sc(t){return{...t,plugin:rc(t).filter(e=>e!==bo)}}function oc(){let t=vo(),e={$schema:"https://opencode.ai/config.json"};try{let r=mt(t)?JSON.parse(On(t,"utf-8")):e,n=nc(r);return yo(t,`${JSON.stringify(n,null,2)}
257
257
  `,"utf-8"),console.log(` Plugin registered in: ${t}`),d.info("OPENCODE","Plugin registered in config",{path:t}),0}catch(r){let n=r instanceof Error?r.message:String(r);return console.error(`Failed to register OpenCode plugin in config: ${n}`),1}}function ic(){let t=vo();if(!mt(t))return 0;try{let e=JSON.parse(On(t,"utf-8")),r=sc(e);return yo(t,`${JSON.stringify(r,null,2)}
258
- `,"utf-8"),console.log(` Plugin deregistered from: ${t}`),d.info("OPENCODE","Plugin deregistered from config",{path:t}),0}catch(e){let r=e instanceof Error?e.message:String(e);return console.error(`Failed to deregister OpenCode plugin from config: ${r}`),1}}function ac(){let t=[qe.join(process.env.CLAUDE_CONFIG_DIR||qe.join(ec(),".claude"),"plugins","marketplaces","keepmind","dist","opencode-plugin","index.js"),qe.join(qe.dirname(Pf(import.meta.url)),"..","..","..","dist","opencode-plugin","index.js")];for(let e of t)if(mt(e))return e;return null}function lc(){let t=ac();if(!t)return console.error("Could not find built OpenCode plugin bundle."),console.error(" Expected at: dist/opencode-plugin/index.js"),console.error(" Run the build first: npm run build"),1;let e=To(),r=Ar();try{Uf(e,{recursive:!0}),Ff(t,r),console.log(` Plugin installed to: ${r}`),d.info("OPENCODE","Plugin installed",{destination:r});let n=oc();return n!==0?n:0}catch(n){let s=n instanceof Error?n.message:String(n);return console.error(`Failed to install OpenCode plugin: ${s}`),1}}function cc(t){let e=_r();try{return In(e,t,"# Claude-Mem Memory Context"),d.info("OPENCODE","Context injected into AGENTS.md",{path:e}),0}catch(r){let n=r instanceof Error?r.message:String(r);return console.error(`Failed to inject context into AGENTS.md: ${n}`),1}}async function Wf(){let t=Rr();if(!(await fetch(`http://127.0.0.1:${t}/api/readiness`)).ok)return null;let r=await fetch(`http://127.0.0.1:${t}/api/context/inject?project=opencode`);if(!r.ok)return null;let n=await r.text();return n&&n.trim()?n:null}function jf(t,e){e.length===0||e==="# Claude-Mem Memory Context"?(tc(t),console.log(" Removed empty AGENTS.md")):(yo(t,e+`
258
+ `,"utf-8"),console.log(` Plugin deregistered from: ${t}`),d.info("OPENCODE","Plugin deregistered from config",{path:t}),0}catch(e){let r=e instanceof Error?e.message:String(e);return console.error(`Failed to deregister OpenCode plugin from config: ${r}`),1}}function ac(){let t=[qe.join(process.env.CLAUDE_CONFIG_DIR||qe.join(ec(),".claude"),"plugins","marketplaces","keepmind","dist","opencode-plugin","index.js"),qe.join(qe.dirname(Pf(import.meta.url)),"..","..","..","dist","opencode-plugin","index.js")];for(let e of t)if(mt(e))return e;return null}function lc(){let t=ac();if(!t)return console.error("Could not find built OpenCode plugin bundle."),console.error(" Expected at: dist/opencode-plugin/index.js"),console.error(" Run the build first: npm run build"),1;let e=To(),r=Ar();try{Uf(e,{recursive:!0}),Ff(t,r),console.log(` Plugin installed to: ${r}`),d.info("OPENCODE","Plugin installed",{destination:r});let n=oc();return n!==0?n:0}catch(n){let s=n instanceof Error?n.message:String(n);return console.error(`Failed to install OpenCode plugin: ${s}`),1}}function cc(t){let e=_r();try{return In(e,t,"# Claude-Mem Memory Context"),d.info("OPENCODE","Context injected into AGENTS.md",{path:e}),0}catch(r){let n=r instanceof Error?r.message:String(r);return console.error(`Failed to inject context into AGENTS.md: ${n}`),1}}async function Wf(){let t=Cr();if(!(await fetch(`http://127.0.0.1:${t}/api/readiness`)).ok)return null;let r=await fetch(`http://127.0.0.1:${t}/api/context/inject?project=opencode`);if(!r.ok)return null;let n=await r.text();return n&&n.trim()?n:null}function jf(t,e){e.length===0||e==="# Claude-Mem Memory Context"?(tc(t),console.log(" Removed empty AGENTS.md")):(yo(t,e+`
259
259
  `,"utf-8"),console.log(" Cleaned context from AGENTS.md"))}function Gf(){let t=!1,e=Ar();if(mt(e))try{tc(e),console.log(` Removed plugin: ${e}`)}catch(n){let s=n instanceof Error?n.message:String(n);console.error(` Failed to remove plugin: ${s}`),t=!0}ic()!==0&&(t=!0);let r=_r();if(mt(r)){let n;try{n=On(r,"utf-8")}catch(i){let a=i instanceof Error?i.message:String(i);console.error(` Failed to read AGENTS.md: ${a}`),t=!0,n=""}let s=n.indexOf(Or),o=n.indexOf(Kt);if(s!==-1&&o!==-1){n=n.slice(0,s).trimEnd()+`
260
260
  `+n.slice(o+Kt.length).trimStart();let i=n.trim();try{jf(r,i)}catch(a){let l=a instanceof Error?a.message:String(a);console.error(` Failed to clean AGENTS.md: ${l}`),t=!0}}}return t?1:0}function Bf(){console.log(`
261
261
  Claude-Mem OpenCode Integration Status
@@ -275,7 +275,7 @@ Next steps:
275
275
  1. Start keepmind worker: npx keepmind start
276
276
  2. Restart OpenCode to load the plugin
277
277
  3. Memory capture is automatic from then on
278
- `),0}var bo,Co=S(()=>{"use strict";V();So();yn();bo="./plugins/claude-mem.js"});var Oo={};he(Oo,{checkWindsurfHooksStatus:()=>tg,installWindsurfHooks:()=>Yf,readWindsurfRegistry:()=>wo,registerWindsurfProject:()=>mc,uninstallWindsurfHooks:()=>Qf,unregisterWindsurfProject:()=>fc,writeWindsurfContextFile:()=>gc,writeWindsurfRegistry:()=>Io});import ke from"path";import{homedir as Jf}from"os";import{existsSync as Xt,readFileSync as _n,writeFileSync as Nr,unlinkSync as dc,mkdirSync as An,renameSync as Kf}from"fs";function wo(){try{return Xt(Vt)?JSON.parse(_n(Vt,"utf-8")):{}}catch(t){return t instanceof Error?d.error("WORKER","Failed to read registry, using empty",{file:Vt},t):d.error("WORKER","Failed to read registry, using empty",{file:Vt},new Error(String(t))),{}}}function Io(t){let e=ke.dirname(Vt);An(e,{recursive:!0}),Nr(Vt,JSON.stringify(t,null,2))}function mc(t){let e=wo();e[t]={installedAt:new Date().toISOString()},Io(e),d.info("WINDSURF","Registered project for auto-context updates",{workspacePath:t})}function fc(t){let e=wo();e[t]&&(delete e[t],Io(e),d.info("WINDSURF","Unregistered project",{workspacePath:t}))}function gc(t,e){let r=ke.join(t,".windsurf","rules"),n=ke.join(r,"claude-mem-context.md"),s=`${n}.tmp`;An(r,{recursive:!0});let o=`# Memory Context from Past Sessions
278
+ `),0}var bo,Ro=S(()=>{"use strict";V();So();yn();bo="./plugins/claude-mem.js"});var Oo={};he(Oo,{checkWindsurfHooksStatus:()=>tg,installWindsurfHooks:()=>Yf,readWindsurfRegistry:()=>wo,registerWindsurfProject:()=>mc,uninstallWindsurfHooks:()=>Qf,unregisterWindsurfProject:()=>fc,writeWindsurfContextFile:()=>gc,writeWindsurfRegistry:()=>Io});import ke from"path";import{homedir as Jf}from"os";import{existsSync as Xt,readFileSync as _n,writeFileSync as Nr,unlinkSync as dc,mkdirSync as An,renameSync as Kf}from"fs";function wo(){try{return Xt(Vt)?JSON.parse(_n(Vt,"utf-8")):{}}catch(t){return t instanceof Error?d.error("WORKER","Failed to read registry, using empty",{file:Vt},t):d.error("WORKER","Failed to read registry, using empty",{file:Vt},new Error(String(t))),{}}}function Io(t){let e=ke.dirname(Vt);An(e,{recursive:!0}),Nr(Vt,JSON.stringify(t,null,2))}function mc(t){let e=wo();e[t]={installedAt:new Date().toISOString()},Io(e),d.info("WINDSURF","Registered project for auto-context updates",{workspacePath:t})}function fc(t){let e=wo();e[t]&&(delete e[t],Io(e),d.info("WINDSURF","Unregistered project",{workspacePath:t}))}function gc(t,e){let r=ke.join(t,".windsurf","rules"),n=ke.join(r,"claude-mem-context.md"),s=`${n}.tmp`;An(r,{recursive:!0});let o=`# Memory Context from Past Sessions
279
279
 
280
280
  The following context is from claude-mem, a persistent memory system that tracks your coding sessions.
281
281
 
@@ -306,7 +306,7 @@ Next steps:
306
306
  1. Start keepmind worker: keepmind start
307
307
  2. Restart Windsurf to load the hooks
308
308
  3. Context is injected via .windsurf/rules/claude-mem-context.md (workspace-level)
309
- `)}async function zf(t){let e=Rr(),r=ke.basename(t),n=!1;console.log(" Generating initial context...");try{n=await Zf(e,r,t)}catch(s){s instanceof Error?d.debug("WORKER","Worker not running during install",{},s):d.debug("WORKER","Worker not running during install",{},new Error(String(s)))}if(!n){let s=ke.join(t,".windsurf","rules");An(s,{recursive:!0});let o=ke.join(s,"claude-mem-context.md");Nr(o,`# Memory Context from Past Sessions
309
+ `)}async function zf(t){let e=Cr(),r=ke.basename(t),n=!1;console.log(" Generating initial context...");try{n=await Zf(e,r,t)}catch(s){s instanceof Error?d.debug("WORKER","Worker not running during install",{},s):d.debug("WORKER","Worker not running during install",{},new Error(String(s)))}if(!n){let s=ke.join(t,".windsurf","rules");An(s,{recursive:!0});let o=ke.join(s,"claude-mem-context.md");Nr(o,`# Memory Context from Past Sessions
310
310
 
311
311
  *No context yet. Complete your first session and context will appear here.*
312
312
 
@@ -320,21 +320,21 @@ Uninstallation complete!
320
320
  Claude-Mem Windsurf Hooks Status
321
321
  `),Xt(ae)){console.log("User-level: Installed"),console.log(` Config: ${ae}`);let t=null;try{t=JSON.parse(_n(ae,"utf-8"))}catch(r){let n=r instanceof Error?r:new Error(String(r));d.error("WORKER","Unable to parse hooks.json",{path:ae},n),console.log(" Mode: Unable to parse hooks.json")}if(t){let r=kn.filter(n=>(t?.hooks?.[n]??[]).some(s=>s.command.includes("worker-service")&&s.command.includes("windsurf")));console.log(` Events: ${r.length}/${kn.length} registered`);for(let n of r)console.log(` - ${n}`)}let e=ke.join(process.cwd(),".windsurf","rules","claude-mem-context.md");Xt(e)?console.log(" Context: Active (current workspace)"):console.log(" Context: Not yet generated for this workspace")}else console.log("User-level: Not installed"),console.log(`
322
322
  No hooks installed. Run: claude-mem windsurf install
323
- `);return console.log(""),0}var pc,ae,uc,Vt,kn,ko=S(()=>{"use strict";V();yn();J();wr();pc=ke.join(Jf(),".codeium","windsurf"),ae=ke.join(pc,"hooks.json"),uc=6e3,Vt=ke.join(M,"windsurf-projects.json"),kn=["pre_user_prompt","post_write_code","post_run_command","post_mcp_tool_use","post_cascade_response"]});var Fo={};he(Fo,{codexSpawn:()=>Po,installCodexCli:()=>_g,removeLegacyCodexMcpSearchConfig:()=>Rc,resolveCodexCommand:()=>yc,resolveCodexSpawnInvocation:()=>Tc,setTomlBooleanInTable:()=>Uo,setTomlFeatureEnabled:()=>vc,setTomlPluginEnabled:()=>Mo,uninstallCodexCli:()=>Ag});import ie from"path";import{homedir as Ao}from"os";import{execFileSync as No,spawnSync as rg}from"child_process";import{existsSync as qt,mkdirSync as ng,readFileSync as xo,writeFileSync as xn}from"fs";import{fileURLToPath as sg}from"url";function Ec(t){try{return process.platform==="win32"?No("where",[t],{stdio:"ignore"}):No("which",[t],{stdio:"ignore"}),!0}catch{return!1}}function cg(t){let e=ie.resolve(t);for(;;){if(qt(ie.join(e,".agents","plugins","marketplace.json")))return e;let r=ie.dirname(e);if(r===e)return null;e=r}}function Sc(t){return ig.filter(e=>!qt(ie.join(t,e)))}function ug(t){let e=ie.resolve(t),r=Sc(e);if(r.length>0)throw new Error(`Codex marketplace root ${e} is missing required files: ${r.join(", ")}`);return e}function dg(t){if(t)return ug(t);let e=[process.env.CLAUDE_PLUGIN_ROOT,process.env.PLUGIN_ROOT,process.cwd(),ie.dirname(sg(import.meta.url))].filter(r=>!!r);for(let r of e){let n=cg(r);if(n&&Sc(n).length===0)return n}throw new Error("Could not locate a Codex marketplace root with .agents/plugins/marketplace.json and plugin/.codex-plugin/plugin.json. Run npx keepmind@latest install from the package or repo root.")}function bc(){try{let e=No("where",["codex"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).split(/\r?\n/).map(r=>r.trim()).filter(Boolean);return e.find(r=>ag.has(ie.extname(r).toLowerCase()))??e[0]??null}catch{return null}}function pg(t){return`"${t.replace(/"/g,'""')}"`}function yc(t=process.platform,e=bc){return t!=="win32"?"codex":e()??"codex.cmd"}function Tc(t,e=process.platform,r=bc){let n=yc(e,r),s={encoding:"utf-8",stdio:["ignore","pipe","pipe"],...e==="win32"?{windowsHide:!0}:{}};return e==="win32"&&lg.has(ie.extname(n).toLowerCase())?{command:"cmd.exe",args:["/d","/s","/c",[n,...t].map(pg).join(" ")],options:s}:{command:n,args:t,options:s}}function Po(t){let e=Tc(t);return rg(e.command,e.args,e.options)}function Mr(t){let e=Po(t),r=console,n=e.stdout?.trimEnd(),s=e.stderr?.trimEnd();if(n&&r.log(n),s&&r.error(s),e.error)throw e.error;if(e.status!==0){let o=e.status??"unknown";throw new Error(`codex ${t.join(" ")} failed with exit code ${o}${s?`: ${s}`:""}`)}}function mg(t,e,r){try{return Mr(t),console.log(` ${e}`),!0}catch(n){let s=n instanceof Error?n.message:String(n);return console.warn(` ${r}: ${s}`),!1}}function fg(t){let e=t instanceof Error?t.message:String(t);return e.includes(`marketplace '${gt}' is already added from a different source`)||e.includes(`marketplace \`${gt}\` is already added from a different source`)}function gg(t){try{Mr(["plugin","marketplace","add",t]);return}catch(e){if(!fg(e))throw e}console.warn(` Codex marketplace ${gt} is already registered from another source; replacing it with ${t}.`),Mr(["plugin","marketplace","remove",gt]),Mr(["plugin","marketplace","add",t])}function Uo(t,e,r,n){let s=`${r} = ${n?"true":"false"}`,o=t.split(`
323
+ `);return console.log(""),0}var pc,ae,uc,Vt,kn,ko=S(()=>{"use strict";V();yn();J();wr();pc=ke.join(Jf(),".codeium","windsurf"),ae=ke.join(pc,"hooks.json"),uc=6e3,Vt=ke.join(M,"windsurf-projects.json"),kn=["pre_user_prompt","post_write_code","post_run_command","post_mcp_tool_use","post_cascade_response"]});var Fo={};he(Fo,{codexSpawn:()=>Po,installCodexCli:()=>_g,removeLegacyCodexMcpSearchConfig:()=>Cc,resolveCodexCommand:()=>yc,resolveCodexSpawnInvocation:()=>Tc,setTomlBooleanInTable:()=>Uo,setTomlFeatureEnabled:()=>vc,setTomlPluginEnabled:()=>Mo,uninstallCodexCli:()=>Ag});import ie from"path";import{homedir as Ao}from"os";import{execFileSync as No,spawnSync as rg}from"child_process";import{existsSync as qt,mkdirSync as ng,readFileSync as xo,writeFileSync as xn}from"fs";import{fileURLToPath as sg}from"url";function Ec(t){try{return process.platform==="win32"?No("where",[t],{stdio:"ignore"}):No("which",[t],{stdio:"ignore"}),!0}catch{return!1}}function cg(t){let e=ie.resolve(t);for(;;){if(qt(ie.join(e,".agents","plugins","marketplace.json")))return e;let r=ie.dirname(e);if(r===e)return null;e=r}}function Sc(t){return ig.filter(e=>!qt(ie.join(t,e)))}function ug(t){let e=ie.resolve(t),r=Sc(e);if(r.length>0)throw new Error(`Codex marketplace root ${e} is missing required files: ${r.join(", ")}`);return e}function dg(t){if(t)return ug(t);let e=[process.env.CLAUDE_PLUGIN_ROOT,process.env.PLUGIN_ROOT,process.cwd(),ie.dirname(sg(import.meta.url))].filter(r=>!!r);for(let r of e){let n=cg(r);if(n&&Sc(n).length===0)return n}throw new Error("Could not locate a Codex marketplace root with .agents/plugins/marketplace.json and plugin/.codex-plugin/plugin.json. Run npx keepmind@latest install from the package or repo root.")}function bc(){try{let e=No("where",["codex"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).split(/\r?\n/).map(r=>r.trim()).filter(Boolean);return e.find(r=>ag.has(ie.extname(r).toLowerCase()))??e[0]??null}catch{return null}}function pg(t){return`"${t.replace(/"/g,'""')}"`}function yc(t=process.platform,e=bc){return t!=="win32"?"codex":e()??"codex.cmd"}function Tc(t,e=process.platform,r=bc){let n=yc(e,r),s={encoding:"utf-8",stdio:["ignore","pipe","pipe"],...e==="win32"?{windowsHide:!0}:{}};return e==="win32"&&lg.has(ie.extname(n).toLowerCase())?{command:"cmd.exe",args:["/d","/s","/c",[n,...t].map(pg).join(" ")],options:s}:{command:n,args:t,options:s}}function Po(t){let e=Tc(t);return rg(e.command,e.args,e.options)}function Mr(t){let e=Po(t),r=console,n=e.stdout?.trimEnd(),s=e.stderr?.trimEnd();if(n&&r.log(n),s&&r.error(s),e.error)throw e.error;if(e.status!==0){let o=e.status??"unknown";throw new Error(`codex ${t.join(" ")} failed with exit code ${o}${s?`: ${s}`:""}`)}}function mg(t,e,r){try{return Mr(t),console.log(` ${e}`),!0}catch(n){let s=n instanceof Error?n.message:String(n);return console.warn(` ${r}: ${s}`),!1}}function fg(t){let e=t instanceof Error?t.message:String(t);return e.includes(`marketplace '${gt}' is already added from a different source`)||e.includes(`marketplace \`${gt}\` is already added from a different source`)}function gg(t){try{Mr(["plugin","marketplace","add",t]);return}catch(e){if(!fg(e))throw e}console.warn(` Codex marketplace ${gt} is already registered from another source; replacing it with ${t}.`),Mr(["plugin","marketplace","remove",gt]),Mr(["plugin","marketplace","add",t])}function Uo(t,e,r,n){let s=`${r} = ${n?"true":"false"}`,o=t.split(`
324
324
  `),i=o.findIndex(m=>m.trim()===e);if(i===-1){let m=t.trimEnd();return`${m}${m?`
325
325
 
326
326
  `:""}${e}
327
327
  ${s}
328
328
  `}let a=i+1;for(;a<o.length&&!/^\s*\[/.test(o[a]);)a+=1;let l=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),c=new RegExp(`^\\s*${l}\\s*=`),u=o.findIndex((m,f)=>f>i&&f<a&&c.test(m));return u===-1?o.splice(i+1,0,s):o[u]=s,o.join(`
329
- `)}function Mo(t,e,r){let n=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"');return Uo(t,`[plugins."${n}"]`,"enabled",r)}function vc(t,e,r){return Uo(t,"[features]",e,r)}function hg(t){let e=t.trim().match(/^\[([^\]]+)\]\s*$/);return e?e[1].replace(/\s+/g,"").replace(/"/g,""):null}function hc(t){return t==="mcp_servers.mcp-search"}function Eg(t){return typeof t=="string"&&t.startsWith("mcp_servers.mcp-search.")}function Sg(t){return/claude-mem/.test(t)}function Rc(t){let e=t.split(`
329
+ `)}function Mo(t,e,r){let n=e.replace(/\\/g,"\\\\").replace(/"/g,'\\"');return Uo(t,`[plugins."${n}"]`,"enabled",r)}function vc(t,e,r){return Uo(t,"[features]",e,r)}function hg(t){let e=t.trim().match(/^\[([^\]]+)\]\s*$/);return e?e[1].replace(/\s+/g,"").replace(/"/g,""):null}function hc(t){return t==="mcp_servers.mcp-search"}function Eg(t){return typeof t=="string"&&t.startsWith("mcp_servers.mcp-search.")}function Sg(t){return/claude-mem/.test(t)}function Cc(t){let e=t.split(`
330
330
  `),r=[],n=null,s=[];for(let a of e){let l=hg(a);l!==null?(r.push({header:n,text:s.join(`
331
331
  `)}),n=l,s=[a]):s.push(a)}return r.push({header:n,text:s.join(`
332
332
  `)}),r.some(a=>hc(a.header)&&Sg(a.text))?r.filter(a=>!hc(a.header)&&!Eg(a.header)).map(a=>a.text).join(`
333
333
  `).replace(/^\n+/,"").replace(/\n{3,}/g,`
334
334
 
335
- `):t}function Cc(t){if(!t&&!qt(Nn))return!1;ng(Lo,{recursive:!0});let e=qt(Nn)?xo(Nn,"utf-8"):"",r=e;t&&(r=vc(r,"hooks",!0),r=Rc(r));for(let n of og)r=Mo(r,n,!1);return r=Mo(r,Do,t),r===e?!1:(xn(Nn,r),!0)}function bg(){let t=Cc(!0);console.log(` Enabled Codex plugin: ${Do}${t?"":" (already enabled)"}`)}function yg(){let t=Cc(!1);console.log(` Disabled Codex plugin: ${Do}${t?"":" (already disabled)"}`)}function Tg(t){return t.match(/\d+\.\d+\.\d+/)?.[0]??null}function vg(){let t=Po(["--version"]),e=`${t.stdout??""}
335
+ `):t}function Rc(t){if(!t&&!qt(Nn))return!1;ng(Lo,{recursive:!0});let e=qt(Nn)?xo(Nn,"utf-8"):"",r=e;t&&(r=vc(r,"hooks",!0),r=Cc(r));for(let n of og)r=Mo(r,n,!1);return r=Mo(r,Do,t),r===e?!1:(xn(Nn,r),!0)}function bg(){let t=Rc(!0);console.log(` Enabled Codex plugin: ${Do}${t?"":" (already enabled)"}`)}function yg(){let t=Rc(!1);console.log(` Disabled Codex plugin: ${Do}${t?"":" (already disabled)"}`)}function Tg(t){return t.match(/\d+\.\d+\.\d+/)?.[0]??null}function vg(){let t=Po(["--version"]),e=`${t.stdout??""}
336
336
  ${t.stderr??""}`.trim();if(t.error)throw t.error;if(t.status!==0){console.warn(` Could not determine Codex CLI version. Continuing; plugin marketplace support requires ${Mn} or newer.${e?`
337
- ${e}`:""}`);return}let r=Tg(e);if(!r){console.warn(` Could not parse Codex CLI version from "${e||"<empty>"}". Continuing; plugin marketplace support requires ${Mn} or newer.`);return}if(r.localeCompare(Mn,void 0,{numeric:!0})<0)throw new Error(`Codex CLI ${r} is too old for plugin marketplace support. Update Codex CLI to ${Mn} or newer, then run: npx keepmind@latest install`)}function Rg(){if(!qt(ft))return!0;let t="<claude-mem-context>",e="</claude-mem-context>";try{return Cg(t,e),!0}catch(r){let n=r instanceof Error?r.message:String(r);return d.warn("WORKER","Failed to clean AGENTS.md context",{error:n}),!1}}function Cg(t,e){let r=xo(ft,"utf-8"),n=r.indexOf(t),s=r.indexOf(e);if(n===-1||s===-1)return;let o=r.substring(0,n).replace(/\n+$/,""),i=r.substring(s+e.length).replace(/^\n+/,""),a=(o+(i?`
337
+ ${e}`:""}`);return}let r=Tg(e);if(!r){console.warn(` Could not parse Codex CLI version from "${e||"<empty>"}". Continuing; plugin marketplace support requires ${Mn} or newer.`);return}if(r.localeCompare(Mn,void 0,{numeric:!0})<0)throw new Error(`Codex CLI ${r} is too old for plugin marketplace support. Update Codex CLI to ${Mn} or newer, then run: npx keepmind@latest install`)}function Cg(){if(!qt(ft))return!0;let t="<claude-mem-context>",e="</claude-mem-context>";try{return Rg(t,e),!0}catch(r){let n=r instanceof Error?r.message:String(r);return d.warn("WORKER","Failed to clean AGENTS.md context",{error:n}),!1}}function Rg(t,e){let r=xo(ft,"utf-8"),n=r.indexOf(t),s=r.indexOf(e);if(n===-1||s===-1)return;let o=r.substring(0,n).replace(/\n+$/,""),i=r.substring(s+e.length).replace(/^\n+/,""),a=(o+(i?`
338
338
 
339
339
  `+i:"")).trim();a?xn(ft,a+`
340
340
  `):xn(ft,""),console.log(` Removed legacy global context from ${ft}`)}function _o(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function wg(t){return t.name==="codex"||t.schema==="codex"}function Ig(t){return t==="~"?Ao():t.startsWith("~/")||t.startsWith("~\\")?ie.join(Ao(),t.slice(2)):t}function Og(t){if(t.mode!=="agents")return!1;let e=t.updateOn;return Array.isArray(e)&&e.length===2&&e.includes("session_start")&&e.includes("session_end")?t.path===void 0?!0:typeof t.path=="string"&&ie.resolve(Ig(t.path))===ft:!1}function kg(){if(!qt(Yt))return!0;try{let t=JSON.parse(xo(Yt,"utf-8"));if(!_o(t)||!Array.isArray(t.watches))return!0;let e=!1;for(let r of t.watches)!_o(r)||!wg(r)||!_o(r.context)||!Og(r.context)||(delete r.context,e=!0);return e&&(xn(Yt,`${JSON.stringify(t,null,2)}
@@ -363,17 +363,17 @@ Failed to disable legacy transcript AGENTS.md context in ${Yt}.`),t=!0)}catch(e)
363
363
  Legacy context cleanup failed: ${r}`),t=!0}return t?(console.error(`
364
364
  Uninstallation completed with errors.`),1):(console.log(`
365
365
  Uninstallation complete!`),console.log(`Restart Codex CLI to apply changes.
366
- `),0)}var Lo,ft,Yt,Nn,gt,Do,og,Mn,ig,ag,lg,wc,Ic,Wo=S(()=>{"use strict";V();J();Lo=ie.join(Ao(),".codex"),ft=ie.join(Lo,"AGENTS.md"),Yt=P.transcriptsConfig(),Nn=ie.join(Lo,"config.toml"),gt="claude-mem-local",Do=`claude-mem@${gt}`,og=["claude-mem@thedotmack"],Mn="0.128.0",ig=[ie.join(".agents","plugins","marketplace.json"),ie.join("plugin",".codex-plugin","plugin.json"),ie.join("plugin",".mcp.json"),ie.join("plugin","hooks","codex-hooks.json"),ie.join("plugin","skills","mem-search","SKILL.md")],ag=new Set([".cmd",".exe",".bat",".com"]),lg=new Set([".cmd",".bat"]);wc=Rg;Ic=kg});var Ac={};he(Ac,{MCP_IDE_INSTALLERS:()=>Hg,installGooseMcpIntegration:()=>_c});import _e from"path";import{homedir as Pn}from"os";import{existsSync as Oc,readFileSync as Ng,writeFileSync as xr,mkdirSync as kc}from"fs";function xg(t){return{command:io(),args:[t]}}function Lg(t,e,r="mcpServers"){let n=_e.dirname(t);kc(n,{recursive:!0});let s=z(t,{});s[r]||(s[r]={}),s[r]["claude-mem"]=xg(e),xr(t,JSON.stringify(s,null,2)+`
366
+ `),0)}var Lo,ft,Yt,Nn,gt,Do,og,Mn,ig,ag,lg,wc,Ic,Wo=S(()=>{"use strict";V();J();Lo=ie.join(Ao(),".codex"),ft=ie.join(Lo,"AGENTS.md"),Yt=P.transcriptsConfig(),Nn=ie.join(Lo,"config.toml"),gt="claude-mem-local",Do=`claude-mem@${gt}`,og=["claude-mem@thedotmack"],Mn="0.128.0",ig=[ie.join(".agents","plugins","marketplace.json"),ie.join("plugin",".codex-plugin","plugin.json"),ie.join("plugin",".mcp.json"),ie.join("plugin","hooks","codex-hooks.json"),ie.join("plugin","skills","mem-search","SKILL.md")],ag=new Set([".cmd",".exe",".bat",".com"]),lg=new Set([".cmd",".bat"]);wc=Cg;Ic=kg});var Ac={};he(Ac,{MCP_IDE_INSTALLERS:()=>Hg,installGooseMcpIntegration:()=>_c});import _e from"path";import{homedir as Pn}from"os";import{existsSync as Oc,readFileSync as Ng,writeFileSync as xr,mkdirSync as kc}from"fs";function xg(t){return{command:io(),args:[t]}}function Lg(t,e,r="mcpServers"){let n=_e.dirname(t);kc(n,{recursive:!0});let s=z(t,{});s[r]||(s[r]={}),s[r]["claude-mem"]=xg(e),xr(t,JSON.stringify(s,null,2)+`
367
367
  `)}function Ln(t){return async()=>{console.log(`
368
368
  Installing Claude-Mem MCP integration for ${t.ideLabel}...
369
- `);let e=Cr();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/mcp-server.cjs"),1;let r=t.configPath,n=t.ideId==="warp"&&!Oc(_e.dirname(r)),s;t.contextFile&&(s=t.contextFile.path);try{return Dg(t,r,e,n,s),0}catch(o){let i=o instanceof Error?o.message:String(o);return console.error(`
369
+ `);let e=Rr();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/mcp-server.cjs"),1;let r=t.configPath,n=t.ideId==="warp"&&!Oc(_e.dirname(r)),s;t.contextFile&&(s=t.contextFile.path);try{return Dg(t,r,e,n,s),0}catch(o){let i=o instanceof Error?o.message:String(o);return console.error(`
370
370
  Installation failed: ${i}`),1}}}function Dg(t,e,r,n,s){n?console.log(" Note: ~/.warp/ not found. MCP may need to be configured via Warp Drive UI."):(Lg(e,r,t.configKey),console.log(` MCP config written to: ${e}`)),s&&(In(s,Mg),console.log(` Context placeholder written to: ${s}`));let o=[`
371
371
  Installation complete!
372
372
  `];o.push(`MCP config: ${e}`),s&&o.push(`Context: ${s}`),o.push(""),o.push("Note: This is an MCP-only integration providing search tools and context."),o.push(`Transcript capture is not available for ${t.ideLabel}.`),t.ideId==="warp"&&o.push("If MCP config via file is not supported, configure MCP through Warp Drive UI."),o.push(""),o.push("Next steps:"),o.push(" 1. Start keepmind worker: npx keepmind start"),o.push(` 2. Restart ${t.ideLabel} to pick up the MCP server`),o.push(""),console.log(o.join(`
373
373
  `))}function jg(){return _e.join(Pn(),".config","goose","config.yaml")}function Gg(t){return t.includes("claude-mem:")&&t.includes("mcpServers:")}function Dn(t,e=!1){return[...e?["mcpServers:"]:[]," claude-mem:",` command: ${io()}`," args:",` - ${t}`].join(`
374
374
  `)}async function _c(){console.log(`
375
375
  Installing Claude-Mem MCP integration for Goose...
376
- `);let t=Cr();if(!t)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/mcp-server.cjs"),1;let e=jg(),r=_e.dirname(e);try{return kc(r,{recursive:!0}),Bg(e,t),0}catch(n){let s=n instanceof Error?n.message:String(n);return console.error(`
376
+ `);let t=Rr();if(!t)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/keepmind/plugin/scripts/mcp-server.cjs"),1;let e=jg(),r=_e.dirname(e);try{return kc(r,{recursive:!0}),Bg(e,t),0}catch(n){let s=n instanceof Error?n.message:String(n);return console.error(`
377
377
  Installation failed: ${s}`),1}}function Bg(t,e){if(Oc(t)){let r=Ng(t,"utf-8");if(Gg(r)){let n=/( {2}claude-mem:\n(?:.*\n)*?(?= {2}\S|\n\n|^\S|$))/m,s=Dn(e)+`
378
378
  `;if(!n.test(r))throw new Error("Found mcpServers/claude-mem markers but could not locate a replaceable claude-mem block");r=r.replace(n,s),xr(t,r),console.log(` Updated existing claude-mem entry in: ${t}`)}else if(r.includes("mcpServers:")){let s=r.indexOf("mcpServers:")+11,o=`
379
379
  `+Dn(e);r=r.slice(0,s)+o+r.slice(s),xr(t,r),console.log(` Added claude-mem to existing mcpServers in: ${t}`)}else{let n=`
@@ -408,7 +408,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
408
408
  AND up.created_at_epoch >= ?
409
409
  ORDER BY up.created_at_epoch DESC
410
410
  LIMIT 1
411
- `).get(a,r,o)??void 0}var Kc=S(()=>{"use strict";zo()});function uh(t){let e=Object.fromEntries(Yc.map(s=>[s,0]));Vc.lastIndex=0;let r=0,n=t.replace(Vc,(s,o)=>(e[o]=(e[o]??0)+1,r+=1,""));return r>Xc&&d.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:r,maxAllowed:Xc,contentLength:t.length}),{stripped:n.trim(),counts:e}}function qc(t){return uh(t).stripped}var Yc,Vc,Xc,dh,wR,IR,zc=S(()=>{"use strict";V();Yc=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],Vc=new RegExp(`<(${Yc.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g"),Xc=100;dh=["task-notification"],wR=new RegExp(`^\\s*<(${dh.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),IR=256*1024});function Gn(t){let e=t.trim(),n=qc(t).trim()||e;return n.length<=Zo?n:(d.debug("DB","Truncated stored prompt text to the configured cap",{originalLength:n.length,storedLength:Zo}),`${n.slice(0,Zo-1)}\u2026`)}var Zo,Zc=S(()=>{"use strict";zc();V();Zo=4e3});var $o={};he($o,{SessionStore:()=>Qo});function ph(t,e){return{customTitle:t,platformSource:e?ue(e):void 0}}var Qo,ei=S(()=>{"use strict";Lr();J();V();Lc();Dc();Pc();Fc();Wc();Yo();Bc();zo();Kc();Zc();Qo=class{db;redactEnabled;redactOpts;mq;rt(e){return this.redactEnabled?Jo(e,this.redactOpts):e}rl(e){return this.redactEnabled?Fn(e,this.redactOpts):e}constructor(e=B){try{this.mq=Uc();let r=this.mq.redactSecrets;this.redactEnabled=r.enabled,this.redactOpts={entropySweep:r.entropySweep,entropyThreshold:r.entropyThreshold}}catch{this.mq=Vo,this.redactEnabled=process.env.CLAUDE_MEM_REDACT_SECRETS!=="0"&&process.env.CLAUDE_MEM_REDACT_SECRETS!=="false",this.redactOpts={entropySweep:!0,entropyThreshold:4}}if(e instanceof be)this.db=e;else{e!==":memory:"&&nn(M);let r=e===B?cr():e;this.db=new be(r),this.db.run("PRAGMA journal_mode = WAL"),this.db.run("PRAGMA synchronous = NORMAL"),this.db.run("PRAGMA foreign_keys = ON"),this.db.run("PRAGMA journal_size_limit = 4194304")}this.initializeSchema(),this.ensureWorkerPortColumn(),this.ensurePromptTrackingColumns(),this.removeSessionSummariesUniqueConstraint(),this.addObservationHierarchicalFields(),this.makeObservationsTextNullable(),this.createUserPromptsTable(),this.ensureDiscoveryTokensColumn(),this.createPendingMessagesTable(),this.renameSessionIdColumns(),this.repairSessionIdColumnRename(),this.addFailedAtEpochColumn(),this.addOnUpdateCascadeToForeignKeys(),this.addObservationContentHashColumn(),this.addSessionCustomTitleColumn(),this.addSessionPlatformSourceColumn(),this.addObservationModelColumns(),this.ensureMergedIntoProjectColumns(),this.addObservationSubagentColumns(),this.addObservationsUniqueContentHashIndex(),this.addObservationsMetadataColumn(),this.dropDeadPendingMessagesColumns(),this.ensurePendingMessagesToolUseIdColumn(),this.dropWorkerPidColumn(),this.ensureSDKSessionsPlatformContentIdentity(),this.ensureUserPromptsSessionDbId(),this.ensurePendingMessagesSessionToolUniqueIndex(),this.addObservationImportanceColumn(),this.addObservationBitemporalColumns(),this.addObservationLastUsedColumn()}addObservationBitemporalColumns(){let e=this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(37),r=this.db.query("PRAGMA table_info(observations)").all(),n=s=>r.some(o=>o.name===s);e&&n("valid_from")&&n("valid_to")&&n("subject_key")||(n("valid_from")||this.db.run("ALTER TABLE observations ADD COLUMN valid_from INTEGER"),n("valid_to")||this.db.run("ALTER TABLE observations ADD COLUMN valid_to INTEGER"),n("subject_key")||this.db.run("ALTER TABLE observations ADD COLUMN subject_key TEXT"),this.db.run("UPDATE observations SET valid_from = created_at_epoch WHERE valid_from IS NULL"),this.db.run("CREATE INDEX IF NOT EXISTS idx_obs_subject_valid ON observations(project, subject_key, valid_to)"),e||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(37,new Date().toISOString()))}addObservationLastUsedColumn(){let e=this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(38),n=this.db.query("PRAGMA table_info(observations)").all().some(s=>s.name==="last_used_at");e&&n||(n||this.db.run("ALTER TABLE observations ADD COLUMN last_used_at INTEGER"),this.db.run("CREATE INDEX IF NOT EXISTS idx_obs_last_used ON observations(last_used_at)"),e||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(38,new Date().toISOString()))}addObservationImportanceColumn(){let e=this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(36),n=this.db.query("PRAGMA table_info(observations)").all().some(s=>s.name==="importance");e&&n||(n||this.db.run("ALTER TABLE observations ADD COLUMN importance INTEGER"),this.db.run("CREATE INDEX IF NOT EXISTS idx_observations_importance ON observations(importance)"),e||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(36,new Date().toISOString()))}getIndexColumns(e){return this.db.query(`PRAGMA index_info(${JSON.stringify(e)})`).all().map(r=>r.name)}hasUniqueIndexOnColumns(e,r){return this.db.query(`PRAGMA index_list(${e})`).all().some(s=>{if(s.unique!==1)return!1;let o=this.getIndexColumns(s.name);return o.length===r.length&&o.every((i,a)=>i===r[a])})}resolvePromptSessionDbId(e,r,n){if(r!==void 0)return r;let s=n?ue(n):void 0;return s?this.db.prepare(`
411
+ `).get(a,r,o)??void 0}var Kc=S(()=>{"use strict";zo()});function uh(t){let e=Object.fromEntries(Yc.map(s=>[s,0]));Vc.lastIndex=0;let r=0,n=t.replace(Vc,(s,o)=>(e[o]=(e[o]??0)+1,r+=1,""));return r>Xc&&d.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:r,maxAllowed:Xc,contentLength:t.length}),{stripped:n.trim(),counts:e}}function qc(t){return uh(t).stripped}var Yc,Vc,Xc,dh,wC,IC,zc=S(()=>{"use strict";V();Yc=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],Vc=new RegExp(`<(${Yc.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g"),Xc=100;dh=["task-notification"],wC=new RegExp(`^\\s*<(${dh.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),IC=256*1024});function Gn(t){let e=t.trim(),n=qc(t).trim()||e;return n.length<=Zo?n:(d.debug("DB","Truncated stored prompt text to the configured cap",{originalLength:n.length,storedLength:Zo}),`${n.slice(0,Zo-1)}\u2026`)}var Zo,Zc=S(()=>{"use strict";zc();V();Zo=4e3});var $o={};he($o,{SessionStore:()=>Qo});function ph(t,e){return{customTitle:t,platformSource:e?ue(e):void 0}}var Qo,ei=S(()=>{"use strict";Lr();J();V();Lc();Dc();Pc();Fc();Wc();Yo();Bc();zo();Kc();Zc();Qo=class{db;redactEnabled;redactOpts;mq;rt(e){return this.redactEnabled?Jo(e,this.redactOpts):e}rl(e){return this.redactEnabled?Fn(e,this.redactOpts):e}constructor(e=B){try{this.mq=Uc();let r=this.mq.redactSecrets;this.redactEnabled=r.enabled,this.redactOpts={entropySweep:r.entropySweep,entropyThreshold:r.entropyThreshold}}catch{this.mq=Vo,this.redactEnabled=process.env.CLAUDE_MEM_REDACT_SECRETS!=="0"&&process.env.CLAUDE_MEM_REDACT_SECRETS!=="false",this.redactOpts={entropySweep:!0,entropyThreshold:4}}if(e instanceof be)this.db=e;else{e!==":memory:"&&nn(M);let r=e===B?cr():e;this.db=new be(r),this.db.run("PRAGMA journal_mode = WAL"),this.db.run("PRAGMA synchronous = NORMAL"),this.db.run("PRAGMA foreign_keys = ON"),this.db.run("PRAGMA journal_size_limit = 4194304")}this.initializeSchema(),this.ensureWorkerPortColumn(),this.ensurePromptTrackingColumns(),this.removeSessionSummariesUniqueConstraint(),this.addObservationHierarchicalFields(),this.makeObservationsTextNullable(),this.createUserPromptsTable(),this.ensureDiscoveryTokensColumn(),this.createPendingMessagesTable(),this.renameSessionIdColumns(),this.repairSessionIdColumnRename(),this.addFailedAtEpochColumn(),this.addOnUpdateCascadeToForeignKeys(),this.addObservationContentHashColumn(),this.addSessionCustomTitleColumn(),this.addSessionPlatformSourceColumn(),this.addObservationModelColumns(),this.ensureMergedIntoProjectColumns(),this.addObservationSubagentColumns(),this.addObservationsUniqueContentHashIndex(),this.addObservationsMetadataColumn(),this.dropDeadPendingMessagesColumns(),this.ensurePendingMessagesToolUseIdColumn(),this.dropWorkerPidColumn(),this.ensureSDKSessionsPlatformContentIdentity(),this.ensureUserPromptsSessionDbId(),this.ensurePendingMessagesSessionToolUniqueIndex(),this.addObservationImportanceColumn(),this.addObservationBitemporalColumns(),this.addObservationLastUsedColumn()}addObservationBitemporalColumns(){let e=this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(37),r=this.db.query("PRAGMA table_info(observations)").all(),n=s=>r.some(o=>o.name===s);e&&n("valid_from")&&n("valid_to")&&n("subject_key")||(n("valid_from")||this.db.run("ALTER TABLE observations ADD COLUMN valid_from INTEGER"),n("valid_to")||this.db.run("ALTER TABLE observations ADD COLUMN valid_to INTEGER"),n("subject_key")||this.db.run("ALTER TABLE observations ADD COLUMN subject_key TEXT"),this.db.run("UPDATE observations SET valid_from = created_at_epoch WHERE valid_from IS NULL"),this.db.run("CREATE INDEX IF NOT EXISTS idx_obs_subject_valid ON observations(project, subject_key, valid_to)"),e||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(37,new Date().toISOString()))}addObservationLastUsedColumn(){let e=this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(38),n=this.db.query("PRAGMA table_info(observations)").all().some(s=>s.name==="last_used_at");e&&n||(n||this.db.run("ALTER TABLE observations ADD COLUMN last_used_at INTEGER"),this.db.run("CREATE INDEX IF NOT EXISTS idx_obs_last_used ON observations(last_used_at)"),e||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(38,new Date().toISOString()))}addObservationImportanceColumn(){let e=this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(36),n=this.db.query("PRAGMA table_info(observations)").all().some(s=>s.name==="importance");e&&n||(n||this.db.run("ALTER TABLE observations ADD COLUMN importance INTEGER"),this.db.run("CREATE INDEX IF NOT EXISTS idx_observations_importance ON observations(importance)"),e||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(36,new Date().toISOString()))}getIndexColumns(e){return this.db.query(`PRAGMA index_info(${JSON.stringify(e)})`).all().map(r=>r.name)}hasUniqueIndexOnColumns(e,r){return this.db.query(`PRAGMA index_list(${e})`).all().some(s=>{if(s.unique!==1)return!1;let o=this.getIndexColumns(s.name);return o.length===r.length&&o.every((i,a)=>i===r[a])})}resolvePromptSessionDbId(e,r,n){if(r!==void 0)return r;let s=n?ue(n):void 0;return s?this.db.prepare(`
412
412
  SELECT id
413
413
  FROM sdk_sessions
414
414
  WHERE COALESCE(NULLIF(platform_source, ''), ?) = ?
@@ -726,7 +726,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
726
726
  created_at_epoch INTEGER NOT NULL,
727
727
  FOREIGN KEY (session_db_id) REFERENCES sdk_sessions(id) ON DELETE CASCADE
728
728
  )
729
- `),this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_session ON pending_messages(session_db_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_status ON pending_messages(status)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_claude_session ON pending_messages(content_session_id)"),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(16,new Date().toISOString()),d.debug("DB","pending_messages table created successfully")}renameSessionIdColumns(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(17))return;d.debug("DB","Checking session ID columns for semantic clarity rename");let r=0,n=(s,o,i)=>{let a=this.db.query(`PRAGMA table_info(${s})`).all(),l=a.some(u=>u.name===o);return a.some(u=>u.name===i)?!1:l?(this.db.run(`ALTER TABLE ${s} RENAME COLUMN ${o} TO ${i}`),d.debug("DB",`Renamed ${s}.${o} to ${i}`),!0):(d.warn("DB",`Column ${o} not found in ${s}, skipping rename`),!1)};n("sdk_sessions","claude_session_id","content_session_id")&&r++,n("sdk_sessions","sdk_session_id","memory_session_id")&&r++,n("pending_messages","claude_session_id","content_session_id")&&r++,n("observations","sdk_session_id","memory_session_id")&&r++,n("session_summaries","sdk_session_id","memory_session_id")&&r++,n("user_prompts","claude_session_id","content_session_id")&&r++,this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(17,new Date().toISOString()),r>0?d.debug("DB",`Successfully renamed ${r} session ID columns`):d.debug("DB","No session ID column renames needed (already up to date)")}repairSessionIdColumnRename(){this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(19)||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(19,new Date().toISOString())}addFailedAtEpochColumn(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(20))return;this.db.query("PRAGMA table_info(pending_messages)").all().some(s=>s.name==="failed_at_epoch")||(this.db.run("ALTER TABLE pending_messages ADD COLUMN failed_at_epoch INTEGER"),d.debug("DB","Added failed_at_epoch column to pending_messages table")),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(20,new Date().toISOString())}addOnUpdateCascadeToForeignKeys(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(21))return;d.debug("DB","Adding ON UPDATE CASCADE to FK constraints on observations and session_summaries"),this.db.run("PRAGMA foreign_keys = OFF"),this.db.run("BEGIN TRANSACTION"),this.db.run("DROP TRIGGER IF EXISTS observations_ai"),this.db.run("DROP TRIGGER IF EXISTS observations_ad"),this.db.run("DROP TRIGGER IF EXISTS observations_au"),this.db.run("DROP TABLE IF EXISTS observations_new");let r=this.db.query("PRAGMA table_info(observations)").all(),n=r.some(R=>R.name==="metadata"),s=r.some(R=>R.name==="content_hash"),o=n?`,
729
+ `),this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_session ON pending_messages(session_db_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_status ON pending_messages(status)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_pending_messages_claude_session ON pending_messages(content_session_id)"),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(16,new Date().toISOString()),d.debug("DB","pending_messages table created successfully")}renameSessionIdColumns(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(17))return;d.debug("DB","Checking session ID columns for semantic clarity rename");let r=0,n=(s,o,i)=>{let a=this.db.query(`PRAGMA table_info(${s})`).all(),l=a.some(u=>u.name===o);return a.some(u=>u.name===i)?!1:l?(this.db.run(`ALTER TABLE ${s} RENAME COLUMN ${o} TO ${i}`),d.debug("DB",`Renamed ${s}.${o} to ${i}`),!0):(d.warn("DB",`Column ${o} not found in ${s}, skipping rename`),!1)};n("sdk_sessions","claude_session_id","content_session_id")&&r++,n("sdk_sessions","sdk_session_id","memory_session_id")&&r++,n("pending_messages","claude_session_id","content_session_id")&&r++,n("observations","sdk_session_id","memory_session_id")&&r++,n("session_summaries","sdk_session_id","memory_session_id")&&r++,n("user_prompts","claude_session_id","content_session_id")&&r++,this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(17,new Date().toISOString()),r>0?d.debug("DB",`Successfully renamed ${r} session ID columns`):d.debug("DB","No session ID column renames needed (already up to date)")}repairSessionIdColumnRename(){this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(19)||this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(19,new Date().toISOString())}addFailedAtEpochColumn(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(20))return;this.db.query("PRAGMA table_info(pending_messages)").all().some(s=>s.name==="failed_at_epoch")||(this.db.run("ALTER TABLE pending_messages ADD COLUMN failed_at_epoch INTEGER"),d.debug("DB","Added failed_at_epoch column to pending_messages table")),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(20,new Date().toISOString())}addOnUpdateCascadeToForeignKeys(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(21))return;d.debug("DB","Adding ON UPDATE CASCADE to FK constraints on observations and session_summaries"),this.db.run("PRAGMA foreign_keys = OFF"),this.db.run("BEGIN TRANSACTION"),this.db.run("DROP TRIGGER IF EXISTS observations_ai"),this.db.run("DROP TRIGGER IF EXISTS observations_ad"),this.db.run("DROP TRIGGER IF EXISTS observations_au"),this.db.run("DROP TABLE IF EXISTS observations_new");let r=this.db.query("PRAGMA table_info(observations)").all(),n=r.some(C=>C.name==="metadata"),s=r.some(C=>C.name==="content_hash"),o=n?`,
730
730
  metadata TEXT`:"",i=n?", metadata":"",a=s?`,
731
731
  content_hash TEXT`:"",l=s?", content_hash":"",c=`
732
732
  CREATE TABLE observations_new (
@@ -822,7 +822,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
822
822
  INSERT INTO session_summaries_fts(rowid, request, investigated, learned, completed, next_steps, notes)
823
823
  VALUES (new.id, new.request, new.investigated, new.learned, new.completed, new.next_steps, new.notes);
824
824
  END;
825
- `;try{this.recreateObservationsWithCascade(c,u,m,f),this.recreateSessionSummariesWithCascade(E,h,b,y),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(21,new Date().toISOString()),this.db.run("COMMIT"),this.db.run("PRAGMA foreign_keys = ON"),d.debug("DB","Successfully added ON UPDATE CASCADE to FK constraints")}catch(R){throw this.db.run("ROLLBACK"),this.db.run("PRAGMA foreign_keys = ON"),R instanceof Error?R:new Error(String(R))}}recreateObservationsWithCascade(e,r,n,s){this.db.run(e),this.db.run(r),this.db.run("DROP TABLE observations"),this.db.run("ALTER TABLE observations_new RENAME TO observations"),this.db.run(n),this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='observations_fts'").all().length>0&&this.db.run(s)}recreateSessionSummariesWithCascade(e,r,n,s){this.db.run(e),this.db.run(r),this.db.run("DROP TABLE session_summaries"),this.db.run("ALTER TABLE session_summaries_new RENAME TO session_summaries"),this.db.run(n),this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='session_summaries_fts'").all().length>0&&this.db.run(s)}addObservationContentHashColumn(){if(this.db.query("PRAGMA table_info(observations)").all().some(n=>n.name==="content_hash")){this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(22,new Date().toISOString());return}this.db.run("ALTER TABLE observations ADD COLUMN content_hash TEXT"),this.db.run("UPDATE observations SET content_hash = substr(hex(randomblob(8)), 1, 16) WHERE content_hash IS NULL"),this.db.run("CREATE INDEX IF NOT EXISTS idx_observations_content_hash ON observations(content_hash, created_at_epoch)"),d.debug("DB","Added content_hash column to observations table with backfill and index"),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(22,new Date().toISOString())}addSessionCustomTitleColumn(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(23))return;this.db.query("PRAGMA table_info(sdk_sessions)").all().some(s=>s.name==="custom_title")||(this.db.run("ALTER TABLE sdk_sessions ADD COLUMN custom_title TEXT"),d.debug("DB","Added custom_title column to sdk_sessions table")),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(23,new Date().toISOString())}addSessionPlatformSourceColumn(){let r=this.db.query("PRAGMA table_info(sdk_sessions)").all().some(i=>i.name==="platform_source"),s=this.db.query("PRAGMA index_list(sdk_sessions)").all().some(i=>i.name==="idx_sdk_sessions_platform_source");this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(24)&&r&&s||(r||(this.db.run(`ALTER TABLE sdk_sessions ADD COLUMN platform_source TEXT NOT NULL DEFAULT '${_}'`),d.debug("DB","Added platform_source column to sdk_sessions table")),this.db.run(`
825
+ `;try{this.recreateObservationsWithCascade(c,u,m,f),this.recreateSessionSummariesWithCascade(E,h,b,y),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(21,new Date().toISOString()),this.db.run("COMMIT"),this.db.run("PRAGMA foreign_keys = ON"),d.debug("DB","Successfully added ON UPDATE CASCADE to FK constraints")}catch(C){throw this.db.run("ROLLBACK"),this.db.run("PRAGMA foreign_keys = ON"),C instanceof Error?C:new Error(String(C))}}recreateObservationsWithCascade(e,r,n,s){this.db.run(e),this.db.run(r),this.db.run("DROP TABLE observations"),this.db.run("ALTER TABLE observations_new RENAME TO observations"),this.db.run(n),this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='observations_fts'").all().length>0&&this.db.run(s)}recreateSessionSummariesWithCascade(e,r,n,s){this.db.run(e),this.db.run(r),this.db.run("DROP TABLE session_summaries"),this.db.run("ALTER TABLE session_summaries_new RENAME TO session_summaries"),this.db.run(n),this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='session_summaries_fts'").all().length>0&&this.db.run(s)}addObservationContentHashColumn(){if(this.db.query("PRAGMA table_info(observations)").all().some(n=>n.name==="content_hash")){this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(22,new Date().toISOString());return}this.db.run("ALTER TABLE observations ADD COLUMN content_hash TEXT"),this.db.run("UPDATE observations SET content_hash = substr(hex(randomblob(8)), 1, 16) WHERE content_hash IS NULL"),this.db.run("CREATE INDEX IF NOT EXISTS idx_observations_content_hash ON observations(content_hash, created_at_epoch)"),d.debug("DB","Added content_hash column to observations table with backfill and index"),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(22,new Date().toISOString())}addSessionCustomTitleColumn(){if(this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(23))return;this.db.query("PRAGMA table_info(sdk_sessions)").all().some(s=>s.name==="custom_title")||(this.db.run("ALTER TABLE sdk_sessions ADD COLUMN custom_title TEXT"),d.debug("DB","Added custom_title column to sdk_sessions table")),this.db.prepare("INSERT OR IGNORE INTO schema_versions (version, applied_at) VALUES (?, ?)").run(23,new Date().toISOString())}addSessionPlatformSourceColumn(){let r=this.db.query("PRAGMA table_info(sdk_sessions)").all().some(i=>i.name==="platform_source"),s=this.db.query("PRAGMA index_list(sdk_sessions)").all().some(i=>i.name==="idx_sdk_sessions_platform_source");this.db.prepare("SELECT version FROM schema_versions WHERE version = ?").get(24)&&r&&s||(r||(this.db.run(`ALTER TABLE sdk_sessions ADD COLUMN platform_source TEXT NOT NULL DEFAULT '${_}'`),d.debug("DB","Added platform_source column to sdk_sessions table")),this.db.run(`
826
826
  UPDATE sdk_sessions
827
827
  SET platform_source = '${_}'
828
828
  WHERE platform_source IS NULL OR platform_source = ''
@@ -1032,7 +1032,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1032
1032
  ${y}
1033
1033
  ${m}
1034
1034
  ${f}
1035
- `).all(...h);if(!u)return A;let D=new Map(A.map(T=>[T.id,T])),C=e.map(T=>D.get(T)).filter(T=>!!T);return s?C.slice(0,s):C}getSummaryForSession(e,r){let n=[e],s="";return r&&(s=`
1035
+ `).all(...h);if(!u)return A;let D=new Map(A.map(T=>[T.id,T])),R=e.map(T=>D.get(T)).filter(T=>!!T);return s?R.slice(0,s):R}getSummaryForSession(e,r){let n=[e],s="";return r&&(s=`
1036
1036
  AND EXISTS (
1037
1037
  SELECT 1
1038
1038
  FROM sdk_sessions sdk
@@ -1101,7 +1101,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1101
1101
  FROM user_prompts
1102
1102
  WHERE content_session_id = ? AND prompt_number = ?
1103
1103
  LIMIT 1
1104
- `).get(e,r)?.prompt_text??null}storeObservation(e,r,n,s,o=0,i,a){let l=i??Date.now(),c=new Date(l).toISOString(),u=this.rt(n.title),m=this.rt(n.subtitle),f=this.rt(n.narrative),E=this.rl(n.facts),h=this.rt(n.metadata??null),b=Go(e,u??null,f??null),y=Xo({type:n.type,narrative:f,files_modified:n.files_modified}),R;if(this.mq.reconcile.enabled){let T=this.reconcileBeforeInsert(r,n.type,u??null,f??null);if(T.action==="NOOP"&&T.candidateId){let v=this.db.prepare("SELECT id, created_at_epoch FROM observations WHERE id = ?").get(T.candidateId);if(v)return{id:v.id,createdAtEpoch:v.created_at_epoch}}else T.action==="UPDATE"&&(R=T.candidateId)}let D=this.db.prepare(`
1104
+ `).get(e,r)?.prompt_text??null}storeObservation(e,r,n,s,o=0,i,a){let l=i??Date.now(),c=new Date(l).toISOString(),u=this.rt(n.title),m=this.rt(n.subtitle),f=this.rt(n.narrative),E=this.rl(n.facts),h=this.rt(n.metadata??null),b=Go(e,u??null,f??null),y=Xo({type:n.type,narrative:f,files_modified:n.files_modified}),C;if(this.mq.reconcile.enabled){let T=this.reconcileBeforeInsert(r,n.type,u??null,f??null);if(T.action==="NOOP"&&T.candidateId){let v=this.db.prepare("SELECT id, created_at_epoch FROM observations WHERE id = ?").get(T.candidateId);if(v)return{id:v.id,createdAtEpoch:v.created_at_epoch}}else T.action==="UPDATE"&&(C=T.candidateId)}let D=this.db.prepare(`
1105
1105
  INSERT INTO observations
1106
1106
  (memory_session_id, project, type, title, subtitle, facts, narrative, concepts,
1107
1107
  files_read, files_modified, prompt_number, discovery_tokens, agent_type, agent_id, content_hash, created_at, created_at_epoch,
@@ -1109,7 +1109,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1109
1109
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1110
1110
  ON CONFLICT(memory_session_id, content_hash) DO NOTHING
1111
1111
  RETURNING id, created_at_epoch
1112
- `).get(e,r,n.type,u,m,JSON.stringify(E),f,JSON.stringify(n.concepts),JSON.stringify(n.files_read),JSON.stringify(n.files_modified),s||null,o,n.agent_type??null,n.agent_id??null,b,c,l,a||null,h,y,l,qo({title:u??null,facts:E,narrative:f??null}));if(D)return R!==void 0&&this.mq.supersession.enabled&&this.supersedeObservation(R,D.id,l),{id:D.id,createdAtEpoch:D.created_at_epoch};let C=this.db.prepare("SELECT id, created_at_epoch FROM observations WHERE memory_session_id = ? AND content_hash = ?").get(e,b);if(!C)throw new Error(`storeObservation: ON CONFLICT without existing row for content_hash=${b}`);return{id:C.id,createdAtEpoch:C.created_at_epoch}}storeSummary(e,r,n,s,o=0,i){let a=i??Date.now(),l=new Date(a).toISOString(),u=this.db.prepare(`
1112
+ `).get(e,r,n.type,u,m,JSON.stringify(E),f,JSON.stringify(n.concepts),JSON.stringify(n.files_read),JSON.stringify(n.files_modified),s||null,o,n.agent_type??null,n.agent_id??null,b,c,l,a||null,h,y,l,qo({title:u??null,facts:E,narrative:f??null}));if(D)return C!==void 0&&this.mq.supersession.enabled&&this.supersedeObservation(C,D.id,l),{id:D.id,createdAtEpoch:D.created_at_epoch};let R=this.db.prepare("SELECT id, created_at_epoch FROM observations WHERE memory_session_id = ? AND content_hash = ?").get(e,b);if(!R)throw new Error(`storeObservation: ON CONFLICT without existing row for content_hash=${b}`);return{id:R.id,createdAtEpoch:R.created_at_epoch}}storeSummary(e,r,n,s,o=0,i){let a=i??Date.now(),l=new Date(a).toISOString(),u=this.db.prepare(`
1113
1113
  INSERT INTO session_summaries
1114
1114
  (memory_session_id, project, request, investigated, learned, completed,
1115
1115
  next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch)
@@ -1122,12 +1122,12 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1122
1122
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1123
1123
  ON CONFLICT(memory_session_id, content_hash) DO NOTHING
1124
1124
  RETURNING id
1125
- `),h=this.db.prepare("SELECT id FROM observations WHERE memory_session_id = ? AND content_hash = ?");for(let y of n){let R=this.rt(y.title),A=this.rt(y.subtitle),D=this.rt(y.narrative),C=this.rl(y.facts),T=Go(e,R??null,D??null),v=E.get(e,r,y.type,R,A,JSON.stringify(C),D,JSON.stringify(y.concepts),JSON.stringify(y.files_read),JSON.stringify(y.files_modified),o||null,i,y.agent_type??null,y.agent_id??null,T,u,c,l||null,Xo({type:y.type,narrative:D,files_modified:y.files_modified}),c,qo({title:R??null,facts:C,narrative:D??null}));if(v){f.push(v.id);continue}let I=h.get(e,T);if(!I)throw new Error(`storeObservations: ON CONFLICT without existing row for content_hash=${T}`);f.push(I.id)}let b=null;if(s){let R=this.db.prepare(`
1125
+ `),h=this.db.prepare("SELECT id FROM observations WHERE memory_session_id = ? AND content_hash = ?");for(let y of n){let C=this.rt(y.title),A=this.rt(y.subtitle),D=this.rt(y.narrative),R=this.rl(y.facts),T=Go(e,C??null,D??null),v=E.get(e,r,y.type,C,A,JSON.stringify(R),D,JSON.stringify(y.concepts),JSON.stringify(y.files_read),JSON.stringify(y.files_modified),o||null,i,y.agent_type??null,y.agent_id??null,T,u,c,l||null,Xo({type:y.type,narrative:D,files_modified:y.files_modified}),c,qo({title:C??null,facts:R,narrative:D??null}));if(v){f.push(v.id);continue}let I=h.get(e,T);if(!I)throw new Error(`storeObservations: ON CONFLICT without existing row for content_hash=${T}`);f.push(I.id)}let b=null;if(s){let C=this.db.prepare(`
1126
1126
  INSERT INTO session_summaries
1127
1127
  (memory_session_id, project, request, investigated, learned, completed,
1128
1128
  next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch)
1129
1129
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
1130
- `).run(e,r,this.rt(s.request),this.rt(s.investigated),this.rt(s.learned),this.rt(s.completed),this.rt(s.next_steps),this.rt(s.notes),o||null,i,u,c);b=Number(R.lastInsertRowid)}return{observationIds:f,summaryId:b,createdAtEpoch:c}})()}markObservationsUsed(e,r=Date.now()){if(e.length!==0)try{if(!this.db.query("PRAGMA table_info(observations)").all().some(o=>o.name==="last_used_at"))return;let s=e.map(()=>"?").join(",");this.db.prepare(`UPDATE observations SET last_used_at = ? WHERE id IN (${s})`).run(r,...e)}catch(n){d.debug("DB","markObservationsUsed failed",{count:e.length},n instanceof Error?n:new Error(String(n)))}}evaporateScratch(e){try{let r=this.db.prepare("DELETE FROM observations WHERE memory_session_id = ? AND type = 'scratch'").run(e),n=Number(r.changes??0);return n>0&&d.info("DB","Evaporated scratch observations at SessionEnd",{memorySessionId:e,count:n}),n}catch(r){return d.warn("DB","evaporateScratch failed",{memorySessionId:e},r instanceof Error?r:new Error(String(r))),0}}reconcileBeforeInsert(e,r,n,s){try{let o=Date.now()-7776e6,i=this.db.query("PRAGMA table_info(observations)").all().some(m=>m.name==="valid_to"),a=i?"AND valid_to IS NULL":"",l=this.db.prepare(`
1130
+ `).run(e,r,this.rt(s.request),this.rt(s.investigated),this.rt(s.learned),this.rt(s.completed),this.rt(s.next_steps),this.rt(s.notes),o||null,i,u,c);b=Number(C.lastInsertRowid)}return{observationIds:f,summaryId:b,createdAtEpoch:c}})()}markObservationsUsed(e,r=Date.now()){if(e.length!==0)try{if(!this.db.query("PRAGMA table_info(observations)").all().some(o=>o.name==="last_used_at"))return;let s=e.map(()=>"?").join(",");this.db.prepare(`UPDATE observations SET last_used_at = ? WHERE id IN (${s})`).run(r,...e)}catch(n){d.debug("DB","markObservationsUsed failed",{count:e.length},n instanceof Error?n:new Error(String(n)))}}evaporateScratch(e){try{let r=this.db.prepare("DELETE FROM observations WHERE memory_session_id = ? AND type = 'scratch'").run(e),n=Number(r.changes??0);return n>0&&d.info("DB","Evaporated scratch observations at SessionEnd",{memorySessionId:e,count:n}),n}catch(r){return d.warn("DB","evaporateScratch failed",{memorySessionId:e},r instanceof Error?r:new Error(String(r))),0}}reconcileBeforeInsert(e,r,n,s){try{let o=Date.now()-7776e6,i=this.db.query("PRAGMA table_info(observations)").all().some(m=>m.name==="valid_to"),a=i?"AND valid_to IS NULL":"",l=this.db.prepare(`
1131
1131
  SELECT id, title, narrative, importance
1132
1132
  FROM observations
1133
1133
  WHERE project = ? AND type = ? AND created_at_epoch >= ? ${a}
@@ -1150,7 +1150,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1150
1150
  WHERE ss.id IN (${u}) ${E}
1151
1151
  ${l}
1152
1152
  ${c}
1153
- `).all(...m);if(!a)return b;let y=new Map(b.map(A=>[A.id,A])),R=e.map(A=>y.get(A)).filter(A=>!!A);return s?R.slice(0,s):R}getUserPromptsByIds(e,r={}){if(e.length===0)return[];let{orderBy:n="date_desc",limit:s,project:o,platformSource:i}=r,a=n==="relevance",l=a?"":`ORDER BY up.created_at_epoch ${n==="date_asc"?"ASC":"DESC"}`,c=s?`LIMIT ${s}`:"",u=e.map(()=>"?").join(","),m=[...e],f=[];o&&(f.push("s.project = ?"),m.push(o)),i&&(f.push(`COALESCE(NULLIF(s.platform_source, ''), '${_}') = ?`),m.push(ue(i)));let E=f.length>0?`AND ${f.join(" AND ")}`:"",b=this.db.prepare(`
1153
+ `).all(...m);if(!a)return b;let y=new Map(b.map(A=>[A.id,A])),C=e.map(A=>y.get(A)).filter(A=>!!A);return s?C.slice(0,s):C}getUserPromptsByIds(e,r={}){if(e.length===0)return[];let{orderBy:n="date_desc",limit:s,project:o,platformSource:i}=r,a=n==="relevance",l=a?"":`ORDER BY up.created_at_epoch ${n==="date_asc"?"ASC":"DESC"}`,c=s?`LIMIT ${s}`:"",u=e.map(()=>"?").join(","),m=[...e],f=[];o&&(f.push("s.project = ?"),m.push(o)),i&&(f.push(`COALESCE(NULLIF(s.platform_source, ''), '${_}') = ?`),m.push(ue(i)));let E=f.length>0?`AND ${f.join(" AND ")}`:"",b=this.db.prepare(`
1154
1154
  SELECT
1155
1155
  up.*,
1156
1156
  s.project,
@@ -1161,7 +1161,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1161
1161
  WHERE up.id IN (${u}) ${E}
1162
1162
  ${l}
1163
1163
  ${c}
1164
- `).all(...m);if(!a)return b;let y=new Map(b.map(R=>[R.id,R]));return e.map(R=>y.get(R)).filter(R=>!!R)}getTimelineAroundTimestamp(e,r=10,n=10,s,o){return this.getTimelineAroundObservation(null,e,r,n,s,o)}getTimelineAroundObservation(e,r,n=10,s=10,o,i){let a=i?ue(i):void 0,l=(C,T)=>{let v=[],I=[];return o&&(v.push(`${C}.project = ?`),I.push(o)),a&&(v.push(`COALESCE(NULLIF(${T}.platform_source, ''), '${_}') = ?`),I.push(a)),{clause:v.length>0?`AND ${v.join(" AND ")}`:"",params:I}},c=l("o","src"),u=l("ss","src"),m=l("s","s"),f,E;if(e!==null){let C=`
1164
+ `).all(...m);if(!a)return b;let y=new Map(b.map(C=>[C.id,C]));return e.map(C=>y.get(C)).filter(C=>!!C)}getTimelineAroundTimestamp(e,r=10,n=10,s,o){return this.getTimelineAroundObservation(null,e,r,n,s,o)}getTimelineAroundObservation(e,r,n=10,s=10,o,i){let a=i?ue(i):void 0,l=(R,T)=>{let v=[],I=[];return o&&(v.push(`${R}.project = ?`),I.push(o)),a&&(v.push(`COALESCE(NULLIF(${T}.platform_source, ''), '${_}') = ?`),I.push(a)),{clause:v.length>0?`AND ${v.join(" AND ")}`:"",params:I}},c=l("o","src"),u=l("ss","src"),m=l("s","s"),f,E;if(e!==null){let R=`
1165
1165
  SELECT o.id, o.created_at_epoch
1166
1166
  FROM observations o
1167
1167
  LEFT JOIN sdk_sessions src ON src.memory_session_id = o.memory_session_id
@@ -1175,7 +1175,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1175
1175
  WHERE o.id >= ? ${c.clause}
1176
1176
  ORDER BY o.id ASC
1177
1177
  LIMIT ?
1178
- `;try{let v=this.db.prepare(C).all(e,...c.params,n+1),I=this.db.prepare(T).all(e,...c.params,s+1);if(v.length===0&&I.length===0)return{observations:[],sessions:[],prompts:[]};f=v.length>0?v[v.length-1].created_at_epoch:r,E=I.length>0?I[I.length-1].created_at_epoch:r}catch(v){return v instanceof Error?d.error("DB","Error getting boundary observations",{project:o},v):d.error("DB","Error getting boundary observations with non-Error",{},new Error(String(v))),{observations:[],sessions:[],prompts:[]}}}else{let C=`
1178
+ `;try{let v=this.db.prepare(R).all(e,...c.params,n+1),I=this.db.prepare(T).all(e,...c.params,s+1);if(v.length===0&&I.length===0)return{observations:[],sessions:[],prompts:[]};f=v.length>0?v[v.length-1].created_at_epoch:r,E=I.length>0?I[I.length-1].created_at_epoch:r}catch(v){return v instanceof Error?d.error("DB","Error getting boundary observations",{project:o},v):d.error("DB","Error getting boundary observations with non-Error",{},new Error(String(v))),{observations:[],sessions:[],prompts:[]}}}else{let R=`
1179
1179
  SELECT o.created_at_epoch
1180
1180
  FROM observations o
1181
1181
  LEFT JOIN sdk_sessions src ON src.memory_session_id = o.memory_session_id
@@ -1189,7 +1189,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1189
1189
  WHERE o.created_at_epoch >= ? ${c.clause}
1190
1190
  ORDER BY o.created_at_epoch ASC
1191
1191
  LIMIT ?
1192
- `;try{let v=this.db.prepare(C).all(r,...c.params,n),I=this.db.prepare(T).all(r,...c.params,s+1);if(v.length===0&&I.length===0)return{observations:[],sessions:[],prompts:[]};f=v.length>0?v[v.length-1].created_at_epoch:r,E=I.length>0?I[I.length-1].created_at_epoch:r}catch(v){return v instanceof Error?d.error("DB","Error getting boundary timestamps",{project:o},v):d.error("DB","Error getting boundary timestamps with non-Error",{},new Error(String(v))),{observations:[],sessions:[],prompts:[]}}}let h=`
1192
+ `;try{let v=this.db.prepare(R).all(r,...c.params,n),I=this.db.prepare(T).all(r,...c.params,s+1);if(v.length===0&&I.length===0)return{observations:[],sessions:[],prompts:[]};f=v.length>0?v[v.length-1].created_at_epoch:r,E=I.length>0?I[I.length-1].created_at_epoch:r}catch(v){return v instanceof Error?d.error("DB","Error getting boundary timestamps",{project:o},v):d.error("DB","Error getting boundary timestamps with non-Error",{},new Error(String(v))),{observations:[],sessions:[],prompts:[]}}}let h=`
1193
1193
  SELECT o.*
1194
1194
  FROM observations o
1195
1195
  LEFT JOIN sdk_sessions src ON src.memory_session_id = o.memory_session_id
@@ -1207,7 +1207,7 @@ Use claude-mem's MCP search tools for manual memory queries.`;Pg={ideId:"copilot
1207
1207
  JOIN sdk_sessions s ON up.session_db_id = s.id
1208
1208
  WHERE up.created_at_epoch >= ? AND up.created_at_epoch <= ? ${m.clause}
1209
1209
  ORDER BY up.created_at_epoch ASC
1210
- `,R=this.db.prepare(h).all(f,E,...c.params),A=this.db.prepare(b).all(f,E,...u.params),D=this.db.prepare(y).all(f,E,...m.params);return{observations:R,sessions:A.map(C=>({id:C.id,memory_session_id:C.memory_session_id,project:C.project,request:C.request,completed:C.completed,next_steps:C.next_steps,created_at:C.created_at,created_at_epoch:C.created_at_epoch})),prompts:D.map(C=>({id:C.id,content_session_id:C.content_session_id,prompt_number:C.prompt_number,prompt_text:C.prompt_text,project:C.project,platform_source:C.platform_source,created_at:C.created_at,created_at_epoch:C.created_at_epoch}))}}getPromptById(e){return this.db.prepare(`
1210
+ `,C=this.db.prepare(h).all(f,E,...c.params),A=this.db.prepare(b).all(f,E,...u.params),D=this.db.prepare(y).all(f,E,...m.params);return{observations:C,sessions:A.map(R=>({id:R.id,memory_session_id:R.memory_session_id,project:R.project,request:R.request,completed:R.completed,next_steps:R.next_steps,created_at:R.created_at,created_at_epoch:R.created_at_epoch})),prompts:D.map(R=>({id:R.id,content_session_id:R.content_session_id,prompt_number:R.prompt_number,prompt_text:R.prompt_text,project:R.project,platform_source:R.platform_source,created_at:R.created_at,created_at_epoch:R.created_at_epoch}))}}getPromptById(e){return this.db.prepare(`
1211
1211
  SELECT
1212
1212
  p.id,
1213
1213
  p.content_session_id,
@@ -1319,31 +1319,31 @@ ${F.default.green("\u2713 Migration complete.")}`),ti("result",c.after),console.
1319
1319
  `)),process.exit(1)),i>0&&console.log(F.default.dim(` Note: ${i} legacy row(s) without a content_hash were copied but not hash-verified.`)),e||(console.error(F.default.yellow(`
1320
1320
  Refusing to purge without confirmation. Re-run with --yes to remove claude-mem.`)),console.error(F.default.dim(` Verified: all ${o} observations are safely in keepmind.
1321
1321
  `)),process.exit(1)),console.log(F.default.dim(" Purging claude-mem (verified redundant)\u2026"));let a=await n({timestamp:new Date().toISOString()});console.log(`
1322
- ${F.default.green("\u2713 claude-mem removed.")}`),a.archivePath&&console.log(F.default.dim(` Backup: ${a.archivePath}`)),a.processesKilled&&console.log(F.default.dim(` Stopped ${a.processesKilled} orphaned process(es).`)),console.log("")}var F,Hn=S(()=>{"use strict";F=je(rt(),1);J();Lr()});import{execFile as bh}from"node:child_process";import{promisify as yh}from"node:util";async function ru(){try{return process.platform==="win32"?await vh():await Rh()}catch{return[]}}async function vh(){let t=`Get-CimInstance Win32_Process | Where-Object { $_.Name -match '^(chroma-mcp|python|pythonw)(\\.exe)?$' -and $_.CommandLine -match 'chroma-mcp' -and $_.CommandLine -match '\\.claude-mem' } | ForEach-Object { "$($_.ProcessId)\`t$($_.Name)" }`,{stdout:e}=await oi("powershell",["-NoProfile","-NonInteractive","-Command",t],{windowsHide:!0,timeout:15e3});return Ch(e)}async function Rh(){let{stdout:t}=await oi("ps",["-eo","pid=,comm=,args="],{timeout:15e3}),e=[];for(let r of t.split(`
1323
- `)){let n=r.trim();if(!n)continue;let s=n.match(/^(\d+)\s+(\S+)\s+(.*)$/);if(!s)continue;let o=Number(s[1]),i=s[2],a=s[3],l=i.split("/").pop()??i;Th.includes(l)&&/chroma-mcp/.test(a)&&/\.claude-mem/.test(a)&&o!==process.pid&&e.push({pid:o,name:l})}return e}function Ch(t){let e=[];for(let r of t.split(`
1324
- `)){let n=r.trim();if(!n)continue;let[s,o]=n.split(" "),i=Number(s);!Number.isInteger(i)||i<=0||i===process.pid||e.push({pid:i,name:o??"unknown"})}return e}async function nu(t){let e=0;for(let r of t)if(!(!Number.isInteger(r)||r<=0))try{process.platform==="win32"?await oi("taskkill",["/PID",String(r),"/T","/F"],{windowsHide:!0,timeout:1e4}):process.kill(r,"SIGKILL"),e++}catch(n){if(n?.code==="ESRCH")continue}return e}var oi,Th,su=S(()=>{"use strict";oi=yh(bh),Th=["chroma-mcp.exe","python.exe","pythonw.exe","chroma-mcp","python","python3"]});var ni={};he(ni,{claudeMemDbPath:()=>ci,claudeMemDir:()=>li,detectClaudeMem:()=>lu,purgeClaudeMem:()=>Lh,verifyMigrated:()=>xh});import{execFile as wh}from"node:child_process";import{existsSync as ye,mkdirSync as Ih,readdirSync as Oh,readFileSync as au,rmSync as ai,writeFileSync as kh}from"node:fs";import{homedir as Kn}from"node:os";import{join as ne,dirname as _h,basename as Ah}from"node:path";import{promisify as Nh}from"node:util";function li(){return ne(Kn(),".claude-mem")}function ci(){return ne(li(),"claude-mem.db")}function lu(){let t=li(),e=ci(),r=ye(e),n=new Set,s=new Set,o=z(Le(),{});for(let u of Object.keys(o?.plugins??{}))if(Dr.test(u)){n.add(u);let m=u.split("@")[1];m&&s.add(m)}let i=z(Ce(),{});for(let u of Object.keys(i?.enabledPlugins??{}))if(Dr.test(u)){n.add(u);let m=u.split("@")[1];m&&s.add(m)}let a=z(xe(),{});for(let u of Object.keys(a)){if(s.has(u))continue;if(Dr.test(u)){s.add(u);continue}let m=z(ne(Se(),"marketplaces",u,".claude-plugin","marketplace.json"),{});(Array.isArray(m?.plugins)?m.plugins:[]).some(E=>typeof E?.name=="string"&&Dr.test(E.name))&&s.add(u)}let l=[...s].map(u=>ne(Se(),"marketplaces",u)).filter(u=>ye(u));return{installed:r||n.size>0||s.size>0,dataDir:t,dbPath:e,hasData:r,counts:r?Mh(e):null,pluginKeys:[...n],marketplaceKeys:[...s],marketplaceDirs:l}}function Mh(t){try{return Ze(t)}catch{return null}}function xh(t=ci()){if(!ye(t)||!ye(B))return{missing:0,total:0,unhashable:0};let e=new be(B,{readonly:!0}),r=new be(t,{readonly:!0});try{let n=new Set(e.prepare("SELECT content_hash FROM observations WHERE content_hash IS NOT NULL").all().map(a=>a.content_hash)),s=r.prepare("SELECT content_hash FROM observations").all(),o=0,i=0;for(let a of s)a.content_hash?n.has(a.content_hash)||o++:i++;return{missing:o,total:s.length,unhashable:i}}finally{try{r.close()}catch{}try{e.close()}catch{}}}async function Lh(t){let e=t.presence??lu(),r={processesKilled:0,archivePath:null,marketplacesRemoved:[],pluginsRemoved:[],strayPathsRemoved:0,dataDirRemoved:!1,errors:[]};try{let s=await ru();r.processesKilled=await nu(s.map(o=>o.pid))}catch(s){r.errors.push(`process stop: ${Qe(s)}`)}let n=!0;if(ye(e.dataDir))try{r.archivePath=await Dh(e.dataDir,t.timestamp)}catch(s){n=!1,r.errors.push(`archive: ${Qe(s)}`)}try{Ph(e,r)}catch(s){r.errors.push(`deregister: ${Qe(s)}`)}try{r.strayPathsRemoved=Uh()}catch(s){r.errors.push(`stray paths: ${Qe(s)}`)}try{Fh(r)}catch(s){r.errors.push(`shell alias: ${Qe(s)}`)}try{Wh(r)}catch(s){r.errors.push(`claude.json: ${Qe(s)}`)}if(ye(e.dataDir))if(!n)r.errors.push("data dir kept: backup failed, refusing to delete without an archive");else try{ai(e.dataDir,{recursive:!0,force:!0}),r.dataDirRemoved=!ye(e.dataDir)}catch(s){r.errors.push(`remove data dir: ${Qe(s)}`)}return r}async function Dh(t,e){let r=ne(M,"backups");Ih(r,{recursive:!0});let n=e.replace(/[:.]/g,"-");if(process.platform==="win32"){let o=ne(r,`claude-mem-${n}.zip`);return await ou("powershell",["-NoProfile","-NonInteractive","-Command",`Compress-Archive -Path ${iu(ne(t,"*"))} -DestinationPath ${iu(o)} -Force`],{windowsHide:!0,timeout:12e4}),o}let s=ne(r,`claude-mem-${n}.tar.gz`);return await ou("tar",["-czf",s,"-C",_h(t),Ah(t)],{timeout:12e4}),s}function Ph(t,e){let r=z(Le(),{}),n=!1;for(let l of t.pluginKeys)r?.plugins?.[l]!==void 0&&(delete r.plugins[l],e.pluginsRemoved.push(l),n=!0);n&&se(Le(),r);let s=z(Ce(),{}),o=!1;for(let l of t.pluginKeys)s?.enabledPlugins?.[l]!==void 0&&(delete s.enabledPlugins[l],o=!0);o&&se(Ce(),s);let i=z(xe(),{}),a=!1;for(let l of t.marketplaceKeys)i?.[l]!==void 0&&(delete i[l],a=!0);a&&se(xe(),i);for(let l of t.marketplaceDirs)ye(l)&&(ai(l,{recursive:!0,force:!0}),e.marketplacesRemoved.push(l))}function Uh(){let t=Kn(),e=0,r=ne(t,".npm","_npx");if(ye(r))for(let o of Jn(r)){let i=ne(r,o,"node_modules","claude-mem");ye(i)&&ii(i)&&e++}let n=ne(t,".cache","claude-cli-nodejs");if(ye(n))for(let o of Jn(n)){let i=ne(n,o);for(let a of Jn(i))a.startsWith("mcp-logs-plugin-claude-mem-")&&ii(ne(i,a))&&e++}let s=ne(t,".claude","plugins","data");if(ye(s))for(let o of Jn(s))o.startsWith("claude-mem-")&&ii(ne(s,o))&&e++;return e}function Fh(t){let e=Kn(),r=[ne(e,".bashrc"),ne(e,".zshrc"),ne(e,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],n=/^\s*(alias\s+claude-mem\s*=|Set-Alias\s+(-Name\s+)?claude-mem\b)/;for(let s of r)if(ye(s))try{let o=au(s,"utf-8").split(`
1322
+ ${F.default.green("\u2713 claude-mem removed.")}`),a.archivePath&&console.log(F.default.dim(` Backup: ${a.archivePath}`)),a.processesKilled&&console.log(F.default.dim(` Stopped ${a.processesKilled} orphaned process(es).`)),console.log("")}var F,Hn=S(()=>{"use strict";F=je(rt(),1);J();Lr()});import{execFile as bh}from"node:child_process";import{promisify as yh}from"node:util";async function ru(){try{return process.platform==="win32"?await vh():await Ch()}catch{return[]}}async function vh(){let t=`Get-CimInstance Win32_Process | Where-Object { $_.Name -match '^(chroma-mcp|python|pythonw)(\\.exe)?$' -and $_.CommandLine -match 'chroma-mcp' -and $_.CommandLine -match '\\.claude-mem' } | ForEach-Object { "$($_.ProcessId)\`t$($_.Name)" }`,{stdout:e}=await oi("powershell",["-NoProfile","-NonInteractive","-Command",t],{windowsHide:!0,timeout:15e3});return Rh(e)}async function Ch(){let{stdout:t}=await oi("ps",["-eo","pid=,comm=,args="],{timeout:15e3}),e=[];for(let r of t.split(`
1323
+ `)){let n=r.trim();if(!n)continue;let s=n.match(/^(\d+)\s+(\S+)\s+(.*)$/);if(!s)continue;let o=Number(s[1]),i=s[2],a=s[3],l=i.split("/").pop()??i;Th.includes(l)&&/chroma-mcp/.test(a)&&/\.claude-mem/.test(a)&&o!==process.pid&&e.push({pid:o,name:l})}return e}function Rh(t){let e=[];for(let r of t.split(`
1324
+ `)){let n=r.trim();if(!n)continue;let[s,o]=n.split(" "),i=Number(s);!Number.isInteger(i)||i<=0||i===process.pid||e.push({pid:i,name:o??"unknown"})}return e}async function nu(t){let e=0;for(let r of t)if(!(!Number.isInteger(r)||r<=0))try{process.platform==="win32"?await oi("taskkill",["/PID",String(r),"/T","/F"],{windowsHide:!0,timeout:1e4}):process.kill(r,"SIGKILL"),e++}catch(n){if(n?.code==="ESRCH")continue}return e}var oi,Th,su=S(()=>{"use strict";oi=yh(bh),Th=["chroma-mcp.exe","python.exe","pythonw.exe","chroma-mcp","python","python3"]});var ni={};he(ni,{claudeMemDbPath:()=>ci,claudeMemDir:()=>li,detectClaudeMem:()=>lu,purgeClaudeMem:()=>Lh,verifyMigrated:()=>xh});import{execFile as wh}from"node:child_process";import{existsSync as ye,mkdirSync as Ih,readdirSync as Oh,readFileSync as au,rmSync as ai,writeFileSync as kh}from"node:fs";import{homedir as Kn}from"node:os";import{join as ne,dirname as _h,basename as Ah}from"node:path";import{promisify as Nh}from"node:util";function li(){return ne(Kn(),".claude-mem")}function ci(){return ne(li(),"claude-mem.db")}function lu(){let t=li(),e=ci(),r=ye(e),n=new Set,s=new Set,o=z(Le(),{});for(let u of Object.keys(o?.plugins??{}))if(Dr.test(u)){n.add(u);let m=u.split("@")[1];m&&s.add(m)}let i=z(Re(),{});for(let u of Object.keys(i?.enabledPlugins??{}))if(Dr.test(u)){n.add(u);let m=u.split("@")[1];m&&s.add(m)}let a=z(xe(),{});for(let u of Object.keys(a)){if(s.has(u))continue;if(Dr.test(u)){s.add(u);continue}let m=z(ne(Se(),"marketplaces",u,".claude-plugin","marketplace.json"),{});(Array.isArray(m?.plugins)?m.plugins:[]).some(E=>typeof E?.name=="string"&&Dr.test(E.name))&&s.add(u)}let l=[...s].map(u=>ne(Se(),"marketplaces",u)).filter(u=>ye(u));return{installed:r||n.size>0||s.size>0,dataDir:t,dbPath:e,hasData:r,counts:r?Mh(e):null,pluginKeys:[...n],marketplaceKeys:[...s],marketplaceDirs:l}}function Mh(t){try{return Ze(t)}catch{return null}}function xh(t=ci()){if(!ye(t)||!ye(B))return{missing:0,total:0,unhashable:0};let e=new be(B,{readonly:!0}),r=new be(t,{readonly:!0});try{let n=new Set(e.prepare("SELECT content_hash FROM observations WHERE content_hash IS NOT NULL").all().map(a=>a.content_hash)),s=r.prepare("SELECT content_hash FROM observations").all(),o=0,i=0;for(let a of s)a.content_hash?n.has(a.content_hash)||o++:i++;return{missing:o,total:s.length,unhashable:i}}finally{try{r.close()}catch{}try{e.close()}catch{}}}async function Lh(t){let e=t.presence??lu(),r={processesKilled:0,archivePath:null,marketplacesRemoved:[],pluginsRemoved:[],strayPathsRemoved:0,dataDirRemoved:!1,errors:[]};try{let s=await ru();r.processesKilled=await nu(s.map(o=>o.pid))}catch(s){r.errors.push(`process stop: ${Qe(s)}`)}let n=!0;if(ye(e.dataDir))try{r.archivePath=await Dh(e.dataDir,t.timestamp)}catch(s){n=!1,r.errors.push(`archive: ${Qe(s)}`)}try{Ph(e,r)}catch(s){r.errors.push(`deregister: ${Qe(s)}`)}try{r.strayPathsRemoved=Uh()}catch(s){r.errors.push(`stray paths: ${Qe(s)}`)}try{Fh(r)}catch(s){r.errors.push(`shell alias: ${Qe(s)}`)}try{Wh(r)}catch(s){r.errors.push(`claude.json: ${Qe(s)}`)}if(ye(e.dataDir))if(!n)r.errors.push("data dir kept: backup failed, refusing to delete without an archive");else try{ai(e.dataDir,{recursive:!0,force:!0}),r.dataDirRemoved=!ye(e.dataDir)}catch(s){r.errors.push(`remove data dir: ${Qe(s)}`)}return r}async function Dh(t,e){let r=ne(M,"backups");Ih(r,{recursive:!0});let n=e.replace(/[:.]/g,"-");if(process.platform==="win32"){let o=ne(r,`claude-mem-${n}.zip`);return await ou("powershell",["-NoProfile","-NonInteractive","-Command",`Compress-Archive -Path ${iu(ne(t,"*"))} -DestinationPath ${iu(o)} -Force`],{windowsHide:!0,timeout:12e4}),o}let s=ne(r,`claude-mem-${n}.tar.gz`);return await ou("tar",["-czf",s,"-C",_h(t),Ah(t)],{timeout:12e4}),s}function Ph(t,e){let r=z(Le(),{}),n=!1;for(let l of t.pluginKeys)r?.plugins?.[l]!==void 0&&(delete r.plugins[l],e.pluginsRemoved.push(l),n=!0);n&&se(Le(),r);let s=z(Re(),{}),o=!1;for(let l of t.pluginKeys)s?.enabledPlugins?.[l]!==void 0&&(delete s.enabledPlugins[l],o=!0);o&&se(Re(),s);let i=z(xe(),{}),a=!1;for(let l of t.marketplaceKeys)i?.[l]!==void 0&&(delete i[l],a=!0);a&&se(xe(),i);for(let l of t.marketplaceDirs)ye(l)&&(ai(l,{recursive:!0,force:!0}),e.marketplacesRemoved.push(l))}function Uh(){let t=Kn(),e=0,r=ne(t,".npm","_npx");if(ye(r))for(let o of Jn(r)){let i=ne(r,o,"node_modules","claude-mem");ye(i)&&ii(i)&&e++}let n=ne(t,".cache","claude-cli-nodejs");if(ye(n))for(let o of Jn(n)){let i=ne(n,o);for(let a of Jn(i))a.startsWith("mcp-logs-plugin-claude-mem-")&&ii(ne(i,a))&&e++}let s=ne(t,".claude","plugins","data");if(ye(s))for(let o of Jn(s))o.startsWith("claude-mem-")&&ii(ne(s,o))&&e++;return e}function Fh(t){let e=Kn(),r=[ne(e,".bashrc"),ne(e,".zshrc"),ne(e,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],n=/^\s*(alias\s+claude-mem\s*=|Set-Alias\s+(-Name\s+)?claude-mem\b)/;for(let s of r)if(ye(s))try{let o=au(s,"utf-8").split(`
1325
1325
  `),i=o.filter(a=>!n.test(a));i.length!==o.length&&(kh(s,i.join(`
1326
1326
  `)),t.strayPathsRemoved+=o.length-i.length)}catch(o){t.errors.push(`shell alias (${s}): ${Qe(o)}`)}}function Wh(t){let e=ne(Kn(),".claude.json");if(!ye(e))return;let r;try{r=JSON.parse(au(e,"utf-8"))}catch(s){t.errors.push(`claude.json parse (left intact): ${Qe(s)}`);return}if(!r||typeof r!="object"||Array.isArray(r))return;let n=!1;for(let s of["skillUsage","pluginUsage","usageStats"]){let o=r[s];if(o&&typeof o=="object"&&!Array.isArray(o))for(let i of Object.keys(o))Dr.test(i)&&(delete o[i],n=!0)}n&&se(e,r)}function Jn(t){try{return Oh(t)}catch{return[]}}function ii(t){try{return ai(t,{recursive:!0,force:!0}),!0}catch{return!1}}function iu(t){return`'${t.replace(/'/g,"''")}'`}function Qe(t){return t instanceof Error?t.message:String(t)}var ou,Dr,si=S(()=>{"use strict";J();Lr();Ae();Hn();su();ou=Nh(wh),Dr=/(^|[@/])claude-mem\b/});var Yn={};he(Yn,{disableClaudeAutoMemory:()=>gu,runInstallCommand:()=>rE,runRepairCommand:()=>sE});import{cpSync as cu,existsSync as Te,mkdirSync as uu,readFileSync as Xn,rmSync as du,writeFileSync as pu}from"fs";import{homedir as mu}from"os";import{dirname as fu,join as de}from"path";function zt(t){return re.loadFromFile(Je)[t]}async function Vn(t){if(K)await en(t);else for(let e of t){let r=await e.task(n=>console.log(` ${n}`));console.log(` ${r}`)}}function ui(t,e){if(t(e),!K)return()=>{};let r=Date.now(),n=setInterval(()=>{let s=Math.round((Date.now()-r)/1e3);t(`${e} ${g.default.dim(`(${s}s \u2014 still working)`)}`)},1e3);return()=>clearInterval(n)}async function kt(t){if(!K)return{result:await t(),output:""};let e="",r=(...s)=>{e+=s.map(o=>typeof o=="string"?o:String(o)).join(" ")+`
1327
- `},n={log:console.log,error:console.error,warn:console.warn};console.log=r,console.error=r,console.warn=r;try{return{result:await t(),output:e}}finally{console.log=n.log,console.error=n.error,console.warn=n.warn}}function jh(){let t=z(xe(),{});t.keepmind={source:{source:"github",repo:"ManuelStaggl/keepmind"},installLocation:ee(),lastUpdated:new Date().toISOString(),autoUpdate:!0},er(Se()),se(xe(),t)}function Gh(t){let e=z(Le(),{});e.version||(e.version=2),e.plugins||(e.plugins={});let r=nt(t),n=new Date().toISOString();e.plugins["keepmind@keepmind"]=[{scope:"user",installPath:r,version:t,installedAt:n,lastUpdated:n}],se(Le(),e)}function Bh(){let t=z(Ce(),{});t.enabledPlugins||(t.enabledPlugins={}),t.enabledPlugins["keepmind@keepmind"]=!0,se(Ce(),t)}function gu(){let t=z(Ce(),{}),e=t.env&&typeof t.env=="object"?t.env:{};return e.CLAUDE_CODE_DISABLE_AUTO_MEMORY==="1"?!1:(t.env={...e,CLAUDE_CODE_DISABLE_AUTO_MEMORY:"1"},se(Ce(),t),!0)}async function Hh(t,e){if(!t.includes("claude-code"))return"not-applicable";if(e.disableAutoMemory)return"disable";if(!K)return"leave-enabled";let r=await it({message:"Disable Claude Code auto-memory?",options:[{value:"leave-enabled",label:"Leave enabled",hint:"Recommended; keeps Claude Code native memory visible on startup."},{value:"disable",label:"Disable auto-memory",hint:"Only if you explicitly want keepmind to replace native startup memory."}],initialValue:"leave-enabled"});return X(r)&&(Ie("Installation cancelled."),process.exit(0)),r}function Jh(t,e){let r=(n,s)=>{ce("FAIL_LOUD_PER_IDE",{component:n,ide:t,phase:"ide-install",cause:new Error(n),details:s&&s.trim().length>0?s.trim().slice(0,4e3):void 0},e)};switch(t){case"claude-code":return{title:"Claude Code: registering plugin",task:async()=>`Claude Code: plugin registered ${g.default.green("OK")}`};case"cursor":return{title:"Cursor: installing hooks + MCP",task:async n=>{n("Loading Cursor installer\u2026");let{installCursorHooks:s,configureCursorMcp:o}=await Promise.resolve().then(()=>(Yl(),Xl));n("Installing Cursor hooks\u2026");let{result:i,output:a}=await kt(()=>s("user"));if(i!==0)return r("Cursor: hook installation failed",a),`Cursor: hook installation failed ${g.default.red("FAIL")}`;n("Configuring Cursor MCP\u2026");let{result:l}=await kt(async()=>o("user"));return l===0?`Cursor: hooks + MCP installed ${g.default.green("OK")}`:`Cursor: hooks installed; MCP setup failed \u2014 run \`npx keepmind cursor mcp\` ${g.default.yellow("!")}`}};case"gemini-cli":return{title:"Gemini CLI: installing hooks",task:async n=>{n("Loading Gemini CLI installer\u2026");let{installGeminiCliHooks:s}=await Promise.resolve().then(()=>(ho(),go));n("Installing Gemini CLI hooks\u2026");let{result:o,output:i}=await kt(()=>s());return o!==0?(r("Gemini CLI: hook installation failed",i),`Gemini CLI: hook installation failed ${g.default.red("FAIL")}`):`Gemini CLI: hooks installed ${g.default.green("OK")}`}};case"opencode":return{title:"OpenCode: installing plugin",task:async n=>{n("Loading OpenCode installer\u2026");let{installOpenCodeIntegration:s}=await Promise.resolve().then(()=>(Co(),Ro));n("Installing OpenCode plugin\u2026");let{result:o,output:i}=await kt(()=>s());return o!==0?(r("OpenCode: plugin installation failed",i),`OpenCode: plugin installation failed ${g.default.red("FAIL")}`):`OpenCode: plugin installed ${g.default.green("OK")}`}};case"windsurf":return{title:"Windsurf: installing hooks",task:async n=>{n("Loading Windsurf installer\u2026");let{installWindsurfHooks:s}=await Promise.resolve().then(()=>(ko(),Oo));n("Installing Windsurf hooks\u2026");let{result:o,output:i}=await kt(()=>s());return o!==0?(r("Windsurf: hook installation failed",i),`Windsurf: hook installation failed ${g.default.red("FAIL")}`):`Windsurf: hooks installed ${g.default.green("OK")}`}};case"codex-cli":return{title:"Codex CLI: registering hooks marketplace",task:async n=>{n("Loading Codex CLI installer\u2026");let{installCodexCli:s}=await Promise.resolve().then(()=>(Wo(),Fo));n("Registering native Codex hooks\u2026");let{result:o,output:i}=await kt(()=>s(ee()));return o!==0?(r("Codex CLI: integration setup failed",i),`Codex CLI: integration setup failed ${g.default.red("FAIL")}`):`Codex CLI: hooks marketplace registered ${g.default.green("OK")}`}};case"copilot-cli":case"antigravity":case"goose":case"roo-code":case"warp":{let o=jt().find(i=>i.id===t)?.label??t;return{title:`${o}: installing MCP integration`,task:async i=>{i("Loading MCP installer\u2026");let{MCP_IDE_INSTALLERS:a}=await Promise.resolve().then(()=>(Nc(),Ac)),l=a[t];if(!l)return`${o}: MCP installer not found ${g.default.yellow("!")}`;i(`Configuring ${o} MCP\u2026`);let{result:c,output:u}=await kt(()=>l());return c!==0?(r(`${o}: MCP integration failed`,u),`${o}: MCP integration failed ${g.default.red("FAIL")}`):`${o}: MCP integration installed ${g.default.green("OK")}`}}}default:{let s=jt().find(o=>o.id===t);return s&&!s.supported?{title:`${s.label}: skipping`,task:async()=>`${s.label}: support coming soon ${g.default.yellow("!")}`}:null}}}async function Kh(t,e){let r=[];for(let n of t){let s=Jh(n,e);s&&r.push(s)}return r.length>0&&await Vn(r),t.length>0&&e.failedIDEs.length===t.length&&ce("ABORT",{component:"all-ides",phase:"ide-install",cause:new Error(`All ${t.length} selected IDE integrations failed.`)},e),e.failedIDEs}function Vh(){let t=mu(),e=process.env.SHELL??"";if(e.includes("fish"))return{path:de(t,".config","fish","config.fish"),shell:"fish"};if(e.includes("zsh"))return{path:de(t,".zshrc"),shell:"zsh"};if(process.platform==="darwin"){let r=de(t,".bash_profile");if(Te(r))return{path:r,shell:"bash"}}return{path:de(t,".bashrc"),shell:"bash"}}function Xh(){let t=mu(),e=de(t,".local","bin"),r=de(e,"claude");if(!Te(r))return;let n=process.env.PATH??"";if(n.split(":").includes(e))return;let{path:o,shell:i}=Vh(),a="$HOME/.local/bin",l=i==="fish"?`set -gx PATH ${e} $PATH`:`export PATH="${a}:$PATH"`,c="";if(Te(o))try{c=Xn(o,"utf-8")}catch(u){k.warn(`Could not read ${o}: ${u instanceof Error?u.message:String(u)}`)}else try{uu(fu(o),{recursive:!0})}catch{}if(c.includes(e)||c.includes(a))k.info(`Claude Code PATH already configured in ${o}`);else try{let m=`${c.length===0||c.endsWith(`
1327
+ `},n={log:console.log,error:console.error,warn:console.warn};console.log=r,console.error=r,console.warn=r;try{return{result:await t(),output:e}}finally{console.log=n.log,console.error=n.error,console.warn=n.warn}}function jh(){let t=z(xe(),{});t.keepmind={source:{source:"github",repo:"ManuelStaggl/keepmind"},installLocation:ee(),lastUpdated:new Date().toISOString(),autoUpdate:!0},er(Se()),se(xe(),t)}function Gh(t){let e=z(Le(),{});e.version||(e.version=2),e.plugins||(e.plugins={});let r=nt(t),n=new Date().toISOString();e.plugins["keepmind@keepmind"]=[{scope:"user",installPath:r,version:t,installedAt:n,lastUpdated:n}],se(Le(),e)}function Bh(){let t=z(Re(),{});t.enabledPlugins||(t.enabledPlugins={}),t.enabledPlugins["keepmind@keepmind"]=!0,se(Re(),t)}function gu(){let t=z(Re(),{}),e=t.env&&typeof t.env=="object"?t.env:{};return e.CLAUDE_CODE_DISABLE_AUTO_MEMORY==="1"?!1:(t.env={...e,CLAUDE_CODE_DISABLE_AUTO_MEMORY:"1"},se(Re(),t),!0)}async function Hh(t,e){if(!t.includes("claude-code"))return"not-applicable";if(e.disableAutoMemory)return"disable";if(!K)return"leave-enabled";let r=await it({message:"Disable Claude Code auto-memory?",options:[{value:"leave-enabled",label:"Leave enabled",hint:"Recommended; keeps Claude Code native memory visible on startup."},{value:"disable",label:"Disable auto-memory",hint:"Only if you explicitly want keepmind to replace native startup memory."}],initialValue:"leave-enabled"});return X(r)&&(Ie("Installation cancelled."),process.exit(0)),r}function Jh(t,e){let r=(n,s)=>{ce("FAIL_LOUD_PER_IDE",{component:n,ide:t,phase:"ide-install",cause:new Error(n),details:s&&s.trim().length>0?s.trim().slice(0,4e3):void 0},e)};switch(t){case"claude-code":return{title:"Claude Code: registering plugin",task:async()=>`Claude Code: plugin registered ${g.default.green("OK")}`};case"cursor":return{title:"Cursor: installing hooks + MCP",task:async n=>{n("Loading Cursor installer\u2026");let{installCursorHooks:s,configureCursorMcp:o}=await Promise.resolve().then(()=>(Yl(),Xl));n("Installing Cursor hooks\u2026");let{result:i,output:a}=await kt(()=>s("user"));if(i!==0)return r("Cursor: hook installation failed",a),`Cursor: hook installation failed ${g.default.red("FAIL")}`;n("Configuring Cursor MCP\u2026");let{result:l}=await kt(async()=>o("user"));return l===0?`Cursor: hooks + MCP installed ${g.default.green("OK")}`:`Cursor: hooks installed; MCP setup failed \u2014 run \`npx keepmind cursor mcp\` ${g.default.yellow("!")}`}};case"gemini-cli":return{title:"Gemini CLI: installing hooks",task:async n=>{n("Loading Gemini CLI installer\u2026");let{installGeminiCliHooks:s}=await Promise.resolve().then(()=>(ho(),go));n("Installing Gemini CLI hooks\u2026");let{result:o,output:i}=await kt(()=>s());return o!==0?(r("Gemini CLI: hook installation failed",i),`Gemini CLI: hook installation failed ${g.default.red("FAIL")}`):`Gemini CLI: hooks installed ${g.default.green("OK")}`}};case"opencode":return{title:"OpenCode: installing plugin",task:async n=>{n("Loading OpenCode installer\u2026");let{installOpenCodeIntegration:s}=await Promise.resolve().then(()=>(Ro(),Co));n("Installing OpenCode plugin\u2026");let{result:o,output:i}=await kt(()=>s());return o!==0?(r("OpenCode: plugin installation failed",i),`OpenCode: plugin installation failed ${g.default.red("FAIL")}`):`OpenCode: plugin installed ${g.default.green("OK")}`}};case"windsurf":return{title:"Windsurf: installing hooks",task:async n=>{n("Loading Windsurf installer\u2026");let{installWindsurfHooks:s}=await Promise.resolve().then(()=>(ko(),Oo));n("Installing Windsurf hooks\u2026");let{result:o,output:i}=await kt(()=>s());return o!==0?(r("Windsurf: hook installation failed",i),`Windsurf: hook installation failed ${g.default.red("FAIL")}`):`Windsurf: hooks installed ${g.default.green("OK")}`}};case"codex-cli":return{title:"Codex CLI: registering hooks marketplace",task:async n=>{n("Loading Codex CLI installer\u2026");let{installCodexCli:s}=await Promise.resolve().then(()=>(Wo(),Fo));n("Registering native Codex hooks\u2026");let{result:o,output:i}=await kt(()=>s(ee()));return o!==0?(r("Codex CLI: integration setup failed",i),`Codex CLI: integration setup failed ${g.default.red("FAIL")}`):`Codex CLI: hooks marketplace registered ${g.default.green("OK")}`}};case"copilot-cli":case"antigravity":case"goose":case"roo-code":case"warp":{let o=jt().find(i=>i.id===t)?.label??t;return{title:`${o}: installing MCP integration`,task:async i=>{i("Loading MCP installer\u2026");let{MCP_IDE_INSTALLERS:a}=await Promise.resolve().then(()=>(Nc(),Ac)),l=a[t];if(!l)return`${o}: MCP installer not found ${g.default.yellow("!")}`;i(`Configuring ${o} MCP\u2026`);let{result:c,output:u}=await kt(()=>l());return c!==0?(r(`${o}: MCP integration failed`,u),`${o}: MCP integration failed ${g.default.red("FAIL")}`):`${o}: MCP integration installed ${g.default.green("OK")}`}}}default:{let s=jt().find(o=>o.id===t);return s&&!s.supported?{title:`${s.label}: skipping`,task:async()=>`${s.label}: support coming soon ${g.default.yellow("!")}`}:null}}}async function Kh(t,e){let r=[];for(let n of t){let s=Jh(n,e);s&&r.push(s)}return r.length>0&&await Vn(r),t.length>0&&e.failedIDEs.length===t.length&&ce("ABORT",{component:"all-ides",phase:"ide-install",cause:new Error(`All ${t.length} selected IDE integrations failed.`)},e),e.failedIDEs}function Vh(){let t=mu(),e=process.env.SHELL??"";if(e.includes("fish"))return{path:de(t,".config","fish","config.fish"),shell:"fish"};if(e.includes("zsh"))return{path:de(t,".zshrc"),shell:"zsh"};if(process.platform==="darwin"){let r=de(t,".bash_profile");if(Te(r))return{path:r,shell:"bash"}}return{path:de(t,".bashrc"),shell:"bash"}}function Xh(){let t=mu(),e=de(t,".local","bin"),r=de(e,"claude");if(!Te(r))return;let n=process.env.PATH??"";if(n.split(":").includes(e))return;let{path:o,shell:i}=Vh(),a="$HOME/.local/bin",l=i==="fish"?`set -gx PATH ${e} $PATH`:`export PATH="${a}:$PATH"`,c="";if(Te(o))try{c=Xn(o,"utf-8")}catch(u){k.warn(`Could not read ${o}: ${u instanceof Error?u.message:String(u)}`)}else try{uu(fu(o),{recursive:!0})}catch{}if(c.includes(e)||c.includes(a))k.info(`Claude Code PATH already configured in ${o}`);else try{let m=`${c.length===0||c.endsWith(`
1328
1328
  `)?"":`
1329
1329
  `}
1330
1330
  # Added by keepmind installer for Claude Code
1331
1331
  ${l}
1332
- `;pu(o,c+m,"utf-8"),k.success(`Added Claude Code to PATH in ${o}`)}catch(u){k.warn(`Could not update ${o}: ${u instanceof Error?u.message:String(u)}`),k.info(`Run manually: echo '${l}' >> ${o}`);return}process.env.PATH=`${e}:${n}`}async function Yh(){let t=j?'powershell -ExecutionPolicy ByPass -c "irm https://claude.ai/install.ps1 | iex"':"curl -fsSL https://claude.ai/install.sh | bash",e=K?Tt():null;return e?.start("Installing Claude Code (this can take a few minutes \u2014 downloading the native build)\u2026"),new Promise(r=>{let n="",s=He(t,[],{shell:j?process.env.ComSpec??"cmd.exe":"/bin/bash",stdio:e?["inherit","pipe","pipe"]:"inherit"});s.stdout?.on("data",o=>{n+=o.toString()}),s.stderr?.on("data",o=>{n+=o.toString()}),s.on("error",o=>{e?.error("Claude Code install failed"),n&&process.stderr.write(n),k.error(`Claude Code install failed: ${o.message}`),k.info("You can install it manually later: https://claude.ai/install.sh"),r(!1)}),s.on("exit",o=>{if(o!==0){e?.error("Claude Code install failed"),n&&process.stderr.write(n),k.error(`Claude Code install failed (exit ${o??"unknown"})`),k.info("You can install it manually later: https://claude.ai/install.sh"),r(!1);return}if(e?.stop("Claude Code installed"),!j)try{Xh()}catch(i){k.warn(`Could not auto-apply PATH setup: ${i instanceof Error?i.message:String(i)}`)}r(!0)})})}async function qh(){let t=jt(),e=t.find(o=>o.id==="claude-code");if(e&&!e.detected){k.warn("Claude Code is not installed. Claude-mem works best in Claude Code, but also works with the IDEs below.");let o=await it({message:"Install Claude Code now?",options:[{value:"install",label:"Yes \u2014 install Claude Code (recommended)"},{value:"skip",label:"No \u2014 pick another IDE below"},{value:"cancel",label:"Cancel installation"}],initialValue:"install"});(X(o)||o==="cancel")&&(Ie("Installation cancelled."),process.exit(0)),o==="install"&&await Yh()&&(t=jt())}t.filter(o=>o.detected).length===0&&k.warn("No supported IDEs detected \u2014 pick the one(s) you plan to use.");let n=t.map(o=>{let i=o.detected?" [detected]":"",a=o.supported?`${o.hint}${i}`:`coming soon${i}`;return{value:o.id,label:o.label,hint:a}}),s=await oa({message:"Which IDEs do you use?",options:n,initialValues:[],required:!0});return X(s)&&(Ie("Installation cancelled."),process.exit(0)),s}function hu(){let t=ee(),e=Hr();er(t);let r=[".agents",".codex-plugin","plugin","package.json","package-lock.json","dist","LICENSE","README.md","CHANGELOG.md"];for(let n of r){let s=de(e,n),o=de(t,n);Te(s)&&(Te(o)&&du(o,{recursive:!0,force:!0}),cu(s,o,{recursive:!0,force:!0}))}}function Eu(t){let e=ss(),r=nt(t);du(r,{recursive:!0,force:!0}),er(r),cu(e,r,{recursive:!0,force:!0})}async function zh(t){let e=ee(),r=de(e,"package.json");if(!Te(r))return;let n=["install","--omit=dev","--ignore-scripts"],s=await $s(e,n);if(s.code===0)return;s.timedOut&&ce("ABORT",{component:"marketplace-npm-install",phase:"marketplace-deps",cause:new Error("npm install timed out"),details:s.stderr.slice(0,4e3)},t),Sl(s.stderr)||ce("ABORT",{component:"marketplace-npm-install",phase:"marketplace-deps",cause:new Error(`npm install failed (exit ${s.code})`),details:s.stderr.slice(0,4e3)},t),k.warn("npm reported an ERESOLVE peer-dependency conflict in marketplace deps; retrying once with --legacy-peer-deps."),k.warn(bl(s.stderr));let o=await $s(e,[...n,"--legacy-peer-deps"]);if(o.code===0){t.warnings.push({component:"marketplace-npm-install",message:"tree-sitter peer-dep ERESOLVE was resolved with the --legacy-peer-deps fallback. Benign for the marketplace install; re-evaluate when tree-sitter peer ranges change.",remediation:"No action required."});return}ce("ABORT",{component:"marketplace-npm-install",phase:"marketplace-deps",cause:new Error(`npm install --legacy-peer-deps still failed (exit ${o.code}): ERESOLVE`),details:o.stderr.slice(0,4e3)},t)}function $e(t){let e=Je;try{let r={};if(Te(e))try{let n=Xn(e,"utf-8"),s=JSON.parse(n);s&&typeof s=="object"&&s.env&&typeof s.env=="object"?r={...s.env}:s&&typeof s=="object"&&(r={...s})}catch(n){console.warn("[install] Failed to parse existing settings.json, starting from empty:",n instanceof Error?n.message:String(n)),r={}}else{let n=fu(e);Te(n)||uu(n,{recursive:!0})}for(let[n,s]of Object.entries(t))r[n]=s;return pu(e,JSON.stringify(r,null,2),"utf-8"),!0}catch(r){return k.error(`Failed to write settings to ${e}: ${r instanceof Error?r.message:String(r)}`),!1}}function Zh(){try{if(!Te(Je))return;let t=JSON.parse(Xn(Je,"utf-8")),r=(t.env&&typeof t.env=="object"?t.env:t).CLAUDE_MEM_CLAUDE_AUTH_METHOD;return r==="subscription"||r==="api-key"||r==="gateway"?r:void 0}catch{return}}function di(){let t=Zh();if(t)return t;let e=ur();return e.ANTHROPIC_BASE_URL?.trim()?"gateway":e.ANTHROPIC_API_KEY?.trim()?"api-key":"subscription"}async function Qh(t){return t.runtime!==void 0&&t.runtime!=="worker"&&k.warn(`The "${t.runtime}" runtime was removed in this local-only build \u2014 using the worker runtime instead.`),$e({CLAUDE_MEM_RUNTIME:"worker"}),"worker"}async function $h(t){let e=zt("CLAUDE_MEM_PROVIDER")||"claude",r=h=>{let b=h??di();$e({CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:b})&&k.info("Saved Claude Agent SDK configuration to ~/.keepmind/settings.json")},n=()=>{r("subscription"),dr({ANTHROPIC_API_KEY:"",ANTHROPIC_BASE_URL:"",ANTHROPIC_AUTH_TOKEN:""}),k.info("Configured keepmind to use your logged-in Claude SDK account.")},s=async()=>{let h=ur().ANTHROPIC_API_KEY||"";if(h.trim().length>0){let y=await it({message:"An Anthropic API key is already configured. Keep it or enter a new one?",options:[{value:"keep",label:"Keep existing key"},{value:"replace",label:"Enter a new key (rotate)"}],initialValue:"keep"});if(X(y)){k.warn("API key prompt cancelled \u2014 leaving existing configuration untouched.");return}if(y==="keep"){dr({ANTHROPIC_API_KEY:h.trim(),ANTHROPIC_BASE_URL:"",ANTHROPIC_AUTH_TOKEN:""}),r("api-key");return}}let b=await $r({message:"Paste your Anthropic API key:",mask:"*",validate:y=>!y||y.trim().length===0?"API key required":void 0});if(X(b)){k.warn("API key prompt cancelled \u2014 leaving existing configuration untouched.");return}dr({ANTHROPIC_API_KEY:String(b).trim(),ANTHROPIC_BASE_URL:"",ANTHROPIC_AUTH_TOKEN:""}),r("api-key"),k.info("Saved Anthropic API key for the Claude Agent SDK path.")},o=async()=>{let h=ur(),b=await Ts({message:"Gateway URL:",placeholder:h.ANTHROPIC_BASE_URL||"http://localhost:4000",defaultValue:h.ANTHROPIC_BASE_URL||"",validate:C=>{let T=C?.trim()??"";if(!T)return"Gateway URL required";try{new URL(T);return}catch{return"Enter a valid URL, for example http://localhost:4000"}}});if(X(b)){k.warn("Gateway setup cancelled \u2014 leaving existing configuration untouched.");return}let y=await $r({message:"Gateway key/token (leave blank to keep current token, or type a new one):",mask:"*"}),R=X(y),A=R?"":String(y).trim(),D={ANTHROPIC_API_KEY:"",ANTHROPIC_BASE_URL:String(b).trim()};!R&&A.length>0&&(D.ANTHROPIC_AUTH_TOKEN=A),dr(D),r("gateway"),R||A.length===0?k.info("Gateway URL saved; existing gateway token preserved."):k.info("Configured Claude Agent SDK gateway in ~/.keepmind/.env.")};if(!K)return t.provider?t.provider==="claude"?(r(),"claude"):($e({CLAUDE_MEM_PROVIDER:t.provider})&&k.info(`Saved provider=${t.provider} to ~/.keepmind/settings.json`),k.warn(`Provider=${t.provider} requested non-interactively. API key prompt skipped \u2014 set CLAUDE_MEM_${t.provider.toUpperCase()}_API_KEY and CLAUDE_MEM_PROVIDER in settings.json or env manually if not already set.`),t.provider):e;let i=async()=>{let h=di(),y=await it({message:"Do you use a subscription plan or an API key/gateway for the memory agent?",options:[{value:"subscription",label:"Subscription plan (recommended \u2014 uses your logged-in Claude SDK account)"},{value:"api-key",label:"API key or gateway (Anthropic, LiteLLM, or compatible proxy)"}],initialValue:h==="subscription"?"subscription":"api-key"});if(X(y)&&(Ie("Installation cancelled."),process.exit(0)),y==="subscription"){n();return}let R=await it({message:"How should keepmind connect?",options:[{value:"direct",label:"Anthropic API key"},{value:"gateway",label:"LiteLLM or custom gateway"}],initialValue:h==="gateway"||ur().ANTHROPIC_BASE_URL?"gateway":"direct"});X(R)&&(Ie("Installation cancelled."),process.exit(0)),R==="gateway"?await o():await s()},a;if(t.provider)a=t.provider;else{let h=await it({message:"Which memory provider do you want to use?",options:[{value:"claude",label:"Claude Agent SDK (recommended)"},{value:"gemini",label:"Gemini"},{value:"openrouter",label:"OpenRouter"}],initialValue:e});X(h)&&(Ie("Installation cancelled."),process.exit(0)),a=h}if(a==="claude")return await i(),"claude";let l=a==="gemini"?"Gemini":"OpenRouter",c=a==="gemini"?"CLAUDE_MEM_GEMINI_API_KEY":"CLAUDE_MEM_OPENROUTER_API_KEY",u=zt(c);if(u&&u.trim().length>0)return $e({CLAUDE_MEM_PROVIDER:a})&&k.info(`Saved provider=${a} to ~/.keepmind/settings.json`),a;let m=await $r({message:`Paste your ${l} API key:`,mask:"*",validate:h=>!h||h.trim().length===0?"API key required":void 0});if(X(m))return k.warn("API key prompt cancelled \u2014 falling back to Claude provider."),r(),"claude";let f=String(m).trim();return $e({CLAUDE_MEM_PROVIDER:a,[c]:f})&&k.info(`Saved provider=${a} to ~/.keepmind/settings.json`),a}async function eE(t){let e=new Set(["claude-haiku-4-5-20251001","claude-sonnet-4-6","claude-opus-4-7"]),r=di()==="gateway";if(t.model&&!r){if(!e.has(t.model))throw new Error(`Unknown Claude model: ${t.model}. Allowed: ${[...e].join(", ")}`);$e({CLAUDE_MEM_MODEL:t.model})&&k.info(`Saved Claude model=${t.model} to ~/.keepmind/settings.json`);return}if(t.model&&r){$e({CLAUDE_MEM_MODEL:t.model})&&k.info(`Saved gateway model=${t.model} to ~/.keepmind/settings.json`);return}if(!K)return;let n=zt("CLAUDE_MEM_MODEL");if(r){let l=await Ts({message:"Which model should the gateway use?",placeholder:"claude-haiku-4-5-20251001",defaultValue:n||"claude-haiku-4-5-20251001",validate:m=>!m||m.trim().length===0?"Model required":void 0});X(l)&&(Ie("Installation cancelled."),process.exit(0));let c=String(l).trim();$e({CLAUDE_MEM_MODEL:c})&&k.info(`Saved gateway model=${c} to ~/.keepmind/settings.json`);return}let s=e.has(n)?n:"claude-haiku-4-5-20251001",o=await it({message:`Which Claude model should keepmind use to compress observations?
1332
+ `;pu(o,c+m,"utf-8"),k.success(`Added Claude Code to PATH in ${o}`)}catch(u){k.warn(`Could not update ${o}: ${u instanceof Error?u.message:String(u)}`),k.info(`Run manually: echo '${l}' >> ${o}`);return}process.env.PATH=`${e}:${n}`}async function Yh(){let t=j?'powershell -ExecutionPolicy ByPass -c "irm https://claude.ai/install.ps1 | iex"':"curl -fsSL https://claude.ai/install.sh | bash",e=K?Tt():null;return e?.start("Installing Claude Code (this can take a few minutes \u2014 downloading the native build)\u2026"),new Promise(r=>{let n="",s=He(t,[],{shell:j?process.env.ComSpec??"cmd.exe":"/bin/bash",stdio:e?["inherit","pipe","pipe"]:"inherit"});s.stdout?.on("data",o=>{n+=o.toString()}),s.stderr?.on("data",o=>{n+=o.toString()}),s.on("error",o=>{e?.error("Claude Code install failed"),n&&process.stderr.write(n),k.error(`Claude Code install failed: ${o.message}`),k.info("You can install it manually later: https://claude.ai/install.sh"),r(!1)}),s.on("exit",o=>{if(o!==0){e?.error("Claude Code install failed"),n&&process.stderr.write(n),k.error(`Claude Code install failed (exit ${o??"unknown"})`),k.info("You can install it manually later: https://claude.ai/install.sh"),r(!1);return}if(e?.stop("Claude Code installed"),!j)try{Xh()}catch(i){k.warn(`Could not auto-apply PATH setup: ${i instanceof Error?i.message:String(i)}`)}r(!0)})})}async function qh(){let t=jt(),e=t.find(o=>o.id==="claude-code");if(e&&!e.detected){k.warn("Claude Code is not installed. Claude-mem works best in Claude Code, but also works with the IDEs below.");let o=await it({message:"Install Claude Code now?",options:[{value:"install",label:"Yes \u2014 install Claude Code (recommended)"},{value:"skip",label:"No \u2014 pick another IDE below"},{value:"cancel",label:"Cancel installation"}],initialValue:"install"});(X(o)||o==="cancel")&&(Ie("Installation cancelled."),process.exit(0)),o==="install"&&await Yh()&&(t=jt())}t.filter(o=>o.detected).length===0&&k.warn("No supported IDEs detected \u2014 pick the one(s) you plan to use.");let n=t.map(o=>{let i=o.detected?" [detected]":"",a=o.supported?`${o.hint}${i}`:`coming soon${i}`;return{value:o.id,label:o.label,hint:a}}),s=await oa({message:"Which IDEs do you use?",options:n,initialValues:[],required:!0});return X(s)&&(Ie("Installation cancelled."),process.exit(0)),s}function hu(){let t=ee(),e=Hr();er(t);let r=[".agents",".codex-plugin","plugin","package.json","package-lock.json","dist","LICENSE","README.md","CHANGELOG.md"];for(let n of r){let s=de(e,n),o=de(t,n);Te(s)&&(Te(o)&&du(o,{recursive:!0,force:!0}),cu(s,o,{recursive:!0,force:!0}))}}function Eu(t){let e=ss(),r=nt(t);du(r,{recursive:!0,force:!0}),er(r),cu(e,r,{recursive:!0,force:!0})}async function zh(t){let e=ee(),r=de(e,"package.json");if(!Te(r))return;let n=["install","--omit=dev","--ignore-scripts"],s=await $s(e,n);if(s.code===0)return;s.timedOut&&ce("ABORT",{component:"marketplace-npm-install",phase:"marketplace-deps",cause:new Error("npm install timed out"),details:s.stderr.slice(0,4e3)},t),Sl(s.stderr)||ce("ABORT",{component:"marketplace-npm-install",phase:"marketplace-deps",cause:new Error(`npm install failed (exit ${s.code})`),details:s.stderr.slice(0,4e3)},t),k.warn("npm reported an ERESOLVE peer-dependency conflict in marketplace deps; retrying once with --legacy-peer-deps."),k.warn(bl(s.stderr));let o=await $s(e,[...n,"--legacy-peer-deps"]);if(o.code===0){t.warnings.push({component:"marketplace-npm-install",message:"tree-sitter peer-dep ERESOLVE was resolved with the --legacy-peer-deps fallback. Benign for the marketplace install; re-evaluate when tree-sitter peer ranges change.",remediation:"No action required."});return}ce("ABORT",{component:"marketplace-npm-install",phase:"marketplace-deps",cause:new Error(`npm install --legacy-peer-deps still failed (exit ${o.code}): ERESOLVE`),details:o.stderr.slice(0,4e3)},t)}function $e(t){let e=Je;try{let r={};if(Te(e))try{let n=Xn(e,"utf-8"),s=JSON.parse(n);s&&typeof s=="object"&&s.env&&typeof s.env=="object"?r={...s.env}:s&&typeof s=="object"&&(r={...s})}catch(n){console.warn("[install] Failed to parse existing settings.json, starting from empty:",n instanceof Error?n.message:String(n)),r={}}else{let n=fu(e);Te(n)||uu(n,{recursive:!0})}for(let[n,s]of Object.entries(t))r[n]=s;return pu(e,JSON.stringify(r,null,2),"utf-8"),!0}catch(r){return k.error(`Failed to write settings to ${e}: ${r instanceof Error?r.message:String(r)}`),!1}}function Zh(){try{if(!Te(Je))return;let t=JSON.parse(Xn(Je,"utf-8")),r=(t.env&&typeof t.env=="object"?t.env:t).CLAUDE_MEM_CLAUDE_AUTH_METHOD;return r==="subscription"||r==="api-key"||r==="gateway"?r:void 0}catch{return}}function di(){let t=Zh();if(t)return t;let e=ur();return e.ANTHROPIC_BASE_URL?.trim()?"gateway":e.ANTHROPIC_API_KEY?.trim()?"api-key":"subscription"}async function Qh(t){return t.runtime!==void 0&&t.runtime!=="worker"&&k.warn(`The "${t.runtime}" runtime was removed in this local-only build \u2014 using the worker runtime instead.`),$e({CLAUDE_MEM_RUNTIME:"worker"}),"worker"}async function $h(t){let e=zt("CLAUDE_MEM_PROVIDER")||"claude",r=h=>{let b=h??di();$e({CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:b})&&k.info("Saved Claude Agent SDK configuration to ~/.keepmind/settings.json")},n=()=>{r("subscription"),dr({ANTHROPIC_API_KEY:"",ANTHROPIC_BASE_URL:"",ANTHROPIC_AUTH_TOKEN:""}),k.info("Configured keepmind to use your logged-in Claude SDK account.")},s=async()=>{let h=ur().ANTHROPIC_API_KEY||"";if(h.trim().length>0){let y=await it({message:"An Anthropic API key is already configured. Keep it or enter a new one?",options:[{value:"keep",label:"Keep existing key"},{value:"replace",label:"Enter a new key (rotate)"}],initialValue:"keep"});if(X(y)){k.warn("API key prompt cancelled \u2014 leaving existing configuration untouched.");return}if(y==="keep"){dr({ANTHROPIC_API_KEY:h.trim(),ANTHROPIC_BASE_URL:"",ANTHROPIC_AUTH_TOKEN:""}),r("api-key");return}}let b=await $r({message:"Paste your Anthropic API key:",mask:"*",validate:y=>!y||y.trim().length===0?"API key required":void 0});if(X(b)){k.warn("API key prompt cancelled \u2014 leaving existing configuration untouched.");return}dr({ANTHROPIC_API_KEY:String(b).trim(),ANTHROPIC_BASE_URL:"",ANTHROPIC_AUTH_TOKEN:""}),r("api-key"),k.info("Saved Anthropic API key for the Claude Agent SDK path.")},o=async()=>{let h=ur(),b=await Ts({message:"Gateway URL:",placeholder:h.ANTHROPIC_BASE_URL||"http://localhost:4000",defaultValue:h.ANTHROPIC_BASE_URL||"",validate:R=>{let T=R?.trim()??"";if(!T)return"Gateway URL required";try{new URL(T);return}catch{return"Enter a valid URL, for example http://localhost:4000"}}});if(X(b)){k.warn("Gateway setup cancelled \u2014 leaving existing configuration untouched.");return}let y=await $r({message:"Gateway key/token (leave blank to keep current token, or type a new one):",mask:"*"}),C=X(y),A=C?"":String(y).trim(),D={ANTHROPIC_API_KEY:"",ANTHROPIC_BASE_URL:String(b).trim()};!C&&A.length>0&&(D.ANTHROPIC_AUTH_TOKEN=A),dr(D),r("gateway"),C||A.length===0?k.info("Gateway URL saved; existing gateway token preserved."):k.info("Configured Claude Agent SDK gateway in ~/.keepmind/.env.")};if(!K)return t.provider?t.provider==="claude"?(r(),"claude"):($e({CLAUDE_MEM_PROVIDER:t.provider})&&k.info(`Saved provider=${t.provider} to ~/.keepmind/settings.json`),k.warn(`Provider=${t.provider} requested non-interactively. API key prompt skipped \u2014 set CLAUDE_MEM_${t.provider.toUpperCase()}_API_KEY and CLAUDE_MEM_PROVIDER in settings.json or env manually if not already set.`),t.provider):e;let i=async()=>{let h=di(),y=await it({message:"Do you use a subscription plan or an API key/gateway for the memory agent?",options:[{value:"subscription",label:"Subscription plan (recommended \u2014 uses your logged-in Claude SDK account)"},{value:"api-key",label:"API key or gateway (Anthropic, LiteLLM, or compatible proxy)"}],initialValue:h==="subscription"?"subscription":"api-key"});if(X(y)&&(Ie("Installation cancelled."),process.exit(0)),y==="subscription"){n();return}let C=await it({message:"How should keepmind connect?",options:[{value:"direct",label:"Anthropic API key"},{value:"gateway",label:"LiteLLM or custom gateway"}],initialValue:h==="gateway"||ur().ANTHROPIC_BASE_URL?"gateway":"direct"});X(C)&&(Ie("Installation cancelled."),process.exit(0)),C==="gateway"?await o():await s()},a;if(t.provider)a=t.provider;else{let h=await it({message:"Which memory provider do you want to use?",options:[{value:"claude",label:"Claude Agent SDK (recommended)"},{value:"gemini",label:"Gemini"},{value:"openrouter",label:"OpenRouter"}],initialValue:e});X(h)&&(Ie("Installation cancelled."),process.exit(0)),a=h}if(a==="claude")return await i(),"claude";let l=a==="gemini"?"Gemini":"OpenRouter",c=a==="gemini"?"CLAUDE_MEM_GEMINI_API_KEY":"CLAUDE_MEM_OPENROUTER_API_KEY",u=zt(c);if(u&&u.trim().length>0)return $e({CLAUDE_MEM_PROVIDER:a})&&k.info(`Saved provider=${a} to ~/.keepmind/settings.json`),a;let m=await $r({message:`Paste your ${l} API key:`,mask:"*",validate:h=>!h||h.trim().length===0?"API key required":void 0});if(X(m))return k.warn("API key prompt cancelled \u2014 falling back to Claude provider."),r(),"claude";let f=String(m).trim();return $e({CLAUDE_MEM_PROVIDER:a,[c]:f})&&k.info(`Saved provider=${a} to ~/.keepmind/settings.json`),a}async function eE(t){let e=new Set(["claude-haiku-4-5-20251001","claude-sonnet-4-6","claude-opus-4-7"]),r=di()==="gateway";if(t.model&&!r){if(!e.has(t.model))throw new Error(`Unknown Claude model: ${t.model}. Allowed: ${[...e].join(", ")}`);$e({CLAUDE_MEM_MODEL:t.model})&&k.info(`Saved Claude model=${t.model} to ~/.keepmind/settings.json`);return}if(t.model&&r){$e({CLAUDE_MEM_MODEL:t.model})&&k.info(`Saved gateway model=${t.model} to ~/.keepmind/settings.json`);return}if(!K)return;let n=zt("CLAUDE_MEM_MODEL");if(r){let l=await Ts({message:"Which model should the gateway use?",placeholder:"claude-haiku-4-5-20251001",defaultValue:n||"claude-haiku-4-5-20251001",validate:m=>!m||m.trim().length===0?"Model required":void 0});X(l)&&(Ie("Installation cancelled."),process.exit(0));let c=String(l).trim();$e({CLAUDE_MEM_MODEL:c})&&k.info(`Saved gateway model=${c} to ~/.keepmind/settings.json`);return}let s=e.has(n)?n:"claude-haiku-4-5-20251001",o=await it({message:`Which Claude model should keepmind use to compress observations?
1333
1333
  This runs whenever you and Claude touch a file \u2014 keep it cheap and fast.`,options:[{value:"claude-haiku-4-5-20251001",label:"Haiku 4.5 (recommended \u2014 fast, cheap, great for compression)"},{value:"claude-sonnet-4-6",label:"Sonnet 4.6 (balanced quality and cost)"},{value:"claude-opus-4-7",label:"Opus 4.7 (highest quality, most expensive)"}],initialValue:s});X(o)&&(Ie("Installation cancelled."),process.exit(0));let i=o;$e({CLAUDE_MEM_MODEL:i})&&k.info(`Saved Claude model=${i} to ~/.keepmind/settings.json`)}async function tE(){let{detectClaudeMem:t,verifyMigrated:e,purgeClaudeMem:r}=await Promise.resolve().then(()=>(si(),ni)),{performMigration:n}=await Promise.resolve().then(()=>(Hn(),ri)),s=t();if(!s.hasData)return;let o=s.counts,i=o?`${o.observations} observations \xB7 ${o.sessions} sessions \xB7 ${o.summaries} summaries`:"an existing database";Dt(`Found claude-mem at ${s.dataDir}
1334
1334
  ${i}`,"claude-mem detected");let a=await yt({message:"Migrate these claude-mem memories into keepmind now?"});if(X(a)||!a)return;let l=Tt();l.start("Migrating claude-mem memories\u2026");try{let E=await n(s.dbPath,{});l.stop(`Migrated ${E.after.observations} observations \xB7 ${E.after.sessions} sessions (${E.mode}).`)}catch(E){l.stop("Migration failed."),H.error(`Migration failed: ${E instanceof Error?E.message:String(E)}`);return}H.info("Vectors rebuild automatically on the next worker start (semantic search).");let c=e(s.dbPath);if(c.missing>0){H.warn(`Keeping claude-mem: ${c.missing} of ${c.total} observations are not yet in keepmind.`);return}let u=c.unhashable>0?` (${c.unhashable} legacy rows without a hash were copied but can't be hash-verified)`:"",m=await yt({message:`Remove claude-mem entirely now? Its ${c.total} observations are safely in keepmind${u} (a backup is archived first).`,initialValue:!1});if(X(m)||!m)return;let f=Tt();f.start("Removing claude-mem\u2026");try{let E=await r({timestamp:new Date().toISOString(),presence:s}),h=[];E.dataDirRemoved&&h.push("data removed"),(E.marketplacesRemoved.length||E.pluginsRemoved.length)&&h.push("plugin deregistered"),E.processesKilled&&h.push(`${E.processesKilled} process(es) stopped`),E.archivePath&&h.push(`backup: ${E.archivePath}`),f.stop(`claude-mem removed${h.length?` (${h.join(", ")})`:""}.`),E.errors.length&&H.warn(`Some cleanup steps had issues: ${E.errors.join("; ")}`)}catch(E){f.stop("claude-mem removal encountered an error."),H.warn(`Removal error: ${E instanceof Error?E.message:String(E)}`)}}async function rE(t={}){let e=Qa();try{await nE(t,e)}catch(r){if(r instanceof Er){Hs(e,s=>K?H.message(s):console.error(` ${s}`));let n=`Installation Aborted: ${r.category.id}`;K?(H.error(n),H.error(r.remediation),Be(g.default.red("keepmind installation aborted."))):(console.error(`
1335
- ${n}`),console.error(` ${r.remediation}`),console.error(` ${r.message}`)),process.exit(1)}throw r}}async function nE(t,e){let r=xt(),n,s;K?(await hl(),or(g.default.bgCyan(g.default.black(" keepmind install ")))):console.log("keepmind install");let o=ee(),i=Te(de(o,"plugin",".claude-plugin","plugin.json")),a;if(i)try{a=JSON.parse(Xn(de(o,"plugin",".claude-plugin","plugin.json"),"utf-8")).version??void 0}catch(w){console.warn("[install] Failed to read existing plugin version:",w instanceof Error?w.message:String(w))}let l=g.default.dim("\xB7"),c=[`${g.default.bold("keepmind")} ${g.default.cyan(`v${r}`)}`];if(a&&a!==r?c.push(`installed ${g.default.yellow(`v${a}`)}`):a&&c.push(g.default.dim("reinstall")),k.info(c.join(` ${l} `)),i&&process.stdin.isTTY){let w=await yt({message:"Overwrite existing installation?",initialValue:!0});(X(w)||!w)&&(Ie("Installation cancelled."),process.exit(0))}let u;if(t.ide){u=[t.ide];let w=jt(),N=w.find(L=>L.id===t.ide);N&&!N.supported&&(k.error(`Support for ${N.label} coming soon.`),process.exit(1)),N||(k.error(`Unknown IDE: ${t.ide}`),k.info(`Available IDEs: ${w.map(L=>L.id).join(", ")}`),process.exit(1))}else process.stdin.isTTY?u=await qh():u=["claude-code"];K&&await tE();let m=await Qh(t);await $h(t)==="claude"&&await eE(t);let E="dead",h=u.length>0;{if(h){let N=zt("CLAUDE_MEM_WORKER_PORT"),L=K?Tt():null;L?.start("Stopping running worker (so we can overwrite cleanly)\u2026");try{let $=await fn(N,1e4);L?L.stop($.workerWasRunning?"Stopped running worker before overwrite.":"No worker running \u2014 proceeding."):$.workerWasRunning&&k.info("Stopped running worker before overwrite.")}catch($){let Re=$ instanceof Error?$.message:String($);L?L.error(`Pre-overwrite worker shutdown failed: ${Re}`):console.warn("[install] Pre-overwrite worker shutdown failed:",Re)}}let w=[{title:"Caching plugin version",task:async N=>(N(`Caching v${r}...`),Eu(r),`Plugin cached (v${r}) ${g.default.green("OK")}`)},{title:"Registering marketplace",task:async()=>(jh(),`Marketplace registered ${g.default.green("OK")}`)},{title:"Registering plugin",task:async()=>(Gh(r),`Plugin registered ${g.default.green("OK")}`)},{title:"Enabling plugin in Claude settings",task:async()=>(Bh(),`Plugin enabled ${g.default.green("OK")}`)},{title:"Setting up runtime (first install can take ~30s)",task:async N=>{N("Checking Bun\u2026");let{version:L}=await It(e);N("Checking uv\u2026");let{version:$}=await zs(e);n=L,s=$;let Re=nt(r);if(!cl(Re,r)){let{bunPath:Qn}=await It(),Pu=ui(N,"Installing plugin dependencies (bun install)\u2026");try{await br(Re,Qn)}finally{Pu()}Zs(Re,r,L,$)}return`Runtime ready (Bun ${L}, uv ${$}) ${g.default.green("OK")}`}}];h&&(w.unshift({title:"Copying plugin files to marketplace",task:async N=>(N("Copying to marketplace directory..."),hu(),`Plugin files copied ${g.default.green("OK")}`)}),w.push({title:"Installing marketplace dependencies",task:async N=>{let{bunPath:L}=await It(),$=ui(N,"Installing plugin dependencies (bun install)\u2026");try{await br(de(ee(),"plugin"),L)}finally{$()}let Re=ui(N,"Running npm install\u2026");try{await zh(e)}finally{Re()}return`Dependencies installed ${g.default.green("OK")}`}})),await Vn(w)}let b=await Kh(u,e),y=null,R=await Hh(u,t);if(R==="disable")try{let w=gu();y=w?"disabled":"already-disabled",w?k.success("Claude Code: auto-memory disabled (CLAUDE_CODE_DISABLE_AUTO_MEMORY=1)."):k.info("Claude Code: auto-memory already disabled, leaving settings.json untouched.")}catch(w){y="failed",ce("WARN_CONTINUE",{component:"auto-memory",phase:"post-ide",cause:w},e)}else R==="leave-enabled"&&(y="left-enabled",k.info("Claude Code: leaving native auto-memory enabled unless you explicitly opt in to disabling it."));let A=!K||t.noAutoStart||m==="server";await Vn([{title:m==="server"?"Starting server daemon":"Starting worker daemon",task:async w=>{if(m==="server")return`Server runtime selected \u2014 start it with ${g.default.bold("npx keepmind server start")} ${g.default.dim("(or via Docker compose)")}`;if(A)return K?"Skipped (--no-auto-start)":"Skipped (non-TTY)";let N=Number(zt("CLAUDE_MEM_WORKER_PORT")),L=de(ee(),"plugin","scripts","worker-service.cjs"),$=de(nt(r),"scripts","worker-service.cjs"),Re=Te(L)?L:$;switch(w(`Spawning worker on port ${N}...`),E=await Ya(N,Re),E){case"ready":return`Worker ready at http://localhost:${N} ${g.default.green("OK")}`;case"warming":return`Worker starting on port ${N} \u2014 finishing in background ${g.default.yellow("\u23F3")}`;case"dead":return`Worker did not start \u2014 try \`npx keepmind start\` manually ${g.default.yellow("!")}`}}}]);let C=e.failedIDEs.length>0?"Installation Partial":"Installation Complete",T=[`Version: ${g.default.cyan(r)}`,`Plugin dir: ${g.default.cyan(o)}`,`IDEs: ${g.default.cyan(u.join(", "))}`];y==="disabled"?T.push(`Auto-memory: ${g.default.cyan("disabled")} (CLAUDE_CODE_DISABLE_AUTO_MEMORY=1)`):y==="already-disabled"?T.push(`Auto-memory: ${g.default.cyan("already disabled")} (CLAUDE_CODE_DISABLE_AUTO_MEMORY=1)`):y==="left-enabled"?T.push(`Auto-memory: ${g.default.cyan("left enabled")} (native Claude Code memory preserved)`):y==="failed"&&T.push(`Auto-memory: ${g.default.red("write failed")} (see warning above)`),b.length>0&&T.push(`Failed: ${g.default.red(b.join(", "))}`),K?Dt(T.join(`
1336
- `),C):(console.log(`
1337
- ${C}`),T.forEach(w=>console.log(` ${w}`))),Hs(e,w=>K?H.message(w):console.log(` ${w}`));let v=zt("CLAUDE_MEM_WORKER_PORT"),I=v,Y=!1;if(!A){let w=K?Tt():null;w?.start(`Verifying worker on port ${v}\u2026`);try{let N=await fetch(`http://127.0.0.1:${v}/api/health`,{signal:AbortSignal.timeout(3e3)});if(N.ok){Y=!0;try{let L=await N.json();L&&(typeof L.port=="number"||typeof L.port=="string")&&(I=L.port)}catch{}}w?.stop(Y?`Worker ready at http://localhost:${I}`:`Worker reachable but not ready on port ${v}`)}catch{w?.stop(`Worker not yet responding on port ${v} (still starting)`)}}let Z=E,ve=Z!=="dead"||Y,Q=m==="server"?"Server":"Worker",Mt=m==="server"?"npx keepmind server start":"npx keepmind start",tt=A?`${g.default.yellow("!")} ${Q} autostart skipped \u2014 start it manually with ${g.default.bold(Mt)}`:Y||Z==="ready"?`${g.default.green("\u2713")} ${Q} running at ${g.default.underline(`http://localhost:${I}`)}`:`${g.default.yellow("\u23F3")} ${Q} starting at ${g.default.underline(`http://localhost:${I}`)} \u2014 give it ~30s, then refresh`,G=A?[tt,"",`${g.default.bold("First success:")} once the worker is running, keep ${g.default.underline(`http://localhost:${v}`)} open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${g.default.bold("Two paths from here:")}`,` ${g.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${g.default.cyan("B.")} Front-load it: open Claude Code and run ${g.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${g.default.cyan("~/.keepmind")} on this machine.`,"",`${g.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${g.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.keepmind will be recreated by active hooks.")}`]:ve?[tt,"",`${g.default.bold("First success:")} keep that URL open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${g.default.bold("Two paths from here:")}`,` ${g.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${g.default.cyan("B.")} Front-load it: open Claude Code and run ${g.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${g.default.cyan("~/.keepmind")} on this machine.`,"",`${g.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${g.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.keepmind will be recreated by active hooks.")}`]:[`${g.default.yellow("!")} Worker not yet ready on port ${g.default.cyan(String(v))} -- still starting up; check ${g.default.bold("keepmind status")} later, or start manually: ${g.default.bold("npx keepmind start")}`,"",`${g.default.bold("First success:")} keep ${g.default.underline(`http://localhost:${v}`)} open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${g.default.bold("Two paths from here:")}`,` ${g.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${g.default.cyan("B.")} Front-load it: open Claude Code and run ${g.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${g.default.cyan("~/.keepmind")} on this machine.`,"",`${g.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${g.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.keepmind will be recreated by active hooks.")}`];K?(Dt(G.join(`
1335
+ ${n}`),console.error(` ${r.remediation}`),console.error(` ${r.message}`)),process.exit(1)}throw r}}async function nE(t,e){let r=xt(),n,s;K?(await hl(),or(g.default.bgCyan(g.default.black(" keepmind install ")))):console.log("keepmind install");let o=ee(),i=Te(de(o,"plugin",".claude-plugin","plugin.json")),a;if(i)try{a=JSON.parse(Xn(de(o,"plugin",".claude-plugin","plugin.json"),"utf-8")).version??void 0}catch(w){console.warn("[install] Failed to read existing plugin version:",w instanceof Error?w.message:String(w))}let l=g.default.dim("\xB7"),c=[`${g.default.bold("keepmind")} ${g.default.cyan(`v${r}`)}`];if(a&&a!==r?c.push(`installed ${g.default.yellow(`v${a}`)}`):a&&c.push(g.default.dim("reinstall")),k.info(c.join(` ${l} `)),i&&process.stdin.isTTY){let w=await yt({message:"Overwrite existing installation?",initialValue:!0});(X(w)||!w)&&(Ie("Installation cancelled."),process.exit(0))}let u;if(t.ide){u=[t.ide];let w=jt(),N=w.find(L=>L.id===t.ide);N&&!N.supported&&(k.error(`Support for ${N.label} coming soon.`),process.exit(1)),N||(k.error(`Unknown IDE: ${t.ide}`),k.info(`Available IDEs: ${w.map(L=>L.id).join(", ")}`),process.exit(1))}else process.stdin.isTTY?u=await qh():u=["claude-code"];K&&await tE();let m=await Qh(t);await $h(t)==="claude"&&await eE(t);let E="dead",h=u.length>0;{if(h){let N=zt("CLAUDE_MEM_WORKER_PORT"),L=K?Tt():null;L?.start("Stopping running worker (so we can overwrite cleanly)\u2026");try{let $=await fn(N,1e4);L?L.stop($.workerWasRunning?"Stopped running worker before overwrite.":"No worker running \u2014 proceeding."):$.workerWasRunning&&k.info("Stopped running worker before overwrite.")}catch($){let Ce=$ instanceof Error?$.message:String($);L?L.error(`Pre-overwrite worker shutdown failed: ${Ce}`):console.warn("[install] Pre-overwrite worker shutdown failed:",Ce)}}let w=[{title:"Caching plugin version",task:async N=>(N(`Caching v${r}...`),Eu(r),`Plugin cached (v${r}) ${g.default.green("OK")}`)},{title:"Registering marketplace",task:async()=>(jh(),`Marketplace registered ${g.default.green("OK")}`)},{title:"Registering plugin",task:async()=>(Gh(r),`Plugin registered ${g.default.green("OK")}`)},{title:"Enabling plugin in Claude settings",task:async()=>(Bh(),`Plugin enabled ${g.default.green("OK")}`)},{title:"Setting up runtime (first install can take ~30s)",task:async N=>{N("Checking Bun\u2026");let{version:L}=await It(e);N("Checking uv\u2026");let{version:$}=await zs(e);n=L,s=$;let Ce=nt(r);if(!cl(Ce,r)){let{bunPath:Qn}=await It(),Pu=ui(N,"Installing plugin dependencies (bun install)\u2026");try{await br(Ce,Qn)}finally{Pu()}Zs(Ce,r,L,$)}return`Runtime ready (Bun ${L}, uv ${$}) ${g.default.green("OK")}`}}];h&&(w.unshift({title:"Copying plugin files to marketplace",task:async N=>(N("Copying to marketplace directory..."),hu(),`Plugin files copied ${g.default.green("OK")}`)}),w.push({title:"Installing marketplace dependencies",task:async N=>{let{bunPath:L}=await It(),$=ui(N,"Installing plugin dependencies (bun install)\u2026");try{await br(de(ee(),"plugin"),L)}finally{$()}let Ce=ui(N,"Running npm install\u2026");try{await zh(e)}finally{Ce()}return`Dependencies installed ${g.default.green("OK")}`}})),await Vn(w)}let b=await Kh(u,e),y=null,C=await Hh(u,t);if(C==="disable")try{let w=gu();y=w?"disabled":"already-disabled",w?k.success("Claude Code: auto-memory disabled (CLAUDE_CODE_DISABLE_AUTO_MEMORY=1)."):k.info("Claude Code: auto-memory already disabled, leaving settings.json untouched.")}catch(w){y="failed",ce("WARN_CONTINUE",{component:"auto-memory",phase:"post-ide",cause:w},e)}else C==="leave-enabled"&&(y="left-enabled",k.info("Claude Code: leaving native auto-memory enabled unless you explicitly opt in to disabling it."));let A=!K||t.noAutoStart||m==="server";await Vn([{title:m==="server"?"Starting server daemon":"Starting worker daemon",task:async w=>{if(m==="server")return`Server runtime selected \u2014 start it with ${g.default.bold("npx keepmind server start")} ${g.default.dim("(or via Docker compose)")}`;if(A)return K?"Skipped (--no-auto-start)":"Skipped (non-TTY)";let N=Number(zt("CLAUDE_MEM_WORKER_PORT")),L=de(ee(),"plugin","scripts","worker-service.cjs"),$=de(nt(r),"scripts","worker-service.cjs"),Ce=Te(L)?L:$;switch(w(`Spawning worker on port ${N}...`),E=await Ya(N,Ce),E){case"ready":return`Worker ready at http://localhost:${N} ${g.default.green("OK")}`;case"warming":return`Worker starting on port ${N} \u2014 finishing in background ${g.default.yellow("\u23F3")}`;case"dead":return`Worker did not start \u2014 try \`npx keepmind start\` manually ${g.default.yellow("!")}`}}}]);let R=e.failedIDEs.length>0?"Installation Partial":"Installation Complete",T=[`Version: ${g.default.cyan(r)}`,`Plugin dir: ${g.default.cyan(o)}`,`IDEs: ${g.default.cyan(u.join(", "))}`];y==="disabled"?T.push(`Auto-memory: ${g.default.cyan("disabled")} (CLAUDE_CODE_DISABLE_AUTO_MEMORY=1)`):y==="already-disabled"?T.push(`Auto-memory: ${g.default.cyan("already disabled")} (CLAUDE_CODE_DISABLE_AUTO_MEMORY=1)`):y==="left-enabled"?T.push(`Auto-memory: ${g.default.cyan("left enabled")} (native Claude Code memory preserved)`):y==="failed"&&T.push(`Auto-memory: ${g.default.red("write failed")} (see warning above)`),b.length>0&&T.push(`Failed: ${g.default.red(b.join(", "))}`),K?Dt(T.join(`
1336
+ `),R):(console.log(`
1337
+ ${R}`),T.forEach(w=>console.log(` ${w}`))),Hs(e,w=>K?H.message(w):console.log(` ${w}`));let v=zt("CLAUDE_MEM_WORKER_PORT"),I=v,Y=!1;if(!A){let w=K?Tt():null;w?.start(`Verifying worker on port ${v}\u2026`);try{let N=await fetch(`http://127.0.0.1:${v}/api/health`,{signal:AbortSignal.timeout(3e3)});if(N.ok){Y=!0;try{let L=await N.json();L&&(typeof L.port=="number"||typeof L.port=="string")&&(I=L.port)}catch{}}w?.stop(Y?`Worker ready at http://localhost:${I}`:`Worker reachable but not ready on port ${v}`)}catch{w?.stop(`Worker not yet responding on port ${v} (still starting)`)}}let Z=E,ve=Z!=="dead"||Y,Q=m==="server"?"Server":"Worker",Mt=m==="server"?"npx keepmind server start":"npx keepmind start",tt=A?`${g.default.yellow("!")} ${Q} autostart skipped \u2014 start it manually with ${g.default.bold(Mt)}`:Y||Z==="ready"?`${g.default.green("\u2713")} ${Q} running at ${g.default.underline(`http://localhost:${I}`)}`:`${g.default.yellow("\u23F3")} ${Q} starting at ${g.default.underline(`http://localhost:${I}`)} \u2014 give it ~30s, then refresh`,G=A?[tt,"",`${g.default.bold("First success:")} once the worker is running, keep ${g.default.underline(`http://localhost:${v}`)} open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${g.default.bold("Two paths from here:")}`,` ${g.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${g.default.cyan("B.")} Front-load it: open Claude Code and run ${g.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${g.default.cyan("~/.keepmind")} on this machine.`,"",`${g.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${g.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.keepmind will be recreated by active hooks.")}`]:ve?[tt,"",`${g.default.bold("First success:")} keep that URL open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${g.default.bold("Two paths from here:")}`,` ${g.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${g.default.cyan("B.")} Front-load it: open Claude Code and run ${g.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${g.default.cyan("~/.keepmind")} on this machine.`,"",`${g.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${g.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.keepmind will be recreated by active hooks.")}`]:[`${g.default.yellow("!")} Worker not yet ready on port ${g.default.cyan(String(v))} -- still starting up; check ${g.default.bold("keepmind status")} later, or start manually: ${g.default.bold("npx keepmind start")}`,"",`${g.default.bold("First success:")} keep ${g.default.underline(`http://localhost:${v}`)} open in a browser, then open Claude Code in any project. Observations stream in as Claude reads, edits, and runs commands.`,"",`${g.default.bold("Two paths from here:")}`,` ${g.default.cyan("A.")} Just start working. Memory builds passively from your first prompt. (Recommended.)`,` ${g.default.cyan("B.")} Front-load it: open Claude Code and run ${g.default.bold("/learn-codebase")} to ingest the whole repo (~5 min, optional).`,"","Memory injection starts on your second session in a project.",`Everything stays in ${g.default.cyan("~/.keepmind")} on this machine.`,"",`${g.default.dim("How it works: /how-it-works \xB7 Disable first-session hint: CLAUDE_MEM_WELCOME_HINT_ENABLED=false")}`,`${g.default.dim("Note: close all Claude Code sessions before uninstalling, or ~/.keepmind will be recreated by active hooks.")}`];K?(Dt(G.join(`
1338
1338
  `),"Next Steps"),b.length>0?Be(g.default.yellow("keepmind installed with some IDE setup failures.")):Be(g.default.green("keepmind installed successfully!"))):(console.log(`
1339
1339
  Next Steps`),G.forEach(w=>console.log(` ${w}`)),b.length>0?(console.log(`
1340
1340
  keepmind installed with some IDE setup failures.`),process.exitCode=1):console.log(`
1341
- keepmind installed successfully!`))}async function sE(){let t=xt(),e=nt(t);K?or(g.default.bgCyan(g.default.black(" keepmind repair "))):console.log("keepmind repair"),k.info(`Version: ${g.default.cyan(t)}`),await Vn([{title:"Setting up runtime",task:async r=>{r("Checking Bun\u2026");let{version:n}=await It();r("Checking uv\u2026");let{version:s}=await zs();Te(de(e,"package.json"))||(r("Cache missing \u2014 repopulating from npm package\u2026"),Eu(t)),r("Reinstalling plugin dependencies\u2026");let{bunPath:o}=await It();return await br(e,o),Zs(e,t,n,s),`Runtime ready (Bun ${n}, uv ${s}) ${g.default.green("OK")}`}},{title:"Reinstalling marketplace plugin dependencies",task:async r=>{let n=de(ee(),"plugin");if(!Te(n))return`No marketplace install \u2014 skipped ${g.default.dim("(cache-only)")}`;r("Refreshing marketplace plugin files\u2026"),hu(),r("Installing marketplace plugin dependencies\u2026");let{bunPath:s}=await It();return await br(n,s),`Marketplace plugin deps installed ${g.default.green("OK")}`}}]),K?Be(g.default.green("keepmind repair complete.")):console.log("keepmind repair complete.")}var g,K,k,qn=S(()=>{"use strict";vs();g=je(rt(),1);Pt();Rt();J();ba();qa();ul();El();dn();Js();yl();Ae();Qt();eo();vl();K=process.stdin.isTTY===!0;k={info:t=>K?H.info(t):console.log(` ${t}`),success:t=>K?H.success(t):console.log(` ${t}`),warn:t=>K?H.warn(t):console.warn(` ${t}`),error:t=>K?H.error(t):console.error(` ${t}`)}});var yu={};he(yu,{removeFromClaudeSettings:()=>bu,runUninstallCommand:()=>mE});import{existsSync as _t,readFileSync as oE,readdirSync as pi,rmSync as Pr,writeFileSync as iE}from"fs";import{homedir as Su}from"os";import{join as Ue}from"path";function aE(){let t=ee();return _t(t)?(Pr(t,{recursive:!0,force:!0}),!0):!1}function lE(){let t=Ue(Se(),"cache","keepmind","keepmind");return _t(t)?(Pr(t,{recursive:!0,force:!0}),!0):!1}function cE(){let t=z(xe(),{});t.keepmind&&(delete t.keepmind,se(xe(),t))}function uE(){let t=z(Le(),{});t.plugins?.["keepmind@keepmind"]&&(delete t.plugins["keepmind@keepmind"],se(Le(),t))}function dE(){let t=Su(),e=[Ue(t,".bashrc"),Ue(t,".zshrc"),Ue(t,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],r=/^\s*alias\s+claude-mem\s*=/;for(let n of e){if(!_t(n))continue;let s;try{s=oE(n,"utf-8")}catch(a){console.warn(`[uninstall] Could not read ${n}:`,a instanceof Error?a.message:String(a));continue}let o=s.split(`
1341
+ keepmind installed successfully!`))}async function sE(){let t=xt(),e=nt(t);K?or(g.default.bgCyan(g.default.black(" keepmind repair "))):console.log("keepmind repair"),k.info(`Version: ${g.default.cyan(t)}`),await Vn([{title:"Setting up runtime",task:async r=>{r("Checking Bun\u2026");let{version:n}=await It();r("Checking uv\u2026");let{version:s}=await zs();Te(de(e,"package.json"))||(r("Cache missing \u2014 repopulating from npm package\u2026"),Eu(t)),r("Reinstalling plugin dependencies\u2026");let{bunPath:o}=await It();return await br(e,o),Zs(e,t,n,s),`Runtime ready (Bun ${n}, uv ${s}) ${g.default.green("OK")}`}},{title:"Reinstalling marketplace plugin dependencies",task:async r=>{let n=de(ee(),"plugin");if(!Te(n))return`No marketplace install \u2014 skipped ${g.default.dim("(cache-only)")}`;r("Refreshing marketplace plugin files\u2026"),hu(),r("Installing marketplace plugin dependencies\u2026");let{bunPath:s}=await It();return await br(n,s),`Marketplace plugin deps installed ${g.default.green("OK")}`}}]),K?Be(g.default.green("keepmind repair complete.")):console.log("keepmind repair complete.")}var g,K,k,qn=S(()=>{"use strict";vs();g=je(rt(),1);Pt();Ct();J();ba();qa();ul();El();dn();Js();yl();Ae();Qt();eo();vl();K=process.stdin.isTTY===!0;k={info:t=>K?H.info(t):console.log(` ${t}`),success:t=>K?H.success(t):console.log(` ${t}`),warn:t=>K?H.warn(t):console.warn(` ${t}`),error:t=>K?H.error(t):console.error(` ${t}`)}});var yu={};he(yu,{removeFromClaudeSettings:()=>bu,runUninstallCommand:()=>mE});import{existsSync as _t,readFileSync as oE,readdirSync as pi,rmSync as Pr,writeFileSync as iE}from"fs";import{homedir as Su}from"os";import{join as Ue}from"path";function aE(){let t=ee();return _t(t)?(Pr(t,{recursive:!0,force:!0}),!0):!1}function lE(){let t=Ue(Se(),"cache","keepmind","keepmind");return _t(t)?(Pr(t,{recursive:!0,force:!0}),!0):!1}function cE(){let t=z(xe(),{});t.keepmind&&(delete t.keepmind,se(xe(),t))}function uE(){let t=z(Le(),{});t.plugins?.["keepmind@keepmind"]&&(delete t.plugins["keepmind@keepmind"],se(Le(),t))}function dE(){let t=Su(),e=[Ue(t,".bashrc"),Ue(t,".zshrc"),Ue(t,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],r=/^\s*alias\s+claude-mem\s*=/;for(let n of e){if(!_t(n))continue;let s;try{s=oE(n,"utf-8")}catch(a){console.warn(`[uninstall] Could not read ${n}:`,a instanceof Error?a.message:String(a));continue}let o=s.split(`
1342
1342
  `),i=o.filter(a=>!r.test(a));if(i.length!==o.length)try{iE(n,i.join(`
1343
- `)),console.error(`Removed legacy claude-mem alias from ${n}`)}catch(a){console.warn(`[uninstall] Could not rewrite ${n}:`,a instanceof Error?a.message:String(a))}}}function bu(){let t=z(Ce(),{}),e=!1;t.enabledPlugins?.["keepmind@keepmind"]!==void 0&&(delete t.enabledPlugins["keepmind@keepmind"],e=!0),t.env&&typeof t.env=="object"&&!Array.isArray(t.env)&&Object.prototype.hasOwnProperty.call(t.env,"CLAUDE_CODE_DISABLE_AUTO_MEMORY")&&t.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY==="1"&&(delete t.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY,e=!0,Object.keys(t.env).length===0&&delete t.env),e&&se(Ce(),t)}function pE(){let t=Su(),e=0,r=Ue(t,".npm","_npx");if(_t(r)){let o=[];try{o=pi(r)}catch(i){console.warn(`[uninstall] Could not read ${r}:`,i instanceof Error?i.message:String(i))}for(let i of o){let a=Ue(r,i,"node_modules","keepmind");if(_t(a))try{Pr(a,{recursive:!0,force:!0}),e++}catch(l){console.warn(`[uninstall] Could not remove ${a}:`,l instanceof Error?l.message:String(l))}}}let n=Ue(t,".cache","claude-cli-nodejs");if(_t(n)){let o=[];try{o=pi(n)}catch(i){console.warn(`[uninstall] Could not read ${n}:`,i instanceof Error?i.message:String(i))}for(let i of o){let a=Ue(n,i),l=[];try{l=pi(a)}catch(c){console.warn(`[uninstall] Could not read ${a}:`,c instanceof Error?c.message:String(c));continue}for(let c of l){if(!c.startsWith("mcp-logs-plugin-claude-mem-"))continue;let u=Ue(a,c);try{Pr(u,{recursive:!0,force:!0}),e++}catch(m){console.warn(`[uninstall] Could not remove ${u}:`,m instanceof Error?m.message:String(m))}}}}let s=Ue(t,".claude","plugins","data","keepmind-keepmind");if(_t(s))try{Pr(s,{recursive:!0,force:!0}),e++}catch(o){console.warn(`[uninstall] Could not remove ${s}:`,o instanceof Error?o.message:String(o))}return e}async function mE(){if(or(fe.default.bgRed(fe.default.white(" claude-mem uninstall "))),Lt()){if(process.stdin.isTTY){let r=await yt({message:"Are you sure you want to uninstall claude-mem?",initialValue:!1});if(X(r)||!r){Ie("Uninstall cancelled.");return}}}else if(H.warn("claude-mem does not appear to be installed."),process.stdin.isTTY){let r=await yt({message:"Clean up any remaining registration data anyway?",initialValue:!1});if(X(r)||!r){Be("Nothing to do.");return}}else{Be("Nothing to do.");return}let t=re.get("CLAUDE_MEM_WORKER_PORT");try{(await fn(t,1e4)).workerWasRunning&&H.info("Worker service stopped.")}catch(r){console.warn("[uninstall] Worker shutdown attempt failed:",r instanceof Error?r.message:String(r))}await en([{title:"Removing marketplace directory",task:async()=>aE()?`Marketplace directory removed ${fe.default.green("OK")}`:`Marketplace directory not found ${fe.default.dim("skipped")}`},{title:"Removing cache directory",task:async()=>lE()?`Cache directory removed ${fe.default.green("OK")}`:`Cache directory not found ${fe.default.dim("skipped")}`},{title:"Removing marketplace registration",task:async()=>(cE(),`Marketplace registration removed ${fe.default.green("OK")}`)},{title:"Removing plugin registration",task:async()=>(uE(),`Plugin registration removed ${fe.default.green("OK")}`)},{title:"Removing from Claude settings",task:async()=>(bu(),`Claude settings updated ${fe.default.green("OK")}`)},{title:"Removing legacy claude-mem shell alias",task:async()=>(dE(),`Legacy alias check complete ${fe.default.green("OK")}`)},{title:"Removing stray claude-mem caches and logs",task:async()=>{let r=pE();return r>0?`Stray paths removed: ${r} ${fe.default.green("OK")}`:`No stray paths found ${fe.default.dim("skipped")}`}}]);let e=[{label:"Gemini CLI hooks",fn:async()=>{let{uninstallGeminiCliHooks:r}=await Promise.resolve().then(()=>(ho(),go));return r()}},{label:"Windsurf hooks",fn:async()=>{let{uninstallWindsurfHooks:r}=await Promise.resolve().then(()=>(ko(),Oo));return r()}},{label:"OpenCode plugin",fn:async()=>{let{uninstallOpenCodePlugin:r}=await Promise.resolve().then(()=>(Co(),Ro));return r()}},{label:"Codex CLI",fn:async()=>{let{uninstallCodexCli:r}=await Promise.resolve().then(()=>(Wo(),Fo));return r()}}];for(let{label:r,fn:n}of e)try{await n()===0&&H.info(`${r}: removed.`)}catch(s){console.warn(`[uninstall] ${r} cleanup failed:`,s instanceof Error?s.message:String(s))}Dt([`Your data directory at ${fe.default.cyan("~/.keepmind")} was preserved.`,"To remove it manually: rm -rf ~/.keepmind"].join(`
1344
- `),"Note"),Be(fe.default.green("claude-mem has been uninstalled."))}var fe,Tu=S(()=>{"use strict";vs();fe=je(rt(),1);Ae();Qt();Rt();eo()});var et={};he(et,{runAdoptCommand:()=>SE,runCleanupCommand:()=>bE,runRestartCommand:()=>Ei,runSearchCommand:()=>yE,runServerApiKeyCommand:()=>bi,runStartCommand:()=>gi,runStatusCommand:()=>Si,runStopCommand:()=>hi,runTranscriptWatchCommand:()=>TE});import{existsSync as Zt,readdirSync as fE,readFileSync as gE}from"fs";import{dirname as hE,join as Ur}from"path";function zn(){Lt()||(console.error(ge.default.red("keepmind is not installed.")),console.error(`Run: ${ge.default.bold("npx keepmind install")}`),process.exit(1))}function mi(){let t=un();return t||(console.error(ge.default.red("Node.js runtime not found.")),console.error("keepmind requires Node.js >= 22.5 \u2014 install it from https://nodejs.org"),console.error("After installation, restart your terminal."),process.exit(1)),t}function EE(){try{let t=JSON.parse(gE(Ur(ee(),"plugin",".claude-plugin","plugin.json"),"utf-8"));return typeof t?.version=="string"?t.version:null}catch{return null}}function vu(t){let e=EE();if(e){let n=Ur(nt(e),"scripts",t);if(Zt(n))return n}let r=Ur(Se(),"cache","keepmind","keepmind");if(Zt(r))for(let n of fE(r)){let s=Ur(r,n,"scripts",t);if(Zt(s))return s}return Ur(ee(),"plugin","scripts",t)}function Ru(){return vu("worker-service.cjs")}function fi(t,e,r="worker"){let n=He(t,e,{stdio:"inherit",cwd:hE(e[0]),env:Ct(process.env)});n.on("error",s=>{console.error(ge.default.red(`Failed to start ${r}: ${s.message}`)),process.exit(1)}),n.on("close",s=>{process.exit(s??0)})}function At(t,e=[]){zn();let r=mi(),n=Ru();Zt(n)||(console.error(ge.default.red(`Worker script not found at: ${n}`)),console.error("The installation may be corrupted. Try: npx keepmind install"),process.exit(1)),fi(r,[n,t,...e])}function gi(){At("start")}function hi(){At("stop")}function Ei(){At("restart")}function Si(){At("status")}function bi(t=[]){At("server",["api-key",...t])}function SE(t=[]){zn();let e=mi(),r=Ru();Zt(r)||(console.error(ge.default.red(`Worker script not found at: ${r}`)),console.error("The installation may be corrupted. Try: npx keepmind install"),process.exit(1));let n=process.cwd();fi(e,[r,"adopt","--cwd",n,...t])}function bE(t=[]){At("cleanup",t)}async function yE(t){zn();let e=t.join(" ").trim();e||(console.error(ge.default.red("Usage: npx keepmind search <query>")),process.exit(1));let n=`http://127.0.0.1:${re.get("CLAUDE_MEM_WORKER_PORT")}/api/search?query=${encodeURIComponent(e)}`,s;try{s=await fetch(n)}catch(i){let a=i instanceof Error?i.message:String(i);((i instanceof Error?i.cause:void 0)?.code==="ECONNREFUSED"||a.includes("ECONNREFUSED"))&&(console.error(ge.default.red("Worker is not running.")),console.error(`Start it with: ${ge.default.bold("npx keepmind start")}`),process.exit(1)),console.error(ge.default.red(`Search failed: ${a}`)),process.exit(1)}s.ok||(s.status===404&&(console.error(ge.default.red("Search endpoint not found. Is the worker running?")),console.error(`Try: ${ge.default.bold("npx keepmind start")}`),process.exit(1)),console.error(ge.default.red(`Search failed: HTTP ${s.status}`)),process.exit(1));let o;try{o=await s.json()}catch(i){let a=i instanceof Error?i.message:String(i);console.error(ge.default.red(`Search failed: invalid JSON response (${a})`)),process.exit(1)}console.log(typeof o=="object"&&o!==null?JSON.stringify(o,null,2):o)}function TE(){zn();let t=mi(),e=vu("transcript-watcher.cjs");if(!Zt(e)){At("transcript",["watch"]);return}fi(t,[e,"watch"],"transcript watcher")}var ge,Fe=S(()=>{"use strict";Pt();sn();ge=je(rt(),1);fr();Ae();Rt()});var Mu={};he(Mu,{checkLastInteraction:()=>Au,checkNodeVersion:()=>ku,checkProviderReadiness:()=>_u,runDoctorCommand:()=>GE,summarizeReport:()=>Nu});import{existsSync as Et,readFileSync as Fr,readdirSync as vE}from"fs";import{join as Nt}from"path";import{spawnSync as Cu}from"child_process";function wu(t){try{let e=j?Cu(`${t} --version`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:!0}):Cu(t,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return e.status===0?e.stdout.trim():null}catch{return null}}function RE(){let t=new Set;try{let e=Fr(P.envFile(),"utf-8");for(let r of e.split(/\r?\n/)){let n=r.trim();if(!n||n.startsWith("#"))continue;let s=n.indexOf("=");if(s<=0)continue;let o=n.slice(0,s).trim(),i=n.slice(s+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),o&&i&&t.add(o)}}catch{}return t}function CE(){try{let t=P.workerPid();if(Et(t)){let e=JSON.parse(Fr(t,"utf-8"));if(typeof e.pid=="number"&&typeof e.port=="number"){let r=!1;try{process.kill(e.pid,0),r=!0}catch(n){n?.code==="EPERM"&&(r=!0)}return{port:String(e.port),pidAlive:r,pidPort:e.port}}}}catch{}return{port:re.get("CLAUDE_MEM_WORKER_PORT"),pidAlive:!1,pidPort:null}}async function yi(t,e){try{let r=await fetch(t,{signal:AbortSignal.timeout(e)});return r.ok?await r.json():null}catch{return null}}async function wE(){let{port:t,pidAlive:e,pidPort:r}=CE(),n=`http://127.0.0.1:${t}`,s=await yi(`${n}/api/health`,3e3);if(!s)return{reachable:!1,port:Number(t),pidAlive:e,pidPort:r};let[o,i]=await Promise.all([yi(`${n}/api/stats`,3e3),yi(`${n}/api/chroma/status?deep=true`,8e3)]);return{reachable:!0,port:Number(t),pidAlive:e,pidPort:r,health:s,stats:o??void 0,chroma:i??void 0}}function ku(t=process.version){let e=/^v?(\d+)\.(\d+)/.exec(t),r=e?parseInt(e[1],10):0,n=e?parseInt(e[2],10):0,s=r>22||r===22&&n>=5;return{name:"Node.js >= 22.5",status:s?"ok":"fail",detail:s?t:`${t} is too old \u2014 keepmind needs Node >= 22.5 (node:sqlite). Install: https://nodejs.org`,required:!0}}function _u(t){let e="AI provider";if(!Iu.includes(t.provider))return{name:e,status:"fail",detail:`CLAUDE_MEM_PROVIDER='${t.provider}' is invalid \u2014 must be one of ${Iu.join(", ")}`,required:!0};if(t.provider==="gemini")return t.geminiKey.trim()!==""||t.envKeys.has("GEMINI_API_KEY")?{name:e,status:"ok",detail:"gemini \u2014 API key configured",required:!0}:{name:e,status:"fail",detail:"gemini selected but no API key \u2014 set CLAUDE_MEM_GEMINI_API_KEY in settings.json or GEMINI_API_KEY in ~/.keepmind/.env",required:!0};if(t.provider==="openrouter")return t.openrouterKey.trim()!==""||t.envKeys.has("OPENROUTER_API_KEY")?{name:e,status:"ok",detail:"openrouter \u2014 API key configured",required:!0}:{name:e,status:"fail",detail:"openrouter selected but no API key \u2014 set CLAUDE_MEM_OPENROUTER_API_KEY in settings.json or OPENROUTER_API_KEY in ~/.keepmind/.env",required:!0};if(!Ou.includes(t.claudeAuthMethod))return{name:e,status:"fail",detail:`claude auth method '${t.claudeAuthMethod}' is invalid \u2014 must be one of ${Ou.join(", ")}`,required:!0};switch(t.claudeAuthMethod){case"api-key":return t.envKeys.has("ANTHROPIC_API_KEY")?{name:e,status:"ok",detail:"claude \u2014 ANTHROPIC_API_KEY configured",required:!0}:{name:e,status:"fail",detail:"claude api-key auth selected but ANTHROPIC_API_KEY missing \u2014 add it to ~/.keepmind/.env",required:!0};case"gateway":return t.envKeys.has("ANTHROPIC_BASE_URL")?{name:e,status:"ok",detail:"claude \u2014 gateway (ANTHROPIC_BASE_URL) configured",required:!0}:{name:e,status:"fail",detail:"claude gateway auth selected but ANTHROPIC_BASE_URL missing \u2014 add it to ~/.keepmind/.env",required:!0};case"subscription":return t.staleMarker?{name:e,status:"warn",detail:"claude subscription \u2014 OAuth token is STALE; re-login by running `claude` interactively once",required:!0}:{name:e,status:"ok",detail:"claude \u2014 subscription (OAuth)",required:!0};default:return{name:e,status:"ok",detail:"claude \u2014 uses Claude Code CLI auth",required:!0}}}function Au(t){let e="Last compression",r=t?.lastInteraction;return!r||typeof r.success!="boolean"?{name:e,status:"skip",detail:"no compression has run yet \u2014 end a session to generate the first observation",required:!1}:r.success?{name:e,status:"ok",detail:"most recent summarizer call succeeded",required:!1}:{name:e,status:"warn",detail:`most recent summarizer call FAILED: ${r.error??"unknown error"}`,required:!1}}function Nu(t){let r=t.flatMap(n=>n.checks).filter(n=>n.required&&n.status==="fail").length;return{groups:t,ok:r===0,hardFailures:r}}function IE(t){let e=[];e.push(ku());let r=wu("bun");e.push({name:"Bun runtime",status:r?"ok":"warn",detail:r?`v${r.replace(/^v/,"")}`:"not found \u2014 optional; core memory works without it, but it installs the native deps for semantic vector search. Install: `winget install Oven-sh.Bun` (Windows) or https://bun.sh, then `npx keepmind install`.",required:!1});let n=Lt();e.push({name:"Plugin installed",status:n?"ok":"fail",detail:n?ee():"run `npx keepmind install`",required:!0});let s=(()=>{let c=Nt(Se(),"cache","keepmind","keepmind");try{return vE(c,{withFileTypes:!0}).some(u=>u.isDirectory()&&Et(Nt(c,u.name,"node_modules")))}catch{return!1}})(),o=Nt(ee(),"plugin","node_modules"),i=s||Et(o);e.push({name:"Plugin deps",status:n?i?"ok":"fail":"warn",detail:i?"node_modules present":"missing \u2014 run `npx keepmind repair`",required:n});let a=wu("uv");e.push({name:"uv (optional)",status:"ok",detail:a?`${a} \u2014 present (no longer required; vector search is in-process)`:"not installed \u2014 optional; vector search runs in-process, uv is not needed",required:!1});let l=Nt(t,"last-install-error.json");if(Et(l)){let c=`present at ${l}`;try{let u=JSON.parse(Fr(l,"utf-8"));u&&typeof u=="object"&&(c=`${u.categoryId??"error"}: ${u.remediation??c}`)}catch{}e.push({name:"Last install error",status:"warn",detail:c,required:!1})}return{title:"Runtime & Install",checks:e}}function OE(t){let e=[],r=RE();for(let s of["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL","GEMINI_API_KEY","OPENROUTER_API_KEY"])process.env[s]&&process.env[s].trim()!==""&&r.add(s);let n;try{let s=Nt(lt(),"oauth-stale.marker");Et(s)&&(n=Fr(s,"utf-8"))}catch{}return e.push(_u({provider:re.get("CLAUDE_MEM_PROVIDER"),claudeAuthMethod:re.get("CLAUDE_MEM_CLAUDE_AUTH_METHOD"),geminiKey:re.get("CLAUDE_MEM_GEMINI_API_KEY"),openrouterKey:re.get("CLAUDE_MEM_OPENROUTER_API_KEY"),envKeys:r,staleMarker:n})),t.reachable&&e.push(Au(t.health?.ai)),{title:"AI Provider",checks:e}}function kE(t){let e=[];if(t.reachable){let r=t.health??{},n=[`v${(r.version??"?").replace(/^v/,"")}`,r.initialized===!1?"initializing":"initialized",r.mcpReady?"MCP ready":"MCP pending"],s=r.status!=="degraded"&&r.initialized!==!1;e.push({name:"Worker daemon",status:s?"ok":"warn",detail:`${s?"healthy":"degraded"} at http://127.0.0.1:${t.port} (${n.join(", ")})`,required:!1})}else e.push({name:"Worker daemon",status:"fail",detail:`no response on port ${t.port} \u2014 start with \`npx keepmind start\``,required:!1});return t.pidPort===null?e.push({name:"Worker PID file",status:t.reachable?"warn":"skip",detail:t.reachable?"worker responded but no valid worker.pid on disk":"no worker.pid \u2014 worker has not been started",required:!1}):t.pidAlive?e.push({name:"Worker PID file",status:t.reachable?"ok":"warn",detail:t.reachable?`live (port ${t.pidPort})`:`PID alive but daemon not responding on port ${t.pidPort} \u2014 likely a reused/stale PID; clear with \`npx keepmind restart\``,required:!1}):e.push({name:"Worker PID file",status:"warn",detail:"STALE \u2014 worker.pid points at a dead process; clear with `npx keepmind restart`",required:!1}),{title:"Worker",checks:e}}function _E(){let t=cr();if(!Et(t))return{obs:null,schema:null,error:"no database file yet"};let e=null;try{e=new be(t,{readonly:!0});let r=e.prepare("SELECT COUNT(*) AS n FROM observations").get(),n=null;try{n=e.prepare("SELECT MAX(version) AS v FROM schema_versions").get()?.v??null}catch{}return{obs:r?.n??0,schema:n}}catch(r){return{obs:null,schema:null,error:r instanceof Error?r.message:String(r)}}finally{e?.close()}}function AE(t){let e=[];if(t.reachable&&t.stats?.database){let n=t.stats.database;e.push({name:"Database",status:"ok",detail:`${n.observations??0} observations, ${n.sessions??0} sessions (${ME(n.size)})`,required:!1})}else{let{obs:n,schema:s,error:o}=_E();o&&n===null?e.push({name:"Database",status:n===null&&o==="no database file yet"?"warn":"fail",detail:o==="no database file yet"?"no database yet \u2014 created on first session":`cannot open database read-only: ${o}`,required:!1}):e.push({name:"Database",status:"ok",detail:`${n??0} observations${s!==null?`, schema v${s}`:""} (read-only probe)`,required:!1})}if(!(re.get("CLAUDE_MEM_CHROMA_ENABLED")!=="false"))e.push({name:"Vector search",status:"warn",detail:"disabled via CLAUDE_MEM_CHROMA_ENABLED=false \u2014 semantic search falls back to SQLite/BM25",required:!1});else if(t.reachable&&t.chroma){let n=t.chroma;if(n.status==="disabled")e.push({name:"Vector search",status:"warn",detail:"worker has vector search OFF (started with CLAUDE_MEM_CHROMA_ENABLED=false in its env) \u2014 restart without that flag to enable",required:!1});else if(n.probe){let s=n.probe;e.push({name:"Vector search",status:s.ok?"ok":"warn",detail:s.ok?`ready (${n.backend??"sqlite-vec"}, embedder ${s.embedderWarm?"warm":"cold"}, ${s.queryLatencyMs??"?"}ms)`:`unhealthy: ${s.error??"probe failed"}`,required:!1})}else e.push({name:"Vector search",status:n.connected?"ok":"warn",detail:`${n.status??"unknown"} (${n.backend??"sqlite-vec"})`,required:!1})}else{let n=Et(Nt(ks,"vectors.db"));e.push({name:"Vector search",status:n?"ok":"skip",detail:n?"enabled; vector store present (start worker for a live readiness probe)":"enabled but no vector store yet \u2014 built on first backfill",required:!1})}return{title:"Memory Store",checks:e}}async function NE(){let t=[],e="ok",r="api.anthropic.com reachable, certificate trusted";try{r=`reachable (HTTP ${(await fetch("https://api.anthropic.com/v1/models",{method:"GET",signal:AbortSignal.timeout(5e3)})).status}), certificate trusted`}catch(n){let s=n?.cause?.code??n?.code??"";["CERT_HAS_EXPIRED","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","DEPTH_ZERO_SELF_SIGNED_CERT","CERT_UNTRUSTED"].includes(s)?(e="fail",r=`certificate rejected (${s}) \u2014 corporate TLS interception. Export your corporate root CA to a .pem and set NODE_EXTRA_CA_CERTS to it. On Windows, Claude Code's bundled runtime currently IGNORES CA env vars (upstream bug #71581); until fixed, workaround: NODE_TLS_REJECT_UNAUTHORIZED=0.`):(e="warn",r=`could not reach api.anthropic.com (${s||"network error"}) \u2014 offline or blocked`)}return t.push({name:"API TLS reachability",status:e,detail:r,required:!1}),{title:"Connectivity",checks:t}}function ME(t){if(!t||t<=0)return"0 B";let e=["B","KB","MB","GB"],r=t,n=0;for(;r>=1024&&n<e.length-1;)r/=1024,n++;return`${r.toFixed(n===0?0:1)} ${e[n]}`}function LE(t){console.log(Me.default.bold(`
1343
+ `)),console.error(`Removed legacy claude-mem alias from ${n}`)}catch(a){console.warn(`[uninstall] Could not rewrite ${n}:`,a instanceof Error?a.message:String(a))}}}function bu(){let t=z(Re(),{}),e=!1;t.enabledPlugins?.["keepmind@keepmind"]!==void 0&&(delete t.enabledPlugins["keepmind@keepmind"],e=!0),t.env&&typeof t.env=="object"&&!Array.isArray(t.env)&&Object.prototype.hasOwnProperty.call(t.env,"CLAUDE_CODE_DISABLE_AUTO_MEMORY")&&t.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY==="1"&&(delete t.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY,e=!0,Object.keys(t.env).length===0&&delete t.env),e&&se(Re(),t)}function pE(){let t=Su(),e=0,r=Ue(t,".npm","_npx");if(_t(r)){let o=[];try{o=pi(r)}catch(i){console.warn(`[uninstall] Could not read ${r}:`,i instanceof Error?i.message:String(i))}for(let i of o){let a=Ue(r,i,"node_modules","keepmind");if(_t(a))try{Pr(a,{recursive:!0,force:!0}),e++}catch(l){console.warn(`[uninstall] Could not remove ${a}:`,l instanceof Error?l.message:String(l))}}}let n=Ue(t,".cache","claude-cli-nodejs");if(_t(n)){let o=[];try{o=pi(n)}catch(i){console.warn(`[uninstall] Could not read ${n}:`,i instanceof Error?i.message:String(i))}for(let i of o){let a=Ue(n,i),l=[];try{l=pi(a)}catch(c){console.warn(`[uninstall] Could not read ${a}:`,c instanceof Error?c.message:String(c));continue}for(let c of l){if(!c.startsWith("mcp-logs-plugin-claude-mem-"))continue;let u=Ue(a,c);try{Pr(u,{recursive:!0,force:!0}),e++}catch(m){console.warn(`[uninstall] Could not remove ${u}:`,m instanceof Error?m.message:String(m))}}}}let s=Ue(t,".claude","plugins","data","keepmind-keepmind");if(_t(s))try{Pr(s,{recursive:!0,force:!0}),e++}catch(o){console.warn(`[uninstall] Could not remove ${s}:`,o instanceof Error?o.message:String(o))}return e}async function mE(){if(or(fe.default.bgRed(fe.default.white(" claude-mem uninstall "))),Lt()){if(process.stdin.isTTY){let r=await yt({message:"Are you sure you want to uninstall claude-mem?",initialValue:!1});if(X(r)||!r){Ie("Uninstall cancelled.");return}}}else if(H.warn("claude-mem does not appear to be installed."),process.stdin.isTTY){let r=await yt({message:"Clean up any remaining registration data anyway?",initialValue:!1});if(X(r)||!r){Be("Nothing to do.");return}}else{Be("Nothing to do.");return}let t=re.get("CLAUDE_MEM_WORKER_PORT");try{(await fn(t,1e4)).workerWasRunning&&H.info("Worker service stopped.")}catch(r){console.warn("[uninstall] Worker shutdown attempt failed:",r instanceof Error?r.message:String(r))}await en([{title:"Removing marketplace directory",task:async()=>aE()?`Marketplace directory removed ${fe.default.green("OK")}`:`Marketplace directory not found ${fe.default.dim("skipped")}`},{title:"Removing cache directory",task:async()=>lE()?`Cache directory removed ${fe.default.green("OK")}`:`Cache directory not found ${fe.default.dim("skipped")}`},{title:"Removing marketplace registration",task:async()=>(cE(),`Marketplace registration removed ${fe.default.green("OK")}`)},{title:"Removing plugin registration",task:async()=>(uE(),`Plugin registration removed ${fe.default.green("OK")}`)},{title:"Removing from Claude settings",task:async()=>(bu(),`Claude settings updated ${fe.default.green("OK")}`)},{title:"Removing legacy claude-mem shell alias",task:async()=>(dE(),`Legacy alias check complete ${fe.default.green("OK")}`)},{title:"Removing stray claude-mem caches and logs",task:async()=>{let r=pE();return r>0?`Stray paths removed: ${r} ${fe.default.green("OK")}`:`No stray paths found ${fe.default.dim("skipped")}`}}]);let e=[{label:"Gemini CLI hooks",fn:async()=>{let{uninstallGeminiCliHooks:r}=await Promise.resolve().then(()=>(ho(),go));return r()}},{label:"Windsurf hooks",fn:async()=>{let{uninstallWindsurfHooks:r}=await Promise.resolve().then(()=>(ko(),Oo));return r()}},{label:"OpenCode plugin",fn:async()=>{let{uninstallOpenCodePlugin:r}=await Promise.resolve().then(()=>(Ro(),Co));return r()}},{label:"Codex CLI",fn:async()=>{let{uninstallCodexCli:r}=await Promise.resolve().then(()=>(Wo(),Fo));return r()}}];for(let{label:r,fn:n}of e)try{await n()===0&&H.info(`${r}: removed.`)}catch(s){console.warn(`[uninstall] ${r} cleanup failed:`,s instanceof Error?s.message:String(s))}Dt([`Your data directory at ${fe.default.cyan("~/.keepmind")} was preserved.`,"To remove it manually: rm -rf ~/.keepmind"].join(`
1344
+ `),"Note"),Be(fe.default.green("claude-mem has been uninstalled."))}var fe,Tu=S(()=>{"use strict";vs();fe=je(rt(),1);Ae();Qt();Ct();eo()});var et={};he(et,{runAdoptCommand:()=>SE,runCleanupCommand:()=>bE,runRestartCommand:()=>Ei,runSearchCommand:()=>yE,runServerApiKeyCommand:()=>bi,runStartCommand:()=>gi,runStatusCommand:()=>Si,runStopCommand:()=>hi,runTranscriptWatchCommand:()=>TE});import{existsSync as Zt,readdirSync as fE,readFileSync as gE}from"fs";import{dirname as hE,join as Ur}from"path";function zn(){Lt()||(console.error(ge.default.red("keepmind is not installed.")),console.error(`Run: ${ge.default.bold("npx keepmind install")}`),process.exit(1))}function mi(){let t=un();return t||(console.error(ge.default.red("Node.js runtime not found.")),console.error("keepmind requires Node.js >= 22.5 \u2014 install it from https://nodejs.org"),console.error("After installation, restart your terminal."),process.exit(1)),t}function EE(){try{let t=JSON.parse(gE(Ur(ee(),"plugin",".claude-plugin","plugin.json"),"utf-8"));return typeof t?.version=="string"?t.version:null}catch{return null}}function vu(t){let e=EE();if(e){let n=Ur(nt(e),"scripts",t);if(Zt(n))return n}let r=Ur(Se(),"cache","keepmind","keepmind");if(Zt(r))for(let n of fE(r)){let s=Ur(r,n,"scripts",t);if(Zt(s))return s}return Ur(ee(),"plugin","scripts",t)}function Cu(){return vu("worker-service.cjs")}function fi(t,e,r="worker"){let n=He(t,e,{stdio:"inherit",cwd:hE(e[0]),env:Rt(process.env)});n.on("error",s=>{console.error(ge.default.red(`Failed to start ${r}: ${s.message}`)),process.exit(1)}),n.on("close",s=>{process.exit(s??0)})}function At(t,e=[]){zn();let r=mi(),n=Cu();Zt(n)||(console.error(ge.default.red(`Worker script not found at: ${n}`)),console.error("The installation may be corrupted. Try: npx keepmind install"),process.exit(1)),fi(r,[n,t,...e])}function gi(){At("start")}function hi(){At("stop")}function Ei(){At("restart")}function Si(){At("status")}function bi(t=[]){At("server",["api-key",...t])}function SE(t=[]){zn();let e=mi(),r=Cu();Zt(r)||(console.error(ge.default.red(`Worker script not found at: ${r}`)),console.error("The installation may be corrupted. Try: npx keepmind install"),process.exit(1));let n=process.cwd();fi(e,[r,"adopt","--cwd",n,...t])}function bE(t=[]){At("cleanup",t)}async function yE(t){zn();let e=t.join(" ").trim();e||(console.error(ge.default.red("Usage: npx keepmind search <query>")),process.exit(1));let n=`http://127.0.0.1:${re.get("CLAUDE_MEM_WORKER_PORT")}/api/search?query=${encodeURIComponent(e)}`,s;try{s=await fetch(n)}catch(i){let a=i instanceof Error?i.message:String(i);((i instanceof Error?i.cause:void 0)?.code==="ECONNREFUSED"||a.includes("ECONNREFUSED"))&&(console.error(ge.default.red("Worker is not running.")),console.error(`Start it with: ${ge.default.bold("npx keepmind start")}`),process.exit(1)),console.error(ge.default.red(`Search failed: ${a}`)),process.exit(1)}s.ok||(s.status===404&&(console.error(ge.default.red("Search endpoint not found. Is the worker running?")),console.error(`Try: ${ge.default.bold("npx keepmind start")}`),process.exit(1)),console.error(ge.default.red(`Search failed: HTTP ${s.status}`)),process.exit(1));let o;try{o=await s.json()}catch(i){let a=i instanceof Error?i.message:String(i);console.error(ge.default.red(`Search failed: invalid JSON response (${a})`)),process.exit(1)}console.log(typeof o=="object"&&o!==null?JSON.stringify(o,null,2):o)}function TE(){zn();let t=mi(),e=vu("transcript-watcher.cjs");if(!Zt(e)){At("transcript",["watch"]);return}fi(t,[e,"watch"],"transcript watcher")}var ge,Fe=S(()=>{"use strict";Pt();sn();ge=je(rt(),1);fr();Ae();Ct()});var Mu={};he(Mu,{checkLastInteraction:()=>Au,checkNodeVersion:()=>ku,checkProviderReadiness:()=>_u,runDoctorCommand:()=>GE,summarizeReport:()=>Nu});import{existsSync as Et,readFileSync as Fr,readdirSync as vE}from"fs";import{join as Nt}from"path";import{spawnSync as Ru}from"child_process";function wu(t){try{let e=j?Ru(`${t} --version`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:!0}):Ru(t,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"]});return e.status===0?e.stdout.trim():null}catch{return null}}function CE(){let t=new Set;try{let e=Fr(P.envFile(),"utf-8");for(let r of e.split(/\r?\n/)){let n=r.trim();if(!n||n.startsWith("#"))continue;let s=n.indexOf("=");if(s<=0)continue;let o=n.slice(0,s).trim(),i=n.slice(s+1).trim();(i.startsWith('"')&&i.endsWith('"')||i.startsWith("'")&&i.endsWith("'"))&&(i=i.slice(1,-1)),o&&i&&t.add(o)}}catch{}return t}function RE(){try{let t=P.workerPid();if(Et(t)){let e=JSON.parse(Fr(t,"utf-8"));if(typeof e.pid=="number"&&typeof e.port=="number"){let r=!1;try{process.kill(e.pid,0),r=!0}catch(n){n?.code==="EPERM"&&(r=!0)}return{port:String(e.port),pidAlive:r,pidPort:e.port}}}}catch{}return{port:re.get("CLAUDE_MEM_WORKER_PORT"),pidAlive:!1,pidPort:null}}async function yi(t,e){try{let r=await fetch(t,{signal:AbortSignal.timeout(e)});return r.ok?await r.json():null}catch{return null}}async function wE(){let{port:t,pidAlive:e,pidPort:r}=RE(),n=`http://127.0.0.1:${t}`,s=await yi(`${n}/api/health`,3e3);if(!s)return{reachable:!1,port:Number(t),pidAlive:e,pidPort:r};let[o,i]=await Promise.all([yi(`${n}/api/stats`,3e3),yi(`${n}/api/chroma/status?deep=true`,8e3)]);return{reachable:!0,port:Number(t),pidAlive:e,pidPort:r,health:s,stats:o??void 0,chroma:i??void 0}}function ku(t=process.version){let e=/^v?(\d+)\.(\d+)/.exec(t),r=e?parseInt(e[1],10):0,n=e?parseInt(e[2],10):0,s=r>22||r===22&&n>=5;return{name:"Node.js >= 22.5",status:s?"ok":"fail",detail:s?t:`${t} is too old \u2014 keepmind needs Node >= 22.5 (node:sqlite). Install: https://nodejs.org`,required:!0}}function _u(t){let e="AI provider";if(!Iu.includes(t.provider))return{name:e,status:"fail",detail:`CLAUDE_MEM_PROVIDER='${t.provider}' is invalid \u2014 must be one of ${Iu.join(", ")}`,required:!0};if(t.provider==="gemini")return t.geminiKey.trim()!==""||t.envKeys.has("GEMINI_API_KEY")?{name:e,status:"ok",detail:"gemini \u2014 API key configured",required:!0}:{name:e,status:"fail",detail:"gemini selected but no API key \u2014 set CLAUDE_MEM_GEMINI_API_KEY in settings.json or GEMINI_API_KEY in ~/.keepmind/.env",required:!0};if(t.provider==="openrouter")return t.openrouterKey.trim()!==""||t.envKeys.has("OPENROUTER_API_KEY")?{name:e,status:"ok",detail:"openrouter \u2014 API key configured",required:!0}:{name:e,status:"fail",detail:"openrouter selected but no API key \u2014 set CLAUDE_MEM_OPENROUTER_API_KEY in settings.json or OPENROUTER_API_KEY in ~/.keepmind/.env",required:!0};if(!Ou.includes(t.claudeAuthMethod))return{name:e,status:"fail",detail:`claude auth method '${t.claudeAuthMethod}' is invalid \u2014 must be one of ${Ou.join(", ")}`,required:!0};switch(t.claudeAuthMethod){case"api-key":return t.envKeys.has("ANTHROPIC_API_KEY")?{name:e,status:"ok",detail:"claude \u2014 ANTHROPIC_API_KEY configured",required:!0}:{name:e,status:"fail",detail:"claude api-key auth selected but ANTHROPIC_API_KEY missing \u2014 add it to ~/.keepmind/.env",required:!0};case"gateway":return t.envKeys.has("ANTHROPIC_BASE_URL")?{name:e,status:"ok",detail:"claude \u2014 gateway (ANTHROPIC_BASE_URL) configured",required:!0}:{name:e,status:"fail",detail:"claude gateway auth selected but ANTHROPIC_BASE_URL missing \u2014 add it to ~/.keepmind/.env",required:!0};case"subscription":return t.staleMarker?{name:e,status:"warn",detail:"claude subscription \u2014 OAuth token is STALE; re-login by running `claude` interactively once",required:!0}:{name:e,status:"ok",detail:"claude \u2014 subscription (OAuth)",required:!0};default:return{name:e,status:"ok",detail:"claude \u2014 uses Claude Code CLI auth",required:!0}}}function Au(t){let e="Last compression",r=t?.lastInteraction;return!r||typeof r.success!="boolean"?{name:e,status:"skip",detail:"no compression has run yet \u2014 end a session to generate the first observation",required:!1}:r.success?{name:e,status:"ok",detail:"most recent summarizer call succeeded",required:!1}:{name:e,status:"warn",detail:`most recent summarizer call FAILED: ${r.error??"unknown error"}`,required:!1}}function Nu(t){let r=t.flatMap(n=>n.checks).filter(n=>n.required&&n.status==="fail").length;return{groups:t,ok:r===0,hardFailures:r}}function IE(t){let e=[];e.push(ku());let r=wu("bun");e.push({name:"Bun runtime",status:r?"ok":"warn",detail:r?`v${r.replace(/^v/,"")}`:"not found \u2014 optional; core memory works without it, but it installs the native deps for semantic vector search. Install: `winget install Oven-sh.Bun` (Windows) or https://bun.sh, then `npx keepmind install`.",required:!1});let n=Lt();e.push({name:"Plugin installed",status:n?"ok":"fail",detail:n?ee():"run `npx keepmind install`",required:!0});let s=(()=>{let c=Nt(Se(),"cache","keepmind","keepmind");try{return vE(c,{withFileTypes:!0}).some(u=>u.isDirectory()&&Et(Nt(c,u.name,"node_modules")))}catch{return!1}})(),o=Nt(ee(),"plugin","node_modules"),i=s||Et(o);e.push({name:"Plugin deps",status:n?i?"ok":"fail":"warn",detail:i?"node_modules present":"missing \u2014 run `npx keepmind repair`",required:n});let a=wu("uv");e.push({name:"uv (optional)",status:"ok",detail:a?`${a} \u2014 present (no longer required; vector search is in-process)`:"not installed \u2014 optional; vector search runs in-process, uv is not needed",required:!1});let l=Nt(t,"last-install-error.json");if(Et(l)){let c=`present at ${l}`;try{let u=JSON.parse(Fr(l,"utf-8"));u&&typeof u=="object"&&(c=`${u.categoryId??"error"}: ${u.remediation??c}`)}catch{}e.push({name:"Last install error",status:"warn",detail:c,required:!1})}return{title:"Runtime & Install",checks:e}}function OE(t){let e=[],r=CE();for(let s of["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL","GEMINI_API_KEY","OPENROUTER_API_KEY"])process.env[s]&&process.env[s].trim()!==""&&r.add(s);let n;try{let s=Nt(lt(),"oauth-stale.marker");Et(s)&&(n=Fr(s,"utf-8"))}catch{}return e.push(_u({provider:re.get("CLAUDE_MEM_PROVIDER"),claudeAuthMethod:re.get("CLAUDE_MEM_CLAUDE_AUTH_METHOD"),geminiKey:re.get("CLAUDE_MEM_GEMINI_API_KEY"),openrouterKey:re.get("CLAUDE_MEM_OPENROUTER_API_KEY"),envKeys:r,staleMarker:n})),t.reachable&&e.push(Au(t.health?.ai)),{title:"AI Provider",checks:e}}function kE(t){let e=[];if(t.reachable){let r=t.health??{},n=[`v${(r.version??"?").replace(/^v/,"")}`,r.initialized===!1?"initializing":"initialized",r.mcpReady?"MCP ready":"MCP pending"],s=r.status!=="degraded"&&r.initialized!==!1;e.push({name:"Worker daemon",status:s?"ok":"warn",detail:`${s?"healthy":"degraded"} at http://127.0.0.1:${t.port} (${n.join(", ")})`,required:!1})}else e.push({name:"Worker daemon",status:"fail",detail:`no response on port ${t.port} \u2014 start with \`npx keepmind start\``,required:!1});return t.pidPort===null?e.push({name:"Worker PID file",status:t.reachable?"warn":"skip",detail:t.reachable?"worker responded but no valid worker.pid on disk":"no worker.pid \u2014 worker has not been started",required:!1}):t.pidAlive?e.push({name:"Worker PID file",status:t.reachable?"ok":"warn",detail:t.reachable?`live (port ${t.pidPort})`:`PID alive but daemon not responding on port ${t.pidPort} \u2014 likely a reused/stale PID; clear with \`npx keepmind restart\``,required:!1}):e.push({name:"Worker PID file",status:"warn",detail:"STALE \u2014 worker.pid points at a dead process; clear with `npx keepmind restart`",required:!1}),{title:"Worker",checks:e}}function _E(){let t=cr();if(!Et(t))return{obs:null,schema:null,error:"no database file yet"};let e=null;try{e=new be(t,{readonly:!0});let r=e.prepare("SELECT COUNT(*) AS n FROM observations").get(),n=null;try{n=e.prepare("SELECT MAX(version) AS v FROM schema_versions").get()?.v??null}catch{}return{obs:r?.n??0,schema:n}}catch(r){return{obs:null,schema:null,error:r instanceof Error?r.message:String(r)}}finally{e?.close()}}function AE(t){let e=[];if(t.reachable&&t.stats?.database){let n=t.stats.database;e.push({name:"Database",status:"ok",detail:`${n.observations??0} observations, ${n.sessions??0} sessions (${ME(n.size)})`,required:!1})}else{let{obs:n,schema:s,error:o}=_E();o&&n===null?e.push({name:"Database",status:n===null&&o==="no database file yet"?"warn":"fail",detail:o==="no database file yet"?"no database yet \u2014 created on first session":`cannot open database read-only: ${o}`,required:!1}):e.push({name:"Database",status:"ok",detail:`${n??0} observations${s!==null?`, schema v${s}`:""} (read-only probe)`,required:!1})}if(!(re.get("CLAUDE_MEM_CHROMA_ENABLED")!=="false"))e.push({name:"Vector search",status:"warn",detail:"disabled via CLAUDE_MEM_CHROMA_ENABLED=false \u2014 semantic search falls back to SQLite/BM25",required:!1});else if(t.reachable&&t.chroma){let n=t.chroma;if(n.status==="disabled")e.push({name:"Vector search",status:"warn",detail:"worker has vector search OFF (started with CLAUDE_MEM_CHROMA_ENABLED=false in its env) \u2014 restart without that flag to enable",required:!1});else if(n.probe){let s=n.probe;e.push({name:"Vector search",status:s.ok?"ok":"warn",detail:s.ok?`ready (${n.backend??"sqlite-vec"}, embedder ${s.embedderWarm?"warm":"cold"}, ${s.queryLatencyMs??"?"}ms)`:`unhealthy: ${s.error??"probe failed"}`,required:!1})}else e.push({name:"Vector search",status:n.connected?"ok":"warn",detail:`${n.status??"unknown"} (${n.backend??"sqlite-vec"})`,required:!1})}else{let n=Et(Nt(ks,"vectors.db"));e.push({name:"Vector search",status:n?"ok":"skip",detail:n?"enabled; vector store present (start worker for a live readiness probe)":"enabled but no vector store yet \u2014 built on first backfill",required:!1})}return{title:"Memory Store",checks:e}}async function NE(){let t=[],e="ok",r="api.anthropic.com reachable, certificate trusted";try{r=`reachable (HTTP ${(await fetch("https://api.anthropic.com/v1/models",{method:"GET",signal:AbortSignal.timeout(5e3)})).status}), certificate trusted`}catch(n){let s=n?.cause?.code??n?.code??"";["CERT_HAS_EXPIRED","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_VERIFY_LEAF_SIGNATURE","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","DEPTH_ZERO_SELF_SIGNED_CERT","CERT_UNTRUSTED"].includes(s)?(e="fail",r=`certificate rejected (${s}) \u2014 corporate TLS interception. Export your corporate root CA to a .pem and set NODE_EXTRA_CA_CERTS to it. On Windows, Claude Code's bundled runtime currently IGNORES CA env vars (upstream bug #71581); until fixed, workaround: NODE_TLS_REJECT_UNAUTHORIZED=0.`):(e="warn",r=`could not reach api.anthropic.com (${s||"network error"}) \u2014 offline or blocked`)}return t.push({name:"API TLS reachability",status:e,detail:r,required:!1}),{title:"Connectivity",checks:t}}function ME(t){if(!t||t<=0)return"0 B";let e=["B","KB","MB","GB"],r=t,n=0;for(;r>=1024&&n<e.length-1;)r/=1024,n++;return`${r.toFixed(n===0?0:1)} ${e[n]}`}function LE(t){console.log(Me.default.bold(`
1345
1345
  keepmind doctor
1346
- `));for(let e of t.groups){console.log(Me.default.bold(Me.default.cyan(` ${e.title}`)));for(let r of e.checks)console.log(` ${xE(r.status)} ${r.name.padEnd(22)} ${Me.default.dim(r.detail)}`);console.log("")}t.ok?console.log(Me.default.green("All required checks passed.")):console.log(Me.default.red(`${t.hardFailures} required check(s) failed \u2014 see remediation above.`))}function UE(t){let e=t.health?.version;if(typeof e=="string"&&e.trim())return e.replace(/^v/,"");try{let r=Nt(ee(),"plugin","package.json");if(Et(r)){let n=JSON.parse(Fr(r,"utf-8"));if(typeof n.version=="string"&&n.version.trim())return n.version.replace(/^v/,"")}}catch{}return null}async function FE(){try{let t=await fetch(DE,{signal:AbortSignal.timeout(PE)});if(!t.ok)return null;let e=await t.json();return typeof e.version=="string"&&e.version.trim()?e.version.replace(/^v/,""):null}catch{return null}}function WE(t,e){let r=t.split(".").map(s=>parseInt(s,10)||0),n=e.split(".").map(s=>parseInt(s,10)||0);for(let s=0;s<3;s++){let o=(r[s]||0)-(n[s]||0);if(o!==0)return o}return 0}async function jE(t){let e=UE(t),r=await FE(),n;return e?r?WE(r,e)>0?n={name:"Update available",status:"warn",detail:`v${e} installed, v${r} on npm. In Claude Code: \`/plugin marketplace update keepmind\` then \`/plugin install keepmind@keepmind\`. Tip: enable auto-update (/plugin \u2192 Marketplaces \u2192 keepmind) so updates apply automatically.`,required:!1}:n={name:"Version",status:"ok",detail:`v${e} (up to date)`,required:!1}:n={name:"Version",status:"skip",detail:`v${e} installed \u2014 could not reach npm to check for a newer version`,required:!1}:n={name:"Version",status:"skip",detail:"could not determine the installed keepmind version",required:!1},{title:"Updates",checks:[n]}}async function GE(t=[]){let e=t.includes("--json"),r=lt(),n=await wE(),s=[IE(r),await jE(n),OE(n),kE(n),AE(n),await NE()],o=Nu(s);e?console.log(JSON.stringify(o,null,2)):LE(o),process.exit(o.ok?0:1)}var Me,Iu,Ou,xE,DE,PE,xu=S(()=>{"use strict";Me=je(rt(),1);Ae();Rt();J();Lr();Iu=["claude","gemini","openrouter"],Ou=["subscription","api-key","gateway","cli"];xE=t=>t==="ok"?Me.default.green("\u2713"):t==="warn"?Me.default.yellow("!"):t==="skip"?Me.default.dim("\xB7"):Me.default.red("\u2717");DE="https://registry.npmjs.org/keepmind/latest",PE=3e3});var Ti={};he(Ti,{runServerCommand:()=>HE,runWorkerAliasCommand:()=>JE});function Lu(){console.error(`Usage: ${Wr.default.bold("npx keepmind server <command>")}`),console.error("Commands: api-key create|list|revoke")}function BE(t){switch(t){case"start":return gi(),!0;case"stop":return hi(),!0;case"restart":return Ei(),!0;case"status":return Si(),!0;default:return!1}}async function HE(t=[]){let e=t[0]?.toLowerCase();if(e||(Lu(),process.exit(1)),e==="api-key"){let r=t[1]?.toLowerCase();if(r==="create"||r==="list"||r==="revoke"){bi(t.slice(1));return}console.error(Wr.default.red(`Unknown server api-key subcommand: ${r??"(none)"}`)),console.error("Usage: npx keepmind server api-key create|list|revoke"),process.exit(1)}console.error(Wr.default.red(`Unknown server command: ${e}`)),Lu(),process.exit(1)}function JE(t=[]){let e=t[0]?.toLowerCase();(!e||!BE(e))&&(console.error(Wr.default.red(`Unknown worker command: ${e??"(none)"}`)),console.error("Usage: npx keepmind worker start|stop|restart|status"),process.exit(1))}var Wr,vi=S(()=>{"use strict";Wr=je(rt(),1);Fe()});var x=je(rt(),1);Ae();var We=process.argv.slice(2),Ri=We[0]?.toLowerCase()??"",KE=new Set(["-h","--help","-v","--version"]),Du=Ri.startsWith("-")&&!KE.has(Ri)?"install":Ri;function VE(){let t=xt();console.log(`
1346
+ `));for(let e of t.groups){console.log(Me.default.bold(Me.default.cyan(` ${e.title}`)));for(let r of e.checks)console.log(` ${xE(r.status)} ${r.name.padEnd(22)} ${Me.default.dim(r.detail)}`);console.log("")}t.ok?console.log(Me.default.green("All required checks passed.")):console.log(Me.default.red(`${t.hardFailures} required check(s) failed \u2014 see remediation above.`))}function UE(t){let e=t.health?.version;if(typeof e=="string"&&e.trim())return e.replace(/^v/,"");try{let r=Nt(ee(),"plugin","package.json");if(Et(r)){let n=JSON.parse(Fr(r,"utf-8"));if(typeof n.version=="string"&&n.version.trim())return n.version.replace(/^v/,"")}}catch{}return null}async function FE(){try{let t=await fetch(DE,{signal:AbortSignal.timeout(PE)});if(!t.ok)return null;let e=await t.json();return typeof e.version=="string"&&e.version.trim()?e.version.replace(/^v/,""):null}catch{return null}}function WE(t,e){let r=t.split(".").map(s=>parseInt(s,10)||0),n=e.split(".").map(s=>parseInt(s,10)||0);for(let s=0;s<3;s++){let o=(r[s]||0)-(n[s]||0);if(o!==0)return o}return 0}async function jE(t){let e=UE(t),r=await FE(),n;return e?r?WE(r,e)>0?n={name:"Update available",status:"warn",detail:`v${e} installed, v${r} on npm. In Claude Code: \`/plugin marketplace update keepmind\` then \`/plugin install keepmind@keepmind\`. Tip: enable auto-update (/plugin \u2192 Marketplaces \u2192 keepmind) so updates apply automatically.`,required:!1}:n={name:"Version",status:"ok",detail:`v${e} (up to date)`,required:!1}:n={name:"Version",status:"skip",detail:`v${e} installed \u2014 could not reach npm to check for a newer version`,required:!1}:n={name:"Version",status:"skip",detail:"could not determine the installed keepmind version",required:!1},{title:"Updates",checks:[n]}}async function GE(t=[]){let e=t.includes("--json"),r=lt(),n=await wE(),s=[IE(r),await jE(n),OE(n),kE(n),AE(n),await NE()],o=Nu(s);e?console.log(JSON.stringify(o,null,2)):LE(o),process.exit(o.ok?0:1)}var Me,Iu,Ou,xE,DE,PE,xu=S(()=>{"use strict";Me=je(rt(),1);Ae();Ct();J();Lr();Iu=["claude","gemini","openrouter"],Ou=["subscription","api-key","gateway","cli"];xE=t=>t==="ok"?Me.default.green("\u2713"):t==="warn"?Me.default.yellow("!"):t==="skip"?Me.default.dim("\xB7"):Me.default.red("\u2717");DE="https://registry.npmjs.org/keepmind/latest",PE=3e3});var Ti={};he(Ti,{runServerCommand:()=>HE,runWorkerAliasCommand:()=>JE});function Lu(){console.error(`Usage: ${Wr.default.bold("npx keepmind server <command>")}`),console.error("Commands: api-key create|list|revoke")}function BE(t){switch(t){case"start":return gi(),!0;case"stop":return hi(),!0;case"restart":return Ei(),!0;case"status":return Si(),!0;default:return!1}}async function HE(t=[]){let e=t[0]?.toLowerCase();if(e||(Lu(),process.exit(1)),e==="api-key"){let r=t[1]?.toLowerCase();if(r==="create"||r==="list"||r==="revoke"){bi(t.slice(1));return}console.error(Wr.default.red(`Unknown server api-key subcommand: ${r??"(none)"}`)),console.error("Usage: npx keepmind server api-key create|list|revoke"),process.exit(1)}console.error(Wr.default.red(`Unknown server command: ${e}`)),Lu(),process.exit(1)}function JE(t=[]){let e=t[0]?.toLowerCase();(!e||!BE(e))&&(console.error(Wr.default.red(`Unknown worker command: ${e??"(none)"}`)),console.error("Usage: npx keepmind worker start|stop|restart|status"),process.exit(1))}var Wr,vi=S(()=>{"use strict";Wr=je(rt(),1);Fe()});var x=je(rt(),1);Ae();var We=process.argv.slice(2),Ci=We[0]?.toLowerCase()??"",KE=new Set(["-h","--help","-v","--version"]),Du=Ci.startsWith("-")&&!KE.has(Ci)?"install":Ci;function VE(){let t=xt();console.log(`
1347
1347
  ${x.default.bold("keepmind")} v${t} \u2014 persistent memory for AI coding assistants
1348
1348
 
1349
1349
  ${x.default.bold("Install Commands")} (no Bun required):