claude-mem 12.4.4 → 12.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/npx-cli/index.js +156 -153
- package/dist/opencode-plugin/index.js +2 -2
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/hooks/hooks.json +8 -8
- package/plugin/package.json +2 -1
- package/plugin/scripts/context-generator.cjs +79 -66
- package/plugin/scripts/mcp-server.cjs +36 -74
- package/plugin/scripts/smart-install.js +2 -57
- package/plugin/scripts/worker-service.cjs +211 -191
- package/plugin/skills/timeline-report/SKILL.md +15 -7
package/dist/npx-cli/index.js
CHANGED
|
@@ -1,73 +1,73 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
`,"utf-8")}var
|
|
4
|
-
`)}var
|
|
5
|
-
`),
|
|
6
|
-
`){
|
|
7
|
-
`&&(
|
|
2
|
+
var ei=Object.create;var Er=Object.defineProperty;var ti=Object.getOwnPropertyDescriptor;var ri=Object.getOwnPropertyNames;var ni=Object.getPrototypeOf,oi=Object.prototype.hasOwnProperty;var si=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var S=(e,t)=>()=>(e&&(t=e(e=0)),t);var Mn=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),se=(e,t)=>{for(var r in t)Er(e,r,{get:t[r],enumerable:!0})},ii=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of ri(t))!oi.call(e,o)&&o!==r&&Er(e,o,{get:()=>t[o],enumerable:!(n=ti(t,o))||n.enumerable});return e};var Ae=(e,t,r)=>(r=e!=null?ei(ni(e)):{},ii(t||!e||!e.__esModule?Er(r,"default",{value:e,enumerable:!0}):r,e));var Xe=Mn((Zl,Sr)=>{var Tt=process||{},An=Tt.argv||[],At=Tt.env||{},ai=!(At.NO_COLOR||An.includes("--no-color"))&&(!!At.FORCE_COLOR||An.includes("--color")||Tt.platform==="win32"||(Tt.stdout||{}).isTTY&&At.TERM!=="dumb"||!!At.CI),ci=(e,t,r=e)=>n=>{let o=""+n,s=o.indexOf(t,e.length);return~s?e+li(o,t,r,s)+t:e+o+t},li=(e,t,r,n)=>{let o="",s=0;do o+=e.substring(s,n)+r,s=n+t.length,n=e.indexOf(t,s);while(~n);return o+e.substring(s)},Tn=(e=ai)=>{let t=e?ci:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};Sr.exports=Tn();Sr.exports.createColors=Tn});import{existsSync as ui,readFileSync as di}from"fs";function te(e,t){if(!ui(e))return t;try{return JSON.parse(di(e,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${e}: ${r instanceof Error?r.message:String(r)}`)}}var ze=S(()=>{"use strict"});import{existsSync as qe,mkdirSync as pi,readFileSync as Rn,writeFileSync as mi}from"fs";import{homedir as gi}from"os";import{dirname as Pn,join as X}from"path";import{fileURLToPath as fi}from"url";function Cr(){return process.env.CLAUDE_CONFIG_DIR||X(gi(),".claude")}function W(){return X(Cr(),"plugins","marketplaces","thedotmack")}function _e(){return X(Cr(),"plugins")}function Te(){return X(_e(),"known_marketplaces.json")}function Re(){return X(_e(),"installed_plugins.json")}function Pe(){return X(Cr(),"settings.json")}function yr(e){return X(_e(),"cache","thedotmack","claude-mem",e)}function Rt(){let e=fi(import.meta.url),t=X(Pn(e),"..","..");if(!qe(X(t,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${t}. Bundle structure may have changed \u2014 update the path walk.`);return t}function wr(){return X(Rt(),"plugin")}function Ze(){let e=X(wr(),".claude-plugin","plugin.json");if(qe(e))try{let r=JSON.parse(Rn(e,"utf-8"));if(r.version)return r.version}catch{}let t=X(Rt(),"package.json");if(qe(t))try{let r=JSON.parse(Rn(t,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function Pt(){let e=W();return qe(X(e,"plugin",".claude-plugin","plugin.json"))}function Qe(e){qe(e)||pi(e,{recursive:!0})}function he(e,t){Qe(Pn(e)),mi(e,JSON.stringify(t,null,2)+`
|
|
3
|
+
`,"utf-8")}var me,xe=S(()=>{"use strict";ze();me=process.platform==="win32"});var Dn,On,Fn,Ln=S(()=>{Dn=e=>e===161||e===164||e===167||e===168||e===170||e===173||e===174||e>=176&&e<=180||e>=182&&e<=186||e>=188&&e<=191||e===198||e===208||e===215||e===216||e>=222&&e<=225||e===230||e>=232&&e<=234||e===236||e===237||e===240||e===242||e===243||e>=247&&e<=250||e===252||e===254||e===257||e===273||e===275||e===283||e===294||e===295||e===299||e>=305&&e<=307||e===312||e>=319&&e<=322||e===324||e>=328&&e<=331||e===333||e===338||e===339||e===358||e===359||e===363||e===462||e===464||e===466||e===468||e===470||e===472||e===474||e===476||e===593||e===609||e===708||e===711||e>=713&&e<=715||e===717||e===720||e>=728&&e<=731||e===733||e===735||e>=768&&e<=879||e>=913&&e<=929||e>=931&&e<=937||e>=945&&e<=961||e>=963&&e<=969||e===1025||e>=1040&&e<=1103||e===1105||e===8208||e>=8211&&e<=8214||e===8216||e===8217||e===8220||e===8221||e>=8224&&e<=8226||e>=8228&&e<=8231||e===8240||e===8242||e===8243||e===8245||e===8251||e===8254||e===8308||e===8319||e>=8321&&e<=8324||e===8364||e===8451||e===8453||e===8457||e===8467||e===8470||e===8481||e===8482||e===8486||e===8491||e===8531||e===8532||e>=8539&&e<=8542||e>=8544&&e<=8555||e>=8560&&e<=8569||e===8585||e>=8592&&e<=8601||e===8632||e===8633||e===8658||e===8660||e===8679||e===8704||e===8706||e===8707||e===8711||e===8712||e===8715||e===8719||e===8721||e===8725||e===8730||e>=8733&&e<=8736||e===8739||e===8741||e>=8743&&e<=8748||e===8750||e>=8756&&e<=8759||e===8764||e===8765||e===8776||e===8780||e===8786||e===8800||e===8801||e>=8804&&e<=8807||e===8810||e===8811||e===8814||e===8815||e===8834||e===8835||e===8838||e===8839||e===8853||e===8857||e===8869||e===8895||e===8978||e>=9312&&e<=9449||e>=9451&&e<=9547||e>=9552&&e<=9587||e>=9600&&e<=9615||e>=9618&&e<=9621||e===9632||e===9633||e>=9635&&e<=9641||e===9650||e===9651||e===9654||e===9655||e===9660||e===9661||e===9664||e===9665||e>=9670&&e<=9672||e===9675||e>=9678&&e<=9681||e>=9698&&e<=9701||e===9711||e===9733||e===9734||e===9737||e===9742||e===9743||e===9756||e===9758||e===9792||e===9794||e===9824||e===9825||e>=9827&&e<=9829||e>=9831&&e<=9834||e===9836||e===9837||e===9839||e===9886||e===9887||e===9919||e>=9926&&e<=9933||e>=9935&&e<=9939||e>=9941&&e<=9953||e===9955||e===9960||e===9961||e>=9963&&e<=9969||e===9972||e>=9974&&e<=9977||e===9979||e===9980||e===9982||e===9983||e===10045||e>=10102&&e<=10111||e>=11094&&e<=11097||e>=12872&&e<=12879||e>=57344&&e<=63743||e>=65024&&e<=65039||e===65533||e>=127232&&e<=127242||e>=127248&&e<=127277||e>=127280&&e<=127337||e>=127344&&e<=127373||e===127375||e===127376||e>=127387&&e<=127404||e>=917760&&e<=917999||e>=983040&&e<=1048573||e>=1048576&&e<=1114109,On=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Fn=e=>e>=4352&&e<=4447||e===8986||e===8987||e===9001||e===9002||e>=9193&&e<=9196||e===9200||e===9203||e===9725||e===9726||e===9748||e===9749||e>=9800&&e<=9811||e===9855||e===9875||e===9889||e===9898||e===9899||e===9917||e===9918||e===9924||e===9925||e===9934||e===9940||e===9962||e===9970||e===9971||e===9973||e===9978||e===9981||e===9989||e===9994||e===9995||e===10024||e===10060||e===10062||e>=10067&&e<=10069||e===10071||e>=10133&&e<=10135||e===10160||e===10175||e===11035||e===11036||e===11088||e===11093||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=94176&&e<=94180||e===94192||e===94193||e>=94208&&e<=100343||e>=100352&&e<=101589||e>=101632&&e<=101640||e>=110576&&e<=110579||e>=110581&&e<=110587||e===110589||e===110590||e>=110592&&e<=110882||e===110898||e>=110928&&e<=110930||e===110933||e>=110948&&e<=110951||e>=110960&&e<=111355||e===126980||e===127183||e===127374||e>=127377&&e<=127386||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e===127568||e===127569||e>=127584&&e<=127589||e>=127744&&e<=127776||e>=127789&&e<=127797||e>=127799&&e<=127868||e>=127870&&e<=127891||e>=127904&&e<=127946||e>=127951&&e<=127955||e>=127968&&e<=127984||e===127988||e>=127992&&e<=128062||e===128064||e>=128066&&e<=128252||e>=128255&&e<=128317||e>=128331&&e<=128334||e>=128336&&e<=128359||e===128378||e===128405||e===128406||e===128420||e>=128507&&e<=128591||e>=128640&&e<=128709||e===128716||e>=128720&&e<=128722||e>=128725&&e<=128727||e>=128732&&e<=128735||e===128747||e===128748||e>=128756&&e<=128764||e>=128992&&e<=129003||e===129008||e>=129292&&e<=129338||e>=129340&&e<=129349||e>=129351&&e<=129535||e>=129648&&e<=129660||e>=129664&&e<=129672||e>=129680&&e<=129725||e>=129727&&e<=129733||e>=129742&&e<=129755||e>=129760&&e<=129768||e>=129776&&e<=129784||e>=131072&&e<=196605||e>=196608&&e<=262141});var vr,Dt,Ot,_r,Ft,hi,Ei,Nn,Un,jn=S(()=>{Ln();vr=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Dt=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ot=/\t{1,1000}/y,_r=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"),Ft=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,hi=new RegExp("\\p{M}+","gu"),Ei={limit:1/0,ellipsis:""},Nn=(e,t={},r={})=>{let n=t.limit??1/0,o=t.ellipsis??"",s=t?.ellipsisWidth??(o?Nn(o,Ei,r).width:0),i=r.ansiWidth??0,a=r.controlWidth??0,c=r.tabWidth??8,u=r.ambiguousWidth??1,g=r.emojiWidth??2,f=r.fullWidthWidth??2,h=r.regularWidth??1,E=r.wideWidth??2,p=0,m=0,y=e.length,P=0,O=!1,M=y,R=Math.max(0,n-s),_=0,T=0,C=0,$=0;e:for(;;){if(T>_||m>=y&&m>p){let ue=e.slice(_,T)||e.slice(p,m);P=0;for(let we of ue.replaceAll(hi,"")){let ve=we.codePointAt(0)||0;if(On(ve)?$=f:Fn(ve)?$=E:u!==h&&Dn(ve)?$=u:$=h,C+$>R&&(M=Math.min(M,Math.max(_,p)+P)),C+$>n){O=!0;break e}P+=we.length,C+=$}_=T=0}if(m>=y)break;if(Ft.lastIndex=m,Ft.test(e)){if(P=Ft.lastIndex-m,$=P*h,C+$>R&&(M=Math.min(M,m+Math.floor((R-C)/h))),C+$>n){O=!0;break}C+=$,_=p,T=m,m=p=Ft.lastIndex;continue}if(vr.lastIndex=m,vr.test(e)){if(C+i>R&&(M=Math.min(M,m)),C+i>n){O=!0;break}C+=i,_=p,T=m,m=p=vr.lastIndex;continue}if(Dt.lastIndex=m,Dt.test(e)){if(P=Dt.lastIndex-m,$=P*a,C+$>R&&(M=Math.min(M,m+Math.floor((R-C)/a))),C+$>n){O=!0;break}C+=$,_=p,T=m,m=p=Dt.lastIndex;continue}if(Ot.lastIndex=m,Ot.test(e)){if(P=Ot.lastIndex-m,$=P*c,C+$>R&&(M=Math.min(M,m+Math.floor((R-C)/c))),C+$>n){O=!0;break}C+=$,_=p,T=m,m=p=Ot.lastIndex;continue}if(_r.lastIndex=m,_r.test(e)){if(C+g>R&&(M=Math.min(M,m)),C+g>n){O=!0;break}C+=g,_=p,T=m,m=p=_r.lastIndex;continue}m+=1}return{width:O?R:C,index:O?M:y,truncated:O,ellipsed:O&&n>=s}},Un=Nn});var Si,Ci,H,xr=S(()=>{jn();Si={limit:1/0,ellipsis:"",ellipsisWidth:0},Ci=(e,t={})=>Un(e,Si,t).width,H=Ci});function ie(e,t,r){return String(e).normalize().split(xi).map(n=>_i(n,t,r)).join(`
|
|
4
|
+
`)}var Lt,Kn,yi,kr,Vn,wi,Jn,Ir,Gn,Wn,Hn,Bn,$r,vi,_i,xi,br=S(()=>{xr();Lt="\x1B",Kn="\x9B",yi=39,kr="\x07",Vn="[",wi="]",Jn="m",Ir=`${wi}8;;`,Gn=new RegExp(`(?:\\${Vn}(?<code>\\d+)m|\\${Ir}(?<uri>.*)${kr})`,"y"),Wn=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Hn=e=>`${Lt}${Vn}${e}${Jn}`,Bn=e=>`${Lt}${Ir}${e}${kr}`,$r=(e,t,r)=>{let n=t[Symbol.iterator](),o=!1,s=!1,i=e.at(-1),a=i===void 0?0:H(i),c=n.next(),u=n.next(),g=0;for(;!c.done;){let f=c.value,h=H(f);a+h<=r?e[e.length-1]+=f:(e.push(f),a=0),(f===Lt||f===Kn)&&(o=!0,s=t.startsWith(Ir,g+1)),o?s?f===kr&&(o=!1,s=!1):f===Jn&&(o=!1):(a+=h,a===r&&!u.done&&(e.push(""),a=0)),c=u,u=n.next(),g+=f.length}i=e.at(-1),!a&&i!==void 0&&i.length&&e.length>1&&(e[e.length-2]+=e.pop())},vi=e=>{let t=e.split(" "),r=t.length;for(;r&&!H(t[r-1]);)r--;return r===t.length?e:t.slice(0,r).join(" ")+t.slice(r).join("")},_i=(e,t,r={})=>{if(r.trim!==!1&&e.trim()==="")return"";let n="",o,s,i=e.split(" "),a=[""],c=0;for(let f=0;f<i.length;f++){let h=i[f];if(r.trim!==!1){let p=a.at(-1)??"",m=p.trimStart();p.length!==m.length&&(a[a.length-1]=m,c=H(m))}f!==0&&(c>=t&&(r.wordWrap===!1||r.trim===!1)&&(a.push(""),c=0),(c||r.trim===!1)&&(a[a.length-1]+=" ",c++));let E=H(h);if(r.hard&&E>t){let p=t-c,m=1+Math.floor((E-p-1)/t);Math.floor((E-1)/t)<m&&a.push(""),$r(a,h,t),c=H(a.at(-1)??"");continue}if(c+E>t&&c&&E){if(r.wordWrap===!1&&c<t){$r(a,h,t),c=H(a.at(-1)??"");continue}a.push(""),c=0}if(c+E>t&&r.wordWrap===!1){$r(a,h,t),c=H(a.at(-1)??"");continue}a[a.length-1]+=h,c+=E}r.trim!==!1&&(a=a.map(f=>vi(f)));let u=a.join(`
|
|
5
|
+
`),g=!1;for(let f=0;f<u.length;f++){let h=u[f];if(n+=h,!g)g=h>="\uD800"&&h<="\uDBFF";else continue;if(h===Lt||h===Kn){Gn.lastIndex=f+1;let p=Gn.exec(u)?.groups;if(p?.code!==void 0){let m=Number.parseFloat(p.code);o=m===yi?void 0:m}else p?.uri!==void 0&&(s=p.uri.length===0?void 0:p.uri)}if(u[f+1]===`
|
|
6
|
+
`){s&&(n+=Bn(""));let E=o?Wn(o):void 0;o&&E&&(n+=Hn(E))}else h===`
|
|
7
|
+
`&&(o&&Wn(o)&&(n+=Hn(o)),s&&(n+=Bn(s)))}return n},xi=/\r?\n/});var Ar=Mn((gu,Yn)=>{"use strict";var Mr={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let r="";return e<0?r+=`\x1B[${-e}D`:e>0&&(r+=`\x1B[${e}C`),t<0?r+=`\x1B[${-t}A`:t>0&&(r+=`\x1B[${t}B`),r},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},$i={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},ki={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let r=0;r<e;r++)t+=this.line+(r<e-1?Mr.up():"");return e&&(t+=Mr.left),t}};Yn.exports={cursor:Mr,scroll:$i,erase:ki,beep:"\x07"}});import{stdout as Rr,stdin as zn}from"node:process";import*as Ee from"node:readline";import Ii from"node:readline";import{ReadStream as Xn}from"node:tty";function Ut(e,t,r){if(!r.some(i=>!i.disabled))return e;let n=e+t,o=Math.max(r.length-1,0),s=n<0?o:n>o?0:n;return r[s].disabled?Ut(s,t<0?-1:1,r):s}function Pr(e,t){if(typeof e=="string")return j.aliases.get(e)===t;for(let r of e)if(r!==void 0&&Pr(r,t))return!0;return!1}function Ai(e,t){if(e===t)return;let r=e.split(`
|
|
8
8
|
`),n=t.split(`
|
|
9
|
-
`),
|
|
10
|
-
`).map((
|
|
11
|
-
`)}var
|
|
12
|
-
`),
|
|
13
|
-
`).length-1;this.output.write(
|
|
14
|
-
`);this.output.write(i[
|
|
15
|
-
`).slice(
|
|
16
|
-
`)),this._prevFrame=e;return}}this.output.write(
|
|
17
|
-
`);
|
|
9
|
+
`),o=Math.max(r.length,n.length),s=[];for(let i=0;i<o;i++)r[i]!==n[i]&&s.push(i);return{lines:s,numLinesBefore:r.length,numLinesAfter:n.length,numLines:o}}function Se(e){return e===Tr}function Nt(e,t){let r=e;r.isTTY&&r.setRawMode(t)}function qn({input:e=zn,output:t=Rr,overwrite:r=!0,hideCursor:n=!0}={}){let o=Ee.createInterface({input:e,output:t,prompt:"",tabSize:1});Ee.emitKeypressEvents(e,o),e instanceof Xn&&e.isTTY&&e.setRawMode(!0);let s=(i,{name:a,sequence:c})=>{let u=String(i);if(Pr([u,a,c],"cancel")){n&&t.write(U.cursor.show),process.exit(0);return}if(!r)return;Ee.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{Ee.clearLine(t,1,()=>{e.once("keypress",s)})})};return n&&t.write(U.cursor.hide),e.once("keypress",s),()=>{e.off("keypress",s),n&&t.write(U.cursor.show),e instanceof Xn&&e.isTTY&&!Ti&&e.setRawMode(!1),o.terminal=!1,o.close()}}function tt(e,t,r,n=r){let o=et(e??Rr);return ie(t,o-r.length,{hard:!0,trim:!1}).split(`
|
|
10
|
+
`).map((s,i)=>`${i===0?n:r}${s}`).join(`
|
|
11
|
+
`)}var U,bi,Mi,j,Ti,Tr,et,Dr,Zn,jt,Qn,Or=S(()=>{br();U=Ae(Ar(),1);bi=["up","down","left","right","space","enter","cancel"],Mi=["January","February","March","April","May","June","July","August","September","October","November","December"],j={actions:new Set(bi),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:[...Mi],messages:{required:"Please enter a valid date",invalidMonth:"There are only 12 months in a year",invalidDay:(e,t)=>`There are only ${e} days in ${t}`,afterMin:e=>`Date must be on or after ${e.toISOString().slice(0,10)}`,beforeMax:e=>`Date must be on or before ${e.toISOString().slice(0,10)}`}}};Ti=globalThis.process.platform.startsWith("win"),Tr=Symbol("clack:cancel");et=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Dr=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;Zn=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(e,t=!0){let{input:r=zn,output:n=Rr,render:o,signal:s,...i}=e;this.opts=i,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=t,this._abortSignal=s,this.input=r,this.output=n}unsubscribe(){this._subscribers.clear()}setSubscriber(e,t){let r=this._subscribers.get(e)??[];r.push(t),this._subscribers.set(e,r)}on(e,t){this.setSubscriber(e,{cb:t})}once(e,t){this.setSubscriber(e,{cb:t,once:!0})}emit(e,...t){let r=this._subscribers.get(e)??[],n=[];for(let o of r)o.cb(...t),o.once&&n.push(()=>r.splice(r.indexOf(o),1));for(let o of n)o()}prompt(){return new Promise(e=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(Tr);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=Ii.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),Nt(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(U.cursor.show),this.output.off("resize",this.render),Nt(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(U.cursor.show),this.output.off("resize",this.render),Nt(this.input,!1),e(Tr)})})}_isActionKey(e,t){return e===" "}_setValue(e){this.value=e,this.emit("value",this.value)}_setUserInput(e,t){this.userInput=e??"",this.emit("userInput",this.userInput),t&&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,t){if(this._track&&t.name!=="return"&&(t.name&&this._isActionKey(e,t)&&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"),t?.name&&(!this._track&&j.aliases.has(t.name)&&this.emit("cursor",j.aliases.get(t.name)),j.actions.has(t.name)&&this.emit("cursor",t.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),this.emit("key",e?.toLowerCase(),t),t?.name==="return"){if(this.opts.validate){let r=this.opts.validate(this.value);r&&(this.error=r instanceof Error?r.message:r,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Pr([e,t?.name,t?.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
|
+
`),Nt(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=ie(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
|
|
13
|
+
`).length-1;this.output.write(U.cursor.move(-999,e*-1))}render(){let e=ie(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(U.cursor.hide);else{let t=Ai(this._prevFrame,e),r=Dr(this.output);if(this.restoreCursor(),t){let n=Math.max(0,t.numLinesAfter-r),o=Math.max(0,t.numLinesBefore-r),s=t.lines.find(i=>i>=n);if(s===void 0){this._prevFrame=e;return}if(t.lines.length===1){this.output.write(U.cursor.move(0,s-o)),this.output.write(U.erase.lines(1));let i=e.split(`
|
|
14
|
+
`);this.output.write(i[s]),this._prevFrame=e,this.output.write(U.cursor.move(0,i.length-s-1));return}else if(t.lines.length>1){if(n<o)s=n;else{let a=s-o;a>0&&this.output.write(U.cursor.move(0,a))}this.output.write(U.erase.down());let i=e.split(`
|
|
15
|
+
`).slice(s);this.output.write(i.join(`
|
|
16
|
+
`)),this._prevFrame=e;return}}this.output.write(U.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}},jt=class extends Zn{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(U.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},Qn=class extends Zn{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,t=this.value!==void 0&&this.value.length===e.length;this.value=t?[]:e.map(r=>r.value)}toggleInvert(){let e=this.value;if(!e)return;let t=this._enabledOptions.filter(r=>!e.includes(r.value));this.value=t.map(r=>r.value)}toggleValue(){this.value===void 0&&(this.value=[]);let e=this.value.includes(this._value);this.value=e?this.value.filter(t=>t!==this._value):[...this.value,this._value]}constructor(e){super(e,!1),this.options=e.options,this.value=[...e.initialValues??[]];let t=Math.max(this.options.findIndex(({value:r})=>r===e.cursorAt),0);this.cursor=this.options[t].disabled?Ut(t,1,this.options):t,this.on("key",r=>{r==="a"&&this.toggleAll(),r==="i"&&this.toggleInvert()}),this.on("cursor",r=>{switch(r){case"left":case"up":this.cursor=Ut(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=Ut(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}}});import{styleText as d,stripVTControlCharacters as Ru}from"node:util";import Z from"node:process";function Ri(){return Z.platform!=="win32"?Z.env.TERM!=="linux":!!Z.env.CI||!!Z.env.WT_SESSION||!!Z.env.TERMINUS_SUBLIME||Z.env.ConEmuTask==="{cmd::Cmder}"||Z.env.TERM_PROGRAM==="Terminus-Sublime"||Z.env.TERM_PROGRAM==="vscode"||Z.env.TERM==="xterm-256color"||Z.env.TERM==="alacritty"||Z.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var nt,Fr,Pi,x,Di,io,ao,Gt,Oi,k,ot,Fu,Lu,eo,to,Fi,ro,no,Nu,oo,Li,Ni,Ui,ji,Uu,Gi,Wi,Hi,Bi,co,Ki,Vi,so,st,B,it,Wt,$e,rt,lo,Ji,Yi,at,Xi,zi,ju,Gu,Ht,Lr=S(()=>{Or();Or();br();xr();nt=Ae(Ar(),1);Fr=Ri(),Pi=()=>process.env.CI==="true",x=(e,t)=>Fr?e:t,Di=x("\u25C6","*"),io=x("\u25A0","x"),ao=x("\u25B2","x"),Gt=x("\u25C7","o"),Oi=x("\u250C","T"),k=x("\u2502","|"),ot=x("\u2514","\u2014"),Fu=x("\u2510","T"),Lu=x("\u2518","\u2014"),eo=x("\u25CF",">"),to=x("\u25CB"," "),Fi=x("\u25FB","[\u2022]"),ro=x("\u25FC","[+]"),no=x("\u25FB","[ ]"),Nu=x("\u25AA","\u2022"),oo=x("\u2500","-"),Li=x("\u256E","+"),Ni=x("\u251C","+"),Ui=x("\u256F","+"),ji=x("\u2570","+"),Uu=x("\u256D","+"),Gi=x("\u25CF","\u2022"),Wi=x("\u25C6","*"),Hi=x("\u25B2","!"),Bi=x("\u25A0","x"),co=e=>{switch(e){case"initial":case"active":return d("cyan",Di);case"cancel":return d("red",io);case"error":return d("yellow",ao);case"submit":return d("green",Gt)}},Ki=e=>{switch(e){case"initial":case"active":return d("cyan",k);case"cancel":return d("red",k);case"error":return d("yellow",k);case"submit":return d("green",k)}},Vi=(e,t,r,n,o)=>{let s=t,i=0;for(let a=r;a<n;a++){let c=e[a];if(s=s-c.length,i++,s<=o)break}return{lineCount:s,removals:i}},so=({cursor:e,options:t,style:r,output:n=process.stdout,maxItems:o=Number.POSITIVE_INFINITY,columnPadding:s=0,rowPadding:i=4})=>{let a=et(n)-s,c=Dr(n),u=d("dim","..."),g=Math.max(c-i,0),f=Math.max(Math.min(o,g),5),h=0;e>=f-3&&(h=Math.max(Math.min(e-f+3,t.length-f),0));let E=f<t.length&&h>0,p=f<t.length&&h+f<t.length,m=Math.min(h+f,t.length),y=[],P=0;E&&P++,p&&P++;let O=h+(E?1:0),M=m-(p?1:0);for(let _=O;_<M;_++){let T=ie(r(t[_],_===e),a,{hard:!0,trim:!1}).split(`
|
|
17
|
+
`);y.push(T),P+=T.length}if(P>g){let _=0,T=0,C=P,$=e-O,ue=(we,ve)=>Vi(y,C,we,ve,g);E?({lineCount:C,removals:_}=ue(0,$),C>g&&({lineCount:C,removals:T}=ue($+1,y.length))):({lineCount:C,removals:T}=ue($+1,y.length),C>g&&({lineCount:C,removals:_}=ue(0,$))),_>0&&(E=!0,y.splice(0,_)),T>0&&(p=!0,y.splice(y.length-T,T))}let R=[];E&&R.push(u);for(let _ of y)for(let T of _)R.push(T);return p&&R.push(u),R},st=e=>{let t=e.active??"Yes",r=e.inactive??"No";return new jt({active:t,inactive:r,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let n=e.withGuide??j.withGuide,o=`${co(this.state)} `,s=n?`${d("gray",k)} `:"",i=tt(e.output,e.message,s,o),a=`${n?`${d("gray",k)}
|
|
18
18
|
`:""}${i}
|
|
19
|
-
`,c=this.value?t:r;switch(this.state){case"submit":{let
|
|
20
|
-
${
|
|
21
|
-
${
|
|
22
|
-
`:` ${
|
|
23
|
-
${
|
|
24
|
-
`}}}}).prompt()},
|
|
25
|
-
`);if(
|
|
19
|
+
`,c=this.value?t:r;switch(this.state){case"submit":{let u=n?`${d("gray",k)} `:"";return`${a}${u}${d("dim",c)}`}case"cancel":{let u=n?`${d("gray",k)} `:"";return`${a}${u}${d(["strikethrough","dim"],c)}${n?`
|
|
20
|
+
${d("gray",k)}`:""}`}default:{let u=n?`${d("cyan",k)} `:"",g=n?d("cyan",ot):"";return`${a}${u}${this.value?`${d("green",eo)} ${t}`:`${d("dim",to)} ${d("dim",t)}`}${e.vertical?n?`
|
|
21
|
+
${d("cyan",k)} `:`
|
|
22
|
+
`:` ${d("dim","/")} `}${this.value?`${d("dim",to)} ${d("dim",r)}`:`${d("green",eo)} ${r}`}
|
|
23
|
+
${g}
|
|
24
|
+
`}}}}).prompt()},B={message:(e=[],{symbol:t=d("gray",k),secondarySymbol:r=d("gray",k),output:n=process.stdout,spacing:o=1,withGuide:s}={})=>{let i=[],a=s??j.withGuide,c=a?r:"",u=a?`${t} `:"",g=a?`${r} `:"";for(let h=0;h<o;h++)i.push(c);let f=Array.isArray(e)?e:e.split(`
|
|
25
|
+
`);if(f.length>0){let[h,...E]=f;h.length>0?i.push(`${u}${h}`):i.push(a?t:"");for(let p of E)p.length>0?i.push(`${g}${p}`):i.push(a?r:"")}n.write(`${i.join(`
|
|
26
26
|
`)}
|
|
27
|
-
`)},info:(e,t)=>{
|
|
27
|
+
`)},info:(e,t)=>{B.message(e,{...t,symbol:d("blue",Gi)})},success:(e,t)=>{B.message(e,{...t,symbol:d("green",Wi)})},step:(e,t)=>{B.message(e,{...t,symbol:d("green",Gt)})},warn:(e,t)=>{B.message(e,{...t,symbol:d("yellow",Hi)})},warning:(e,t)=>{B.warn(e,t)},error:(e,t)=>{B.message(e,{...t,symbol:d("red",Bi)})}},it=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??j.withGuide?`${d("gray",ot)} `:"";r.write(`${n}${d("red",e)}
|
|
28
28
|
|
|
29
|
-
`)},
|
|
30
|
-
`)}
|
|
31
|
-
${
|
|
29
|
+
`)},Wt=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??j.withGuide?`${d("gray",Oi)} `:"";r.write(`${n}${e}
|
|
30
|
+
`)},$e=(e="",t)=>{let r=t?.output??process.stdout,n=t?.withGuide??j.withGuide?`${d("gray",k)}
|
|
31
|
+
${d("gray",ot)} `:"";r.write(`${n}${e}
|
|
32
32
|
|
|
33
|
-
`)},
|
|
33
|
+
`)},rt=(e,t)=>e.split(`
|
|
34
34
|
`).map(r=>t(r)).join(`
|
|
35
|
-
`),
|
|
36
|
-
${
|
|
37
|
-
`:""}${
|
|
38
|
-
`,i=this.value??[],a=(c,
|
|
39
|
-
${
|
|
40
|
-
`).map((
|
|
41
|
-
`),
|
|
42
|
-
`).length,
|
|
43
|
-
`).length+1;return`${
|
|
35
|
+
`),lo=e=>{let t=(n,o)=>{let s=n.label??String(n.value);return o==="disabled"?`${d("gray",no)} ${rt(s,i=>d(["strikethrough","gray"],i))}${n.hint?` ${d("dim",`(${n.hint??"disabled"})`)}`:""}`:o==="active"?`${d("cyan",Fi)} ${s}${n.hint?` ${d("dim",`(${n.hint})`)}`:""}`:o==="selected"?`${d("green",ro)} ${rt(s,i=>d("dim",i))}${n.hint?` ${d("dim",`(${n.hint})`)}`:""}`:o==="cancelled"?`${rt(s,i=>d(["strikethrough","dim"],i))}`:o==="active-selected"?`${d("green",ro)} ${s}${n.hint?` ${d("dim",`(${n.hint})`)}`:""}`:o==="submitted"?`${rt(s,i=>d("dim",i))}`:`${d("dim",no)} ${rt(s,i=>d("dim",i))}`},r=e.required??!0;return new Qn({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:r,cursorAt:e.cursorAt,validate(n){if(r&&(n===void 0||n.length===0))return`Please select at least one option.
|
|
36
|
+
${d("reset",d("dim",`Press ${d(["gray","bgWhite","inverse"]," space ")} to select, ${d("gray",d("bgWhite",d("inverse"," enter ")))} to submit`))}`},render(){let n=e.withGuide??j.withGuide,o=tt(e.output,e.message,n?`${Ki(this.state)} `:"",`${co(this.state)} `),s=`${n?`${d("gray",k)}
|
|
37
|
+
`:""}${o}
|
|
38
|
+
`,i=this.value??[],a=(c,u)=>{if(c.disabled)return t(c,"disabled");let g=i.includes(c.value);return u&&g?t(c,"active-selected"):g?t(c,"selected"):t(c,u?"active":"inactive")};switch(this.state){case"submit":{let c=this.options.filter(({value:g})=>i.includes(g)).map(g=>t(g,"submitted")).join(d("dim",", "))||d("dim","none"),u=tt(e.output,c,n?`${d("gray",k)} `:"");return`${s}${u}`}case"cancel":{let c=this.options.filter(({value:g})=>i.includes(g)).map(g=>t(g,"cancelled")).join(d("dim",", "));if(c.trim()==="")return`${s}${d("gray",k)}`;let u=tt(e.output,c,n?`${d("gray",k)} `:"");return`${s}${u}${n?`
|
|
39
|
+
${d("gray",k)}`:""}`}case"error":{let c=n?`${d("yellow",k)} `:"",u=this.error.split(`
|
|
40
|
+
`).map((h,E)=>E===0?`${n?`${d("yellow",ot)} `:""}${d("yellow",h)}`:` ${h}`).join(`
|
|
41
|
+
`),g=s.split(`
|
|
42
|
+
`).length,f=u.split(`
|
|
43
|
+
`).length+1;return`${s}${c}${so({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:g+f,style:a}).join(`
|
|
44
44
|
${c}`)}
|
|
45
|
-
${
|
|
46
|
-
`}default:{let c=n?`${
|
|
47
|
-
`).length,
|
|
45
|
+
${u}
|
|
46
|
+
`}default:{let c=n?`${d("cyan",k)} `:"",u=s.split(`
|
|
47
|
+
`).length,g=n?2:1;return`${s}${c}${so({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:c.length,rowPadding:u+g,style:a}).join(`
|
|
48
48
|
${c}`)}
|
|
49
|
-
${n?
|
|
50
|
-
`}}}}).prompt()},
|
|
51
|
-
`),o
|
|
52
|
-
`).map(
|
|
53
|
-
`),
|
|
54
|
-
`:"",
|
|
55
|
-
${
|
|
56
|
-
${
|
|
57
|
-
`)},
|
|
58
|
-
`);let
|
|
59
|
-
`);
|
|
60
|
-
`);let
|
|
61
|
-
`):r.write(`${
|
|
62
|
-
`)),C(),
|
|
63
|
-
${t.stack}`:t.message;if(Array.isArray(t))return`[${t.length} items]`;let r=Object.keys(t);return r.length===0?"{}":r.length<=3?JSON.stringify(t):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(t)}formatTool(t,r){if(!r)return t;let n=r;if(typeof r=="string")try{n=JSON.parse(r)}catch{n=r}if(t==="Bash"&&n.command)return`${t}(${n.command})`;if(n.file_path)return`${t}(${n.file_path})`;if(n.notebook_path)return`${t}(${n.notebook_path})`;if(t==="Glob"&&n.pattern)return`${t}(${n.pattern})`;if(t==="Grep"&&n.pattern)return`${t}(${n.pattern})`;if(n.url)return`${t}(${n.url})`;if(n.query)return`${t}(${n.query})`;if(t==="Task"){if(n.subagent_type)return`${t}(${n.subagent_type})`;if(n.description)return`${t}(${n.description})`}return t==="Skill"&&n.skill?`${t}(${n.skill})`:t==="LSP"&&n.operation?`${t}(${n.operation})`:t}formatTimestamp(t){let r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),
|
|
64
|
-
${
|
|
65
|
-
${
|
|
66
|
-
`+JSON.stringify(
|
|
49
|
+
${n?d("cyan",ot):""}
|
|
50
|
+
`}}}}).prompt()},Ji=e=>d("dim",e),Yi=(e,t,r)=>{let n={hard:!0,trim:!1},o=ie(e,t,n).split(`
|
|
51
|
+
`),s=o.reduce((c,u)=>Math.max(H(u),c),0),i=o.map(r).reduce((c,u)=>Math.max(H(u),c),0),a=t-(i-s);return ie(e,a,n)},at=(e="",t="",r)=>{let n=r?.output??Z.stdout,o=r?.withGuide??j.withGuide,s=r?.format??Ji,i=["",...Yi(e,et(n)-6,s).split(`
|
|
52
|
+
`).map(s),""],a=H(t),c=Math.max(i.reduce((h,E)=>{let p=H(E);return p>h?p:h},0),a)+2,u=i.map(h=>`${d("gray",k)} ${h}${" ".repeat(c-H(h))}${d("gray",k)}`).join(`
|
|
53
|
+
`),g=o?`${d("gray",k)}
|
|
54
|
+
`:"",f=o?Ni:ji;n.write(`${g}${d("green",Gt)} ${d("reset",t)} ${d("gray",oo.repeat(Math.max(c-a-1,1))+Li)}
|
|
55
|
+
${u}
|
|
56
|
+
${d("gray",f+oo.repeat(c+2)+Ui)}
|
|
57
|
+
`)},Xi=e=>d("magenta",e),zi=({indicator:e="dots",onCancel:t,output:r=process.stdout,cancelMessage:n,errorMessage:o,frames:s=Fr?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:i=Fr?80:120,signal:a,...c}={})=>{let u=Pi(),g,f,h=!1,E=!1,p="",m,y=performance.now(),P=et(r),O=c?.styleFrame??Xi,M=A=>{let q=A>1?o??j.messages.error:n??j.messages.cancel;E=A===1,h&&(Ye(q,A),E&&typeof t=="function"&&t())},R=()=>M(2),_=()=>M(1),T=()=>{process.on("uncaughtExceptionMonitor",R),process.on("unhandledRejection",R),process.on("SIGINT",_),process.on("SIGTERM",_),process.on("exit",M),a&&a.addEventListener("abort",_)},C=()=>{process.removeListener("uncaughtExceptionMonitor",R),process.removeListener("unhandledRejection",R),process.removeListener("SIGINT",_),process.removeListener("SIGTERM",_),process.removeListener("exit",M),a&&a.removeEventListener("abort",_)},$=()=>{if(m===void 0)return;u&&r.write(`
|
|
58
|
+
`);let A=ie(m,P,{hard:!0,trim:!1}).split(`
|
|
59
|
+
`);A.length>1&&r.write(nt.cursor.up(A.length-1)),r.write(nt.cursor.to(0)),r.write(nt.erase.down())},ue=A=>A.replace(/\.+$/,""),we=A=>{let q=(performance.now()-A)/1e3,de=Math.floor(q/60),pe=Math.floor(q%60);return de>0?`[${de}m ${pe}s]`:`[${pe}s]`},ve=c.withGuide??j.withGuide,qs=(A="")=>{h=!0,g=qn({output:r}),p=ue(A),y=performance.now(),ve&&r.write(`${d("gray",k)}
|
|
60
|
+
`);let q=0,de=0;T(),f=setInterval(()=>{if(u&&p===m)return;$(),m=p;let pe=O(s[q]),Mt;if(u)Mt=`${pe} ${p}...`;else if(e==="timer")Mt=`${pe} ${p} ${we(y)}`;else{let Qs=".".repeat(Math.floor(de)).slice(0,3);Mt=`${pe} ${p}${Qs}`}let Zs=ie(Mt,P,{hard:!0,trim:!1});r.write(Zs),q=q+1<s.length?q+1:0,de=de<4?de+.125:0},i)},Ye=(A="",q=0,de=!1)=>{if(!h)return;h=!1,clearInterval(f),$();let pe=q===0?d("green",Gt):q===1?d("red",io):d("red",ao);p=A??p,de||(e==="timer"?r.write(`${pe} ${p} ${we(y)}
|
|
61
|
+
`):r.write(`${pe} ${p}
|
|
62
|
+
`)),C(),g()};return{start:qs,stop:(A="")=>Ye(A,0),message:(A="")=>{p=ue(A??p)},cancel:(A="")=>Ye(A,1),error:(A="")=>Ye(A,2),clear:()=>Ye("",0,!0),get isCancelled(){return E}}},ju={light:x("\u2500","-"),heavy:x("\u2501","="),block:x("\u2588","#")},Gu=`${d("gray",k)} `,Ht=async(e,t)=>{for(let r of e){if(r.enabled===!1)continue;let n=zi(t);n.start(r.title);let o=await r.task(n.message);n.stop(o||r.title)}}});import{readFileSync as qi,writeFileSync as po,existsSync as mo,mkdirSync as Zi}from"fs";import{join as go,dirname as Qi}from"path";import{homedir as fo}from"os";var F,ke=S(()=>{"use strict";F=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-6",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_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",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_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:go(fo(),".claude-mem"),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:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:go(fo(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",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_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",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:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(t){return process.env[t]??this.DEFAULTS[t]}static getInt(t){let r=this.get(t);return parseInt(r,10)}static getBool(t){let r=this.get(t);return r==="true"||r===!0}static applyEnvOverrides(t){let r={...t};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(t){try{if(!mo(t)){let i=this.getAllDefaults();try{let a=Qi(t);mo(a)||Zi(a,{recursive:!0}),po(t,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",t)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,a instanceof Error?a.message:String(a))}return this.applyEnvOverrides(i)}let r=qi(t,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{po(t,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(i){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,i instanceof Error?i.message:String(i))}}let s={...this.DEFAULTS};for(let i of Object.keys(this.DEFAULTS))o[i]!==void 0&&(s[i]=o[i]);return this.applyEnvOverrides(s)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",t,r instanceof Error?r.message:String(r)),this.applyEnvOverrides(this.getAllDefaults())}}}});async function Bt(e,t=1e4){let r=`http://127.0.0.1:${e}`,n=!1;try{await fetch(`${r}/api/admin/shutdown`,{method:"POST",signal:AbortSignal.timeout(5e3)}),n=!0}catch{return{workerWasRunning:!1,confirmedStopped:!0}}let o=500,s=Math.ceil(t/o);for(let i=0;i<s;i++){await new Promise(a=>setTimeout(a,o));try{await fetch(`${r}/api/health`,{signal:AbortSignal.timeout(1e3)})}catch(a){if(a instanceof Error&&a.name==="AbortError")continue;return{workerWasRunning:n,confirmedStopped:!0}}}return{workerWasRunning:n,confirmedStopped:!1}}var Nr=S(()=>{"use strict"});import{execSync as ea}from"child_process";import{existsSync as re,readdirSync as ta}from"fs";import{homedir as ho}from"os";import{join as ne}from"path";function ct(e){try{return ea(`${me?"where":"which"} ${e}`,{stdio:"pipe"}),!0}catch(t){return process.env.DEBUG&&console.error(`[ide-detection] ${e} not in PATH:`,t instanceof Error?t.message:String(t)),!1}}function ra(e){let t=ne(ho(),".vscode","extensions");if(!re(t))return!1;try{return ta(t).some(n=>n.toLowerCase().includes(e.toLowerCase()))}catch(r){return console.warn("[ide-detection] Failed to read VS Code extensions directory:",r instanceof Error?r.message:String(r)),!1}}function lt(){let e=ho();return[{id:"claude-code",label:"Claude Code",detected:re(ne(e,".claude")),supported:!0,hint:"recommended"},{id:"gemini-cli",label:"Gemini CLI",detected:re(ne(e,".gemini")),supported:!0},{id:"opencode",label:"OpenCode",detected:re(ne(e,".config","opencode"))||ct("opencode"),supported:!0,hint:"plugin-based integration"},{id:"openclaw",label:"OpenClaw",detected:re(ne(e,".openclaw")),supported:!0,hint:"plugin-based integration"},{id:"windsurf",label:"Windsurf",detected:re(ne(e,".codeium","windsurf")),supported:!0},{id:"codex-cli",label:"Codex CLI",detected:re(ne(e,".codex")),supported:!0,hint:"transcript-based integration"},{id:"cursor",label:"Cursor",detected:re(ne(e,".cursor")),supported:!0,hint:"hooks + MCP integration"},{id:"copilot-cli",label:"Copilot CLI",detected:ct("copilot"),supported:!0,hint:"MCP-based integration"},{id:"antigravity",label:"Antigravity",detected:re(ne(e,".gemini","antigravity")),supported:!0,hint:"MCP-based integration"},{id:"goose",label:"Goose",detected:re(ne(e,".config","goose"))||ct("goose"),supported:!0,hint:"MCP-based integration"},{id:"crush",label:"Crush",detected:ct("crush"),supported:!0,hint:"MCP-based integration"},{id:"roo-code",label:"Roo Code",detected:ra("roo-code"),supported:!0,hint:"MCP-based integration"},{id:"warp",label:"Warp",detected:re(ne(e,".warp"))||ct("warp"),supported:!0,hint:"MCP-based integration"}]}var Eo=S(()=>{"use strict";xe()});import{appendFileSync as na,existsSync as So,mkdirSync as oa,readFileSync as sa}from"fs";import{join as Kt}from"path";import{homedir as ia}from"os";var Ur,Co,jr,l,J=S(()=>{"use strict";Ur=(s=>(s[s.DEBUG=0]="DEBUG",s[s.INFO=1]="INFO",s[s.WARN=2]="WARN",s[s.ERROR=3]="ERROR",s[s.SILENT=4]="SILENT",s))(Ur||{}),Co=Kt(ia(),".claude-mem"),jr=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let t=Kt(Co,"logs");So(t)||oa(t,{recursive:!0});let r=new Date().toISOString().split("T")[0];this.logFilePath=Kt(t,`claude-mem-${r}.log`)}catch(t){console.error("[LOGGER] Failed to initialize log file:",t instanceof Error?t.message:String(t)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let t=Kt(Co,"settings.json");if(So(t)){let r=sa(t,"utf-8"),o=(JSON.parse(r).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=Ur[o]??1}else this.level=1}catch(t){console.error("[LOGGER] Failed to load log level from settings:",t instanceof Error?t.message:String(t)),this.level=1}return this.level}correlationId(t,r){return`obs-${t}-${r}`}sessionId(t){return`session-${t}`}formatData(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return t.toString();if(typeof t=="object"){if(t instanceof Error)return this.getLevel()===0?`${t.message}
|
|
63
|
+
${t.stack}`:t.message;if(Array.isArray(t))return`[${t.length} items]`;let r=Object.keys(t);return r.length===0?"{}":r.length<=3?JSON.stringify(t):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(t)}formatTool(t,r){if(!r)return t;let n=r;if(typeof r=="string")try{n=JSON.parse(r)}catch{n=r}if(t==="Bash"&&n.command)return`${t}(${n.command})`;if(n.file_path)return`${t}(${n.file_path})`;if(n.notebook_path)return`${t}(${n.notebook_path})`;if(t==="Glob"&&n.pattern)return`${t}(${n.pattern})`;if(t==="Grep"&&n.pattern)return`${t}(${n.pattern})`;if(n.url)return`${t}(${n.url})`;if(n.query)return`${t}(${n.query})`;if(t==="Task"){if(n.subagent_type)return`${t}(${n.subagent_type})`;if(n.description)return`${t}(${n.description})`}return t==="Skill"&&n.skill?`${t}(${n.skill})`:t==="LSP"&&n.operation?`${t}(${n.operation})`:t}formatTimestamp(t){let r=t.getFullYear(),n=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0"),s=String(t.getHours()).padStart(2,"0"),i=String(t.getMinutes()).padStart(2,"0"),a=String(t.getSeconds()).padStart(2,"0"),c=String(t.getMilliseconds()).padStart(3,"0");return`${r}-${n}-${o} ${s}:${i}:${a}.${c}`}log(t,r,n,o,s){if(t<this.getLevel())return;this.ensureLogFileInitialized();let i=this.formatTimestamp(new Date),a=Ur[t].padEnd(5),c=r.padEnd(6),u="";o?.correlationId?u=`[${o.correlationId}] `:o?.sessionId&&(u=`[session-${o.sessionId}] `);let g="";s!=null&&(s instanceof Error?g=this.getLevel()===0?`
|
|
64
|
+
${s.message}
|
|
65
|
+
${s.stack}`:` ${s.message}`:this.getLevel()===0&&typeof s=="object"?g=`
|
|
66
|
+
`+JSON.stringify(s,null,2):g=" "+this.formatData(s));let f="";if(o){let{sessionId:E,memorySessionId:p,correlationId:m,...y}=o;Object.keys(y).length>0&&(f=` {${Object.entries(y).map(([O,M])=>`${O}=${M}`).join(", ")}}`)}let h=`[${i}] [${a}] [${c}] ${u}${n}${f}${g}`;if(this.logFilePath)try{na(this.logFilePath,h+`
|
|
67
67
|
`,"utf8")}catch(E){process.stderr.write(`[LOGGER] Failed to write to log file: ${E instanceof Error?E.message:String(E)}
|
|
68
|
-
`)}else process.stderr.write(
|
|
69
|
-
`)}debug(t,r,n,
|
|
70
|
-
`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),m=p?`${p[1].split("/").pop()}:${p[2]}`:"unknown",d={...n,location:m};return this.warn(t,`[HAPPY-PATH] ${r}`,d,s),o}},l=new Or});function ls(e){return process.platform==="win32"?Math.round(e*it.WINDOWS_MULTIPLIER):e}var it,Pr=S(()=>{"use strict";it={DEFAULT:3e5,HEALTH_CHECK:3e3,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 Qi,writeFileSync as us,existsSync as ds,mkdirSync as ea}from"fs";import{join as ps,dirname as ta}from"path";import{homedir as ms}from"os";var fe,Fr=S(()=>{"use strict";fe=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-6",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_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",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_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:ps(ms(),".claude-mem"),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:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:ps(ms(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",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_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",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:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(t){return process.env[t]??this.DEFAULTS[t]}static getInt(t){let r=this.get(t);return parseInt(r,10)}static getBool(t){let r=this.get(t);return r==="true"||r===!0}static applyEnvOverrides(t){let r={...t};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(t){try{if(!ds(t)){let i=this.getAllDefaults();try{let a=ta(t);ds(a)||ea(a,{recursive:!0}),us(t,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",t)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,a instanceof Error?a.message:String(a))}return this.applyEnvOverrides(i)}let r=Qi(t,"utf-8"),n=JSON.parse(r),s=n;if(n.env&&typeof n.env=="object"){s=n.env;try{us(t,JSON.stringify(s,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(i){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,i instanceof Error?i.message:String(i))}}let o={...this.DEFAULTS};for(let i of Object.keys(this.DEFAULTS))s[i]!==void 0&&(o[i]=s[i]);return this.applyEnvOverrides(o)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",t,r instanceof Error?r.message:String(r)),this.applyEnvOverrides(this.getAllDefaults())}}}});import{join as j,dirname as ra,basename as na}from"path";import{homedir as gs}from"os";import{existsSync as sa,mkdirSync as Qu}from"fs";import{execSync as td}from"child_process";import{fileURLToPath as oa}from"url";function ia(){return typeof __dirname<"u"?__dirname:ra(oa(import.meta.url))}function aa(){if(process.env.CLAUDE_MEM_DATA_DIR)return process.env.CLAUDE_MEM_DATA_DIR;let e=j(gs(),".claude-mem"),t=j(e,"settings.json");try{if(sa(t)){let{readFileSync:r}=ei("fs"),n=JSON.parse(r(t,"utf-8")),s=n.env??n;if(s.CLAUDE_MEM_DATA_DIR)return s.CLAUDE_MEM_DATA_DIR}}catch{}return e}var sd,V,Te,Gt,od,id,ad,cd,ld,ca,ud,dd,la,pd,md,gd,fd,at=S(()=>{"use strict";K();sd=ia();V=aa(),Te=process.env.CLAUDE_CONFIG_DIR||j(gs(),".claude"),Gt=j(Te,"plugins","marketplaces","thedotmack"),od=j(V,"archives"),id=j(V,"logs"),ad=j(V,"trash"),cd=j(V,"backups"),ld=j(V,"modes"),ca=j(V,"settings.json"),ud=j(V,"claude-mem.db"),dd=j(V,"vector-db"),la=j(V,"observer-sessions"),pd=na(la),md=j(Te,"settings.json"),gd=j(Te,"commands"),fd=j(Te,"CLAUDE.md")});var fs=S(()=>{"use strict";Fr();at()});var hs=S(()=>{"use strict"});import{spawn as xd,spawnSync as ua}from"child_process";import{existsSync as da,mkdirSync as Es,readFileSync as Ss,writeFileSync as pa}from"fs";import{homedir as ma}from"os";import Wt from"path";function ie(e){if(!Number.isInteger(e)||e<0||e===0)return!1;try{return process.kill(e,0),!0}catch(t){if(t instanceof Error){let r=t.code;return r==="EPERM"?!0:(l.debug("SYSTEM","PID check failed",{pid:e,code:r}),!1)}return l.warn("SYSTEM","PID check threw non-Error",{pid:e,error:String(t)}),!1}}function Sa(e){if(!Number.isInteger(e)||e<=0)return null;if(process.platform==="linux")try{let t=Ss(`/proc/${e}/stat`,"utf-8"),r=t.lastIndexOf(") ");if(r<0)return null;let s=t.slice(r+2).split(" ")[19];return s&&/^\d+$/.test(s)?s:null}catch(t){return l.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:e,error:t instanceof Error?t.message:String(t)}),null}if(process.platform==="win32")return null;try{let t=ua("ps",["-p",String(e),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...process.env,LC_ALL:"C",LANG:"C"}});if(t.status!==0)return null;let r=t.stdout.trim();return r.length>0?r:null}catch(t){return l.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:e,error:t instanceof Error?t.message:String(t)}),null}}function Cs(e){if(!e||!ie(e.pid))return!1;if(!e.startToken)return!0;let t=Sa(e.pid);if(t===null)return!0;let r=t===e.startToken;return r||l.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:e.pid,stored:e.startToken,current:t}),r}function Ht(){return Lr||(Lr=new Nr),Lr}var ga,fa,ha,Ea,Nr,Lr,Bt=S(()=>{"use strict";K();hs();ga=5e3,fa=1e3,ha=Wt.join(ma(),".claude-mem"),Ea=Wt.join(ha,"supervisor.json");Nr=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(t=Ea){this.registryPath=t}initialize(){if(this.initialized)return;if(this.initialized=!0,Es(Wt.dirname(this.registryPath),{recursive:!0}),!da(this.registryPath)){this.persist();return}try{let n=JSON.parse(Ss(this.registryPath,"utf-8")).processes??{};for(let[s,o]of Object.entries(n))this.entries.set(s,o)}catch(r){r instanceof Error?l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let t=this.pruneDeadEntries();t>0&&l.info("SYSTEM","Removed dead processes from supervisor registry",{removed:t}),this.persist()}register(t,r,n){this.initialize(),this.entries.set(t,r),n&&this.runtimeProcesses.set(t,n),this.persist()}unregister(t){this.initialize(),this.entries.delete(t),this.runtimeProcesses.delete(t),this.persist()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([t,r])=>({id:t,...r})).sort((t,r)=>{let n=Date.parse(t.startedAt),s=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}getBySession(t){let r=String(t);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===r)}getRuntimeProcess(t){return this.runtimeProcesses.get(t)}getByPid(t){return this.getAll().filter(r=>r.pid===t)}pruneDeadEntries(){this.initialize();let t=0;for(let[r,n]of this.entries)ie(n.pid)||(this.entries.delete(r),this.runtimeProcesses.delete(r),t+=1);return t>0&&this.persist(),t}async reapSession(t){this.initialize();let r=this.getBySession(t);if(r.length===0)return 0;let n=typeof t=="number"?t:Number(t)||void 0;l.info("SYSTEM",`Reaping ${r.length} process(es) for session ${t}`,{sessionId:n,pids:r.map(a=>a.pid)});let s=r.filter(a=>ie(a.pid));for(let a of s)try{typeof a.pgid=="number"&&process.platform!=="win32"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):l.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}let o=Date.now()+ga;for(;Date.now()<o&&s.filter(c=>ie(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100));let i=s.filter(a=>ie(a.pid));for(let a of i){l.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:n});try{typeof a.pgid=="number"&&process.platform!=="win32"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):l.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}}if(i.length>0){let a=Date.now()+fa;for(;Date.now()<a&&i.filter(p=>ie(p.pid)).length!==0;)await new Promise(p=>setTimeout(p,100))}for(let a of r)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);return this.persist(),l.info("SYSTEM",`Reaped ${r.length} process(es) for session ${t}`,{sessionId:n,reaped:r.length}),r.length}persist(){let t={processes:Object.fromEntries(this.entries.entries())};Es(Wt.dirname(this.registryPath),{recursive:!0}),pa(this.registryPath,JSON.stringify(t,null,2))}},Lr=null});import{execFile as Ca}from"child_process";import{rmSync as ya}from"fs";import{homedir as wa}from"os";import vs from"path";import{promisify as va}from"util";async function _s(e){let t=e.currentPid??process.pid,r=e.pidFilePath??$a,n=e.registry.getAll(),s=[...n].filter(i=>i.pid!==t).sort((i,a)=>Date.parse(a.startedAt)-Date.parse(i.startedAt));for(let i of s){if(!ie(i.pid)){e.registry.unregister(i.id);continue}try{await ws(i,"SIGTERM")}catch(a){a instanceof Error?l.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):l.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}}await ys(s,5e3);let o=s.filter(i=>ie(i.pid));for(let i of o)try{await ws(i,"SIGKILL")}catch(a){a instanceof Error?l.debug("SYSTEM","Failed to force kill child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):l.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}await ys(o,1e3);for(let i of s)e.registry.unregister(i.id);for(let i of n.filter(a=>a.pid===t))e.registry.unregister(i.id);try{ya(r,{force:!0})}catch(i){i instanceof Error?l.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:r},i):l.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:r,error:String(i)})}e.registry.pruneDeadEntries()}async function ys(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(e.filter(s=>ie(s.pid)).length===0)return;await new Promise(s=>setTimeout(s,100))}}async function ws(e,t){let{pid:r,pgid:n}=e;if(process.platform!=="win32"){try{typeof n=="number"?process.kill(-n,t):process.kill(r,t)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}if(t==="SIGTERM"){try{process.kill(r,t)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}let s=await Ia();if(s){await new Promise((i,a)=>{s(r,t,c=>{if(!c){i();return}if(c.code==="ESRCH"){i();return}a(c)})});return}let o=["/PID",String(r),"/T"];t==="SIGKILL"&&o.push("/F"),await _a("taskkill",o,{timeout:it.POWERSHELL_COMMAND,windowsHide:!0})}async function Ia(){let e="tree-kill";try{let t=await import(e);return t.default??t}catch(t){return l.debug("SYSTEM","tree-kill module not available, using fallback",{},t instanceof Error?t:void 0),null}}var _a,xa,$a,xs=S(()=>{"use strict";K();Pr();Bt();_a=va(Ca),xa=vs.join(wa(),".claude-mem"),$a=vs.join(xa,"worker.pid")});function ka(){let t=Ht().pruneDeadEntries();t>0&&l.info("SYSTEM",`Health check: pruned ${t} dead process(es) from registry`)}function Is(){Ae===null&&(Ae=setInterval(ka,$s),Ae.unref(),l.debug("SYSTEM","Health checker started",{intervalMs:$s}))}function ks(){Ae!==null&&(clearInterval(Ae),Ae=null,l.debug("SYSTEM","Health checker stopped"))}var $s,Ae,Ms=S(()=>{"use strict";K();Bt();$s=3e4,Ae=null});import{existsSync as Ma,readFileSync as ba,rmSync as bs}from"fs";import{homedir as Ta}from"os";import Ts from"path";function As(e={}){let t=e.pidFilePath??Ra;if(!Ma(t))return"missing";let r=null;try{r=JSON.parse(ba(t,"utf-8"))}catch(s){return s instanceof Error?l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:t},s):l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:t,error:String(s)}),bs(t,{force:!0}),"invalid"}return Cs(r)&&r?((e.logAlive??!0)&&l.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(l.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),bs(t,{force:!0}),"stale")}var Aa,Ra,Ur,qd,Rs=S(()=>{"use strict";K();Bt();xs();Ms();Aa=Ts.join(Ta(),".claude-mem"),Ra=Ts.join(Aa,"worker.pid"),Ur=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(t){this.registry=t}async start(){if(this.started)return;if(this.registry.initialize(),As({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Is()}configureSignalHandlers(t){if(this.shutdownHandler=t,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){l.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,l.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?l.error("SYSTEM","Error during shutdown",{},s):l.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(o){o instanceof Error?l.debug("SYSTEM","Supervisor shutdown fallback failed",{},o):l.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",()=>{l.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}ks(),this.stopPromise=_s({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(t){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${t}`)}registerProcess(t,r,n){this.registry.register(t,r,n)}unregisterProcess(t){this.registry.unregister(t)}getRegistry(){return this.registry}},qd=new Ur(Ht())});import Ds from"path";import{readFileSync as rp,existsSync as np,writeFileSync as sp,renameSync as op,mkdirSync as ip}from"fs";import{spawn as cp,execSync as lp}from"child_process";function Oa(e,t={},r){return new Promise((n,s)=>{let o=setTimeout(()=>s(new Error(`Request timed out after ${r}ms`)),r);fetch(e,t).then(i=>{clearTimeout(o),n(i)},i=>{clearTimeout(o),s(i)})})}function ct(){if(Kt!==null)return Kt;let e=Ds.join(fe.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),t=fe.loadFromFile(e);return Kt=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),Kt}function Pa(){if(Vt!==null)return Vt;let e=Ds.join(fe.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return Vt=fe.loadFromFile(e).CLAUDE_MEM_WORKER_HOST,Vt}function Fa(e){return`http://${Pa()}:${ct()}${e}`}function Jt(e,t={}){let r=t.method??"GET",n=t.timeoutMs??Da,s=Fa(e),o={method:r};return t.headers&&(o.headers=t.headers),t.body&&(o.body=t.body),n>0?Oa(s,o,n):fetch(s,o)}var Da,Kt,Vt,Yt=S(()=>{"use strict";K();Pr();Fr();at();fs();Rs();Da=(()=>{let e=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(e){let t=parseInt(e,10);if(Number.isFinite(t)&&t>=500&&t<=3e5)return t;l.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:e,min:500,max:3e5})}return ls(it.HEALTH_CHECK)})();Kt=null,Vt=null});import{existsSync as La,readFileSync as Na,writeFileSync as Os,mkdirSync as Ps,renameSync as Ua}from"fs";import{join as jr,basename as Cp}from"path";function Fs(e){try{return La(e)?JSON.parse(Na(e,"utf-8")):{}}catch(t){return l.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:e,error:t instanceof Error?t.message:String(t)}),{}}}function Ls(e,t){let r=jr(e,"..");Ps(r,{recursive:!0}),Os(e,JSON.stringify(t,null,2))}function Gr(e,t){let r=jr(e,".cursor","rules"),n=jr(r,"claude-mem-context.mdc"),s=`${n}.tmp`;Ps(r,{recursive:!0});let o=`---
|
|
68
|
+
`)}else process.stderr.write(h+`
|
|
69
|
+
`)}debug(t,r,n,o){this.log(0,t,r,n,o)}info(t,r,n,o){this.log(1,t,r,n,o)}warn(t,r,n,o){this.log(2,t,r,n,o)}error(t,r,n,o){this.log(3,t,r,n,o)}dataIn(t,r,n,o){this.info(t,`\u2192 ${r}`,n,o)}dataOut(t,r,n,o){this.info(t,`\u2190 ${r}`,n,o)}success(t,r,n,o){this.info(t,`\u2713 ${r}`,n,o)}failure(t,r,n,o){this.error(t,`\u2717 ${r}`,n,o)}timing(t,r,n,o){this.info(t,`\u23F1 ${r}`,o,{duration:`${n}ms`})}happyPathError(t,r,n,o,s=""){let u=((new Error().stack||"").split(`
|
|
70
|
+
`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),g=u?`${u[1].split("/").pop()}:${u[2]}`:"unknown",f={...n,location:g};return this.warn(t,`[HAPPY-PATH] ${r}`,f,o),s}},l=new jr});function yo(e){return process.platform==="win32"?Math.round(e*ut.WINDOWS_MULTIPLIER):e}var ut,Gr=S(()=>{"use strict";ut={DEFAULT:3e5,HEALTH_CHECK:3e3,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{join as G,dirname as aa,basename as ca}from"path";import{homedir as wo}from"os";import{existsSync as la,mkdirSync as ld}from"fs";import{execSync as dd}from"child_process";import{fileURLToPath as ua}from"url";function da(){return typeof __dirname<"u"?__dirname:aa(ua(import.meta.url))}function pa(){if(process.env.CLAUDE_MEM_DATA_DIR)return process.env.CLAUDE_MEM_DATA_DIR;let e=G(wo(),".claude-mem"),t=G(e,"settings.json");try{if(la(t)){let{readFileSync:r}=si("fs"),n=JSON.parse(r(t,"utf-8")),o=n.env??n;if(o.CLAUDE_MEM_DATA_DIR)return o.CLAUDE_MEM_DATA_DIR}}catch{}return e}var gd,Y,De,Vt,fd,hd,Ed,Sd,Cd,ma,yd,wd,ga,vd,_d,xd,$d,dt=S(()=>{"use strict";J();gd=da();Y=pa(),De=process.env.CLAUDE_CONFIG_DIR||G(wo(),".claude"),Vt=G(De,"plugins","marketplaces","thedotmack"),fd=G(Y,"archives"),hd=G(Y,"logs"),Ed=G(Y,"trash"),Sd=G(Y,"backups"),Cd=G(Y,"modes"),ma=G(Y,"settings.json"),yd=G(Y,"claude-mem.db"),wd=G(Y,"vector-db"),ga=G(Y,"observer-sessions"),vd=ca(ga),_d=G(De,"settings.json"),xd=G(De,"commands"),$d=G(De,"CLAUDE.md")});var vo=S(()=>{"use strict";ke();dt()});var _o=S(()=>{"use strict"});import{spawn as Dd,spawnSync as fa}from"child_process";import{existsSync as ha,mkdirSync as xo,readFileSync as $o,writeFileSync as Ea}from"fs";import{homedir as Sa}from"os";import Jt from"path";function ae(e){if(!Number.isInteger(e)||e<0||e===0)return!1;try{return process.kill(e,0),!0}catch(t){if(t instanceof Error){let r=t.code;return r==="EPERM"?!0:(l.debug("SYSTEM","PID check failed",{pid:e,code:r}),!1)}return l.warn("SYSTEM","PID check threw non-Error",{pid:e,error:String(t)}),!1}}function _a(e){if(!Number.isInteger(e)||e<=0)return null;if(process.platform==="linux")try{let t=$o(`/proc/${e}/stat`,"utf-8"),r=t.lastIndexOf(") ");if(r<0)return null;let o=t.slice(r+2).split(" ")[19];return o&&/^\d+$/.test(o)?o:null}catch(t){return l.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:e,error:t instanceof Error?t.message:String(t)}),null}if(process.platform==="win32")return null;try{let t=fa("ps",["-p",String(e),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...process.env,LC_ALL:"C",LANG:"C"}});if(t.status!==0)return null;let r=t.stdout.trim();return r.length>0?r:null}catch(t){return l.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:e,error:t instanceof Error?t.message:String(t)}),null}}function ko(e){if(!e||!ae(e.pid))return!1;if(!e.startToken)return!0;let t=_a(e.pid);if(t===null)return!0;let r=t===e.startToken;return r||l.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:e.pid,stored:e.startToken,current:t}),r}function Yt(){return Wr||(Wr=new Hr),Wr}var Ca,ya,wa,va,Hr,Wr,Xt=S(()=>{"use strict";J();_o();Ca=5e3,ya=1e3,wa=Jt.join(Sa(),".claude-mem"),va=Jt.join(wa,"supervisor.json");Hr=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(t=va){this.registryPath=t}initialize(){if(this.initialized)return;if(this.initialized=!0,xo(Jt.dirname(this.registryPath),{recursive:!0}),!ha(this.registryPath)){this.persist();return}try{let n=JSON.parse($o(this.registryPath,"utf-8")).processes??{};for(let[o,s]of Object.entries(n))this.entries.set(o,s)}catch(r){r instanceof Error?l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let t=this.pruneDeadEntries();t>0&&l.info("SYSTEM","Removed dead processes from supervisor registry",{removed:t}),this.persist()}register(t,r,n){this.initialize(),this.entries.set(t,r),n&&this.runtimeProcesses.set(t,n),this.persist()}unregister(t){this.initialize(),this.entries.delete(t),this.runtimeProcesses.delete(t),this.persist()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([t,r])=>({id:t,...r})).sort((t,r)=>{let n=Date.parse(t.startedAt),o=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(o)?0:o)})}getBySession(t){let r=String(t);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===r)}getRuntimeProcess(t){return this.runtimeProcesses.get(t)}getByPid(t){return this.getAll().filter(r=>r.pid===t)}pruneDeadEntries(){this.initialize();let t=0;for(let[r,n]of this.entries)ae(n.pid)||(this.entries.delete(r),this.runtimeProcesses.delete(r),t+=1);return t>0&&this.persist(),t}async reapSession(t){this.initialize();let r=this.getBySession(t);if(r.length===0)return 0;let n=typeof t=="number"?t:Number(t)||void 0;l.info("SYSTEM",`Reaping ${r.length} process(es) for session ${t}`,{sessionId:n,pids:r.map(a=>a.pid)});let o=r.filter(a=>ae(a.pid));for(let a of o)try{typeof a.pgid=="number"&&process.platform!=="win32"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):l.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}let s=Date.now()+Ca;for(;Date.now()<s&&o.filter(c=>ae(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100));let i=o.filter(a=>ae(a.pid));for(let a of i){l.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:n});try{typeof a.pgid=="number"&&process.platform!=="win32"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):l.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}}if(i.length>0){let a=Date.now()+ya;for(;Date.now()<a&&i.filter(u=>ae(u.pid)).length!==0;)await new Promise(u=>setTimeout(u,100))}for(let a of r)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);return this.persist(),l.info("SYSTEM",`Reaped ${r.length} process(es) for session ${t}`,{sessionId:n,reaped:r.length}),r.length}persist(){let t={processes:Object.fromEntries(this.entries.entries())};xo(Jt.dirname(this.registryPath),{recursive:!0}),Ea(this.registryPath,JSON.stringify(t,null,2))}},Wr=null});import{execFile as xa}from"child_process";import{rmSync as $a}from"fs";import{homedir as ka}from"os";import Mo from"path";import{promisify as Ia}from"util";async function Ao(e){let t=e.currentPid??process.pid,r=e.pidFilePath??Aa,n=e.registry.getAll(),o=[...n].filter(i=>i.pid!==t).sort((i,a)=>Date.parse(a.startedAt)-Date.parse(i.startedAt));for(let i of o){if(!ae(i.pid)){e.registry.unregister(i.id);continue}try{await bo(i,"SIGTERM")}catch(a){a instanceof Error?l.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):l.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}}await Io(o,5e3);let s=o.filter(i=>ae(i.pid));for(let i of s)try{await bo(i,"SIGKILL")}catch(a){a instanceof Error?l.debug("SYSTEM","Failed to force kill child process",{pid:i.pid,pgid:i.pgid,type:i.type},a):l.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:i.pid,pgid:i.pgid,type:i.type,error:String(a)})}await Io(s,1e3);for(let i of o)e.registry.unregister(i.id);for(let i of n.filter(a=>a.pid===t))e.registry.unregister(i.id);try{$a(r,{force:!0})}catch(i){i instanceof Error?l.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:r},i):l.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:r,error:String(i)})}e.registry.pruneDeadEntries()}async function Io(e,t){let r=Date.now()+t;for(;Date.now()<r;){if(e.filter(o=>ae(o.pid)).length===0)return;await new Promise(o=>setTimeout(o,100))}}async function bo(e,t){let{pid:r,pgid:n}=e;if(process.platform!=="win32"){try{typeof n=="number"?process.kill(-n,t):process.kill(r,t)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}if(t==="SIGTERM"){try{process.kill(r,t)}catch(i){if(i instanceof Error&&i.code==="ESRCH")return;throw i}return}let o=await Ta();if(o){await new Promise((i,a)=>{o(r,t,c=>{if(!c){i();return}if(c.code==="ESRCH"){i();return}a(c)})});return}let s=["/PID",String(r),"/T"];t==="SIGKILL"&&s.push("/F"),await ba("taskkill",s,{timeout:ut.POWERSHELL_COMMAND,windowsHide:!0})}async function Ta(){let e="tree-kill";try{let t=await import(e);return t.default??t}catch(t){return l.debug("SYSTEM","tree-kill module not available, using fallback",{},t instanceof Error?t:void 0),null}}var ba,Ma,Aa,To=S(()=>{"use strict";J();Gr();Xt();ba=Ia(xa),Ma=Mo.join(ka(),".claude-mem"),Aa=Mo.join(Ma,"worker.pid")});function Ra(){let t=Yt().pruneDeadEntries();t>0&&l.info("SYSTEM",`Health check: pruned ${t} dead process(es) from registry`)}function Po(){Oe===null&&(Oe=setInterval(Ra,Ro),Oe.unref(),l.debug("SYSTEM","Health checker started",{intervalMs:Ro}))}function Do(){Oe!==null&&(clearInterval(Oe),Oe=null,l.debug("SYSTEM","Health checker stopped"))}var Ro,Oe,Oo=S(()=>{"use strict";J();Xt();Ro=3e4,Oe=null});import{existsSync as Pa,readFileSync as Da,rmSync as Fo}from"fs";import{homedir as Oa}from"os";import Lo from"path";function No(e={}){let t=e.pidFilePath??La;if(!Pa(t))return"missing";let r=null;try{r=JSON.parse(Da(t,"utf-8"))}catch(o){return o instanceof Error?l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:t},o):l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:t,error:String(o)}),Fo(t,{force:!0}),"invalid"}return ko(r)&&r?((e.logAlive??!0)&&l.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(l.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),Fo(t,{force:!0}),"stale")}var Fa,La,Br,ip,Uo=S(()=>{"use strict";J();Xt();To();Oo();Fa=Lo.join(Oa(),".claude-mem"),La=Lo.join(Fa,"worker.pid"),Br=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(t){this.registry=t}async start(){if(this.started)return;if(this.registry.initialize(),No({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Po()}configureSignalHandlers(t){if(this.shutdownHandler=t,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){l.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,l.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(o){o instanceof Error?l.error("SYSTEM","Error during shutdown",{},o):l.error("SYSTEM","Error during shutdown (non-Error)",{error:String(o)});try{await this.stop()}catch(s){s instanceof Error?l.debug("SYSTEM","Supervisor shutdown fallback failed",{},s):l.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(s)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{l.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}Do(),this.stopPromise=Ao({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(t){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${t}`)}registerProcess(t,r,n){this.registry.register(t,r,n)}unregisterProcess(t){this.registry.unregister(t)}getRegistry(){return this.registry}},ip=new Br(Yt())});import jo from"path";import{readFileSync as pp,existsSync as mp,writeFileSync as gp,renameSync as fp,mkdirSync as hp}from"fs";import{spawn as Sp,execSync as Cp}from"child_process";function Ua(e,t={},r){return new Promise((n,o)=>{let s=setTimeout(()=>o(new Error(`Request timed out after ${r}ms`)),r);fetch(e,t).then(i=>{clearTimeout(s),n(i)},i=>{clearTimeout(s),o(i)})})}function pt(){if(zt!==null)return zt;let e=jo.join(F.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),t=F.loadFromFile(e);return zt=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),zt}function ja(){if(qt!==null)return qt;let e=jo.join(F.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return qt=F.loadFromFile(e).CLAUDE_MEM_WORKER_HOST,qt}function Ga(e){return`http://${ja()}:${pt()}${e}`}function Zt(e,t={}){let r=t.method??"GET",n=t.timeoutMs??Na,o=Ga(e),s={method:r};return t.headers&&(s.headers=t.headers),t.body&&(s.body=t.body),n>0?Ua(o,s,n):fetch(o,s)}var Na,zt,qt,Qt=S(()=>{"use strict";J();Gr();ke();dt();vo();Uo();Na=(()=>{let e=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(e){let t=parseInt(e,10);if(Number.isFinite(t)&&t>=500&&t<=3e5)return t;l.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:e,min:500,max:3e5})}return yo(ut.HEALTH_CHECK)})();zt=null,qt=null});import{existsSync as Wa,readFileSync as Ha,writeFileSync as Go,mkdirSync as Wo,renameSync as Ba}from"fs";import{join as Kr,basename as Mp}from"path";function Ho(e){try{return Wa(e)?JSON.parse(Ha(e,"utf-8")):{}}catch(t){return l.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:e,error:t instanceof Error?t.message:String(t)}),{}}}function Bo(e,t){let r=Kr(e,"..");Wo(r,{recursive:!0}),Go(e,JSON.stringify(t,null,2))}function Vr(e,t){let r=Kr(e,".cursor","rules"),n=Kr(r,"claude-mem-context.mdc"),o=`${n}.tmp`;Wo(r,{recursive:!0});let s=`---
|
|
71
71
|
alwaysApply: true
|
|
72
72
|
description: "Claude-mem context from past sessions (auto-updated)"
|
|
73
73
|
---
|
|
@@ -80,13 +80,13 @@ ${t}
|
|
|
80
80
|
|
|
81
81
|
---
|
|
82
82
|
*Updated after last session. Use claude-mem's MCP search tools for more detailed queries.*
|
|
83
|
-
`;
|
|
83
|
+
`;Go(o,s),Ba(o,n)}var Ko=S(()=>{"use strict";J()});var es={};se(es,{checkCursorHooksStatus:()=>Qo,configureCursorMcp:()=>za,detectClaudeCode:()=>tc,detectPlatform:()=>Yo,findBunPath:()=>Le,findMcpServerPath:()=>mt,findWorkerServicePath:()=>Fe,getScriptExtension:()=>Ya,getTargetDir:()=>rr,handleCursorCommand:()=>rc,installCursorHooks:()=>qo,readCursorRegistry:()=>tr,registerCursorProject:()=>Xo,uninstallCursorHooks:()=>Zo,unregisterCursorProject:()=>zo,updateCursorContextForProject:()=>Xa,writeCursorRegistry:()=>zr});import w from"path";import{homedir as er}from"os";import{existsSync as Q,readFileSync as Vo,writeFileSync as Yr,unlinkSync as Jr,mkdirSync as Xr}from"fs";import{exec as Ka}from"child_process";import{promisify as Va}from"util";function Yo(){return process.platform==="win32"?"windows":"unix"}function Ya(){return Yo()==="windows"?".ps1":".sh"}function tr(){return Ho(Jo)}function zr(e){Bo(Jo,e)}function Xo(e,t){let r=tr();r[e]={workspacePath:t,installedAt:new Date().toISOString()},zr(r),l.info("CURSOR","Registered project for auto-context updates",{projectName:e,workspacePath:t})}function zo(e){let t=tr();t[e]&&(delete t[e],zr(t),l.info("CURSOR","Unregistered project",{projectName:e}))}async function Xa(e,t){let n=tr()[e];if(n)try{let o=await Zt(`/api/context/inject?project=${encodeURIComponent(e)}`);if(!o.ok)return;let s=await o.text();if(!s||!s.trim())return;Vr(n.workspacePath,s),l.debug("CURSOR","Updated context file",{projectName:e,workspacePath:n.workspacePath})}catch(o){o instanceof Error?l.error("WORKER","Failed to update context file",{projectName:e},o):l.error("WORKER","Failed to update context file",{projectName:e},new Error(String(o)))}}function mt(){let e=[w.join(Vt,"plugin","scripts","mcp-server.cjs"),w.join(process.cwd(),"plugin","scripts","mcp-server.cjs")];for(let t of e)if(Q(t))return t;return null}function Fe(){let e=[w.join(Vt,"plugin","scripts","worker-service.cjs"),w.join(process.cwd(),"plugin","scripts","worker-service.cjs")];for(let t of e)if(Q(t))return t;return null}function Le(){let e=[w.join(er(),".bun","bin","bun"),"/usr/local/bin/bun","/usr/bin/bun",...process.platform==="win32"?[w.join(er(),".bun","bin","bun.exe"),w.join(process.env.LOCALAPPDATA||"","bun","bun.exe")]:[]];for(let t of e)if(t&&Q(t))return t;return"bun"}function rr(e){switch(e){case"project":return w.join(process.cwd(),".cursor");case"user":return w.join(er(),".cursor");case"enterprise":return process.platform==="darwin"?"/Library/Application Support/Cursor":process.platform==="linux"?"/etc/cursor":process.platform==="win32"?w.join(process.env.ProgramData||"C:\\ProgramData","Cursor"):null;default:return null}}function za(e){let t=mt();if(!t)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let r=rr(e);if(!r)return console.error(`Invalid target: ${e}. Use: project or user`),1;let n=w.join(r,"mcp.json");try{Xr(r,{recursive:!0});let o={mcpServers:{}};if(Q(n))try{o=JSON.parse(Vo(n,"utf-8")),o.mcpServers||(o.mcpServers={})}catch(s){s instanceof Error?l.error("WORKER","Corrupt mcp.json, creating new config",{path:n},s):l.error("WORKER","Corrupt mcp.json, creating new config",{path:n},new Error(String(s))),o={mcpServers:{}}}return o.mcpServers["claude-mem"]={command:"node",args:[t]},Yr(n,JSON.stringify(o,null,2)),console.log(` Configured MCP server in ${e==="user"?"~/.cursor":".cursor"}/mcp.json`),console.log(` Server path: ${t}`),0}catch(o){return console.error(`Failed to configure MCP: ${o.message}`),1}}async function qo(e){console.log(`
|
|
84
84
|
Installing Claude-Mem Cursor hooks (${e} level)...
|
|
85
|
-
`);let t=
|
|
86
|
-
Installation failed: ${
|
|
85
|
+
`);let t=rr(e);if(!t)return console.error(`Invalid target: ${e}. Use: project, user, or enterprise`),1;let r=Fe();if(!r)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let n=process.cwd(),o=w.join(t,"hooks.json"),s=Le(),i=s.replace(/\\/g,"\\\\"),a=r.replace(/\\/g,"\\\\"),c=g=>`"${i}" "${a}" hook cursor ${g}`;console.log(` Using Bun runtime: ${s}`);let u={version:1,hooks:{beforeSubmitPrompt:[{command:c("session-init")},{command:c("context")}],afterMCPExecution:[{command:c("observation")}],afterShellExecution:[{command:c("observation")}],afterFileEdit:[{command:c("file-edit")}],stop:[{command:c("summarize")}]}};try{return Xr(t,{recursive:!0}),await qa(o,u,r,e,t,n),0}catch(g){let f=g instanceof Error?g.message:String(g);return console.error(`
|
|
86
|
+
Installation failed: ${f}`),e==="enterprise"&&console.error(" Tip: Enterprise installation may require sudo/admin privileges"),1}}async function qa(e,t,r,n,o,s){Yr(e,JSON.stringify(t,null,2)),console.log(" Created hooks.json (unified CLI mode)"),console.log(` Worker service: ${r}`),n==="project"&&await Za(o,s),console.log(`
|
|
87
87
|
Installation complete!
|
|
88
88
|
|
|
89
|
-
Hooks installed to: ${
|
|
89
|
+
Hooks installed to: ${o}/hooks.json
|
|
90
90
|
Using unified CLI: bun worker-service.cjs hook cursor <command>
|
|
91
91
|
|
|
92
92
|
Next steps:
|
|
@@ -97,7 +97,7 @@ Next steps:
|
|
|
97
97
|
Context Injection:
|
|
98
98
|
Context from past sessions is stored in .cursor/rules/claude-mem-context.mdc
|
|
99
99
|
and automatically included in every chat. It updates after each session ends.
|
|
100
|
-
`)}async function
|
|
100
|
+
`)}async function Za(e,t){let r=w.join(e,"rules");Xr(r,{recursive:!0});let n=w.basename(t),o=!1;console.log(" Generating initial context...");try{o=await Qa(n,t)}catch(s){s instanceof Error?l.debug("WORKER","Worker not running during install",{},s):l.debug("WORKER","Worker not running during install",{},new Error(String(s)))}if(!o){let s=w.join(r,"claude-mem-context.mdc");Yr(s,`---
|
|
101
101
|
alwaysApply: true
|
|
102
102
|
description: "Claude-mem context from past sessions (auto-updated)"
|
|
103
103
|
---
|
|
@@ -107,15 +107,15 @@ description: "Claude-mem context from past sessions (auto-updated)"
|
|
|
107
107
|
*No context yet. Complete your first session and context will appear here.*
|
|
108
108
|
|
|
109
109
|
Use claude-mem's MCP search tools for manual memory queries.
|
|
110
|
-
`),console.log(" Created placeholder context file (will populate after first session)")}
|
|
110
|
+
`),console.log(" Created placeholder context file (will populate after first session)")}Xo(n,t),console.log(" Registered for auto-context updates")}async function Qa(e,t){if(!(await Zt("/api/readiness")).ok)return!1;let n=await Zt(`/api/context/inject?project=${encodeURIComponent(e)}`);if(!n.ok)return!1;let o=await n.text();return o&&o.trim()?(Vr(t,o),console.log(" Generated initial context from existing memory"),!0):!1}function Zo(e){console.log(`
|
|
111
111
|
Uninstalling Claude-Mem Cursor hooks (${e} level)...
|
|
112
|
-
`);let t=
|
|
113
|
-
Uninstallation failed: ${c}`),1}}function
|
|
112
|
+
`);let t=rr(e);if(!t)return console.error(`Invalid target: ${e}`),1;let r=w.join(t,"hooks"),n=w.join(t,"hooks.json"),o=["common.sh","session-init.sh","context-inject.sh","save-observation.sh","save-file-edit.sh","session-summary.sh"],s=["common.ps1","session-init.ps1","context-inject.ps1","save-observation.ps1","save-file-edit.ps1","session-summary.ps1"],i=[...o,...s];try{return ec(r,i,n,e,t),0}catch(a){let c=a instanceof Error?a.message:String(a);return console.error(`
|
|
113
|
+
Uninstallation failed: ${c}`),1}}function ec(e,t,r,n,o){for(let s of t){let i=w.join(e,s);Q(i)&&(Jr(i),console.log(` Removed legacy script: ${s}`))}if(Q(r)&&(Jr(r),console.log(" Removed hooks.json")),n==="project"){let s=w.join(o,"rules","claude-mem-context.mdc");Q(s)&&(Jr(s),console.log(" Removed context file"));let i=w.basename(process.cwd());zo(i),console.log(" Unregistered from auto-context updates")}console.log(`
|
|
114
114
|
Uninstallation complete!
|
|
115
|
-
`),console.log("Restart Cursor to apply changes.")}function
|
|
115
|
+
`),console.log("Restart Cursor to apply changes.")}function Qo(){console.log(`
|
|
116
116
|
Claude-Mem Cursor Hooks Status
|
|
117
|
-
`);let e=[{name:"Project",dir:
|
|
118
|
-
`),0}async function
|
|
117
|
+
`);let e=[{name:"Project",dir:w.join(process.cwd(),".cursor")},{name:"User",dir:w.join(er(),".cursor")}];process.platform==="darwin"?e.push({name:"Enterprise",dir:"/Library/Application Support/Cursor"}):process.platform==="linux"&&e.push({name:"Enterprise",dir:"/etc/cursor"});let t=!1;for(let r of e){let n=w.join(r.dir,"hooks.json"),o=w.join(r.dir,"hooks");if(Q(n)){t=!0,console.log(`${r.name}: Installed`),console.log(` Config: ${n}`);let s=null;try{s=JSON.parse(Vo(n,"utf-8"))}catch(i){i instanceof Error?l.error("WORKER","Unable to parse hooks.json",{path:n},i):l.error("WORKER","Unable to parse hooks.json",{path:n},new Error(String(i))),console.log(" Mode: Unable to parse hooks.json")}if(s){let i=s?.hooks?.beforeSubmitPrompt?.[0]?.command||"";if(i.includes("worker-service.cjs")&&i.includes("hook cursor"))console.log(" Mode: Unified CLI (bun worker-service.cjs)");else{let a=["session-init.sh","context-inject.sh","save-observation.sh"],c=["session-init.ps1","context-inject.ps1","save-observation.ps1"],u=a.some(f=>Q(w.join(o,f))),g=c.some(f=>Q(w.join(o,f)));u||g?(console.log(" Mode: Legacy shell scripts (consider reinstalling for unified CLI)"),u&&g?console.log(" Platform: Both (bash + PowerShell)"):u?console.log(" Platform: Unix (bash)"):g&&console.log(" Platform: Windows (PowerShell)")):console.log(" Mode: Unknown configuration")}}if(r.name==="Project"){let i=w.join(r.dir,"rules","claude-mem-context.mdc");Q(i)?console.log(" Context: Active"):console.log(" Context: Not yet generated (will be created on first prompt)")}}else console.log(`${r.name}: Not installed`);console.log("")}return t||console.log(`No hooks installed. Run: claude-mem cursor install
|
|
118
|
+
`),0}async function tc(){try{let{stdout:t}=await Ja("which claude || where claude",{timeout:5e3});if(t.trim())return!0}catch(t){t instanceof Error?l.debug("WORKER","Claude CLI not in PATH",{},t):l.debug("WORKER","Claude CLI not in PATH",{},new Error(String(t)))}let e=w.join(De,"plugins");return!!Q(e)}async function rc(e,t){switch(e){case"install":{let r=t[0]||"project";return qo(r)}case"uninstall":{let r=t[0]||"project";return Zo(r)}case"status":return Qo();case"setup":return console.log("Use the main entry point for setup"),0;default:return console.log(`
|
|
119
119
|
Claude-Mem Cursor Integration
|
|
120
120
|
|
|
121
121
|
Usage: claude-mem cursor <command> [options]
|
|
@@ -139,23 +139,23 @@ Examples:
|
|
|
139
139
|
claude-mem cursor status # Check if hooks are installed
|
|
140
140
|
|
|
141
141
|
For more info: https://docs.claude-mem.ai/cursor
|
|
142
|
-
`),0}}var
|
|
143
|
-
`)}function
|
|
142
|
+
`),0}}var Ja,Jo,gt=S(()=>{"use strict";J();Qt();dt();Ko();Ja=Va(Ka),Jo=w.join(Y,"cursor-projects.json")});var en={};se(en,{checkGeminiCliHooksStatus:()=>ss,handleGeminiCliCommand:()=>dc,installGeminiCliHooks:()=>ns,uninstallGeminiCliHooks:()=>os});import qr from"path";import{homedir as nc}from"os";import{existsSync as Ne,readFileSync as nr,writeFileSync as Zr,mkdirSync as ts}from"fs";function sc(e,t,r){let n=Ue[r];if(!n)throw new Error(`Unknown Gemini CLI event: ${r}`);let o=e.replace(/\\/g,"\\\\"),s=t.replace(/\\/g,"\\\\");return`"${o}" "${s}" hook gemini-cli ${n}`}function ic(e){return{matcher:"*",hooks:[{name:ft,type:"command",command:e,timeout:oc}]}}function Qr(){if(!Ne(K))return{};let e=nr(K,"utf-8");try{return JSON.parse(e)}catch(t){throw t instanceof Error?l.error("WORKER","Corrupt JSON in Gemini settings",{path:K},t):l.error("WORKER","Corrupt JSON in Gemini settings",{path:K},new Error(String(t))),new Error(`Corrupt JSON in ${K}, refusing to overwrite user settings`)}}function rs(e){ts(or,{recursive:!0}),Zr(K,JSON.stringify(e,null,2)+`
|
|
143
|
+
`)}function ac(e,t){let r={...e};r.hooks||(r.hooks={});for(let[n,o]of Object.entries(t)){let s=r.hooks[n]??[];for(let i of o){let a=s.findIndex(c=>c.hooks.some(u=>u.name===ft));if(a>=0){let c=s[a],u=c.hooks.findIndex(g=>g.name===ft);u>=0?c.hooks[u]=i.hooks[0]:c.hooks.push(i.hooks[0])}else s.push(i)}r.hooks[n]=s}return r}function cc(){let e="<claude-mem-context>",r=`${e}
|
|
144
144
|
# Memory Context from Past Sessions
|
|
145
145
|
|
|
146
146
|
*No context yet. Complete your first session and context will appear here.*
|
|
147
|
-
</claude-mem-context>`,n="";if(
|
|
147
|
+
</claude-mem-context>`,n="";if(Ne(oe)&&(n=nr(oe,"utf-8")),n.includes(e))return;let o=n.length>0&&!n.endsWith(`
|
|
148
148
|
`)?`
|
|
149
149
|
|
|
150
150
|
`:n.length>0?`
|
|
151
|
-
`:"",
|
|
152
|
-
`;
|
|
151
|
+
`:"",s=n+o+r+`
|
|
152
|
+
`;ts(or,{recursive:!0}),Zr(oe,s)}async function ns(){console.log(`
|
|
153
153
|
Installing Claude-Mem Gemini CLI hooks...
|
|
154
|
-
`);let e=
|
|
155
|
-
Installation failed: ${n}`),1}}function
|
|
154
|
+
`);let e=Fe();if(!e)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let t=Le();console.log(` Using Bun runtime: ${t}`),console.log(` Worker service: ${e}`);try{let r={};for(let s of Object.keys(Ue)){let i=sc(t,e,s);r[s]=[ic(i)]}let n=Qr(),o=ac(n,r);return lc(o),0}catch(r){let n=r instanceof Error?r.message:String(r);return console.error(`
|
|
155
|
+
Installation failed: ${n}`),1}}function lc(e){rs(e),console.log(` Merged hooks into ${K}`),cc(),console.log(` Setup context injection in ${oe}`);let t=Object.keys(Ue);console.log(` Registered ${t.length} hook events:`);for(let r of t){let n=Ue[r];console.log(` ${r} \u2192 ${n}`)}console.log(`
|
|
156
156
|
Installation complete!
|
|
157
157
|
|
|
158
|
-
Hooks installed to: ${
|
|
158
|
+
Hooks installed to: ${K}
|
|
159
159
|
Using unified CLI: bun worker-service.cjs hook gemini-cli <event>
|
|
160
160
|
|
|
161
161
|
Next steps:
|
|
@@ -166,21 +166,21 @@ Next steps:
|
|
|
166
166
|
Context Injection:
|
|
167
167
|
Context from past sessions is injected via ~/.gemini/GEMINI.md
|
|
168
168
|
and automatically included in Gemini CLI conversations.
|
|
169
|
-
`)}function
|
|
169
|
+
`)}function os(){if(console.log(`
|
|
170
170
|
Uninstalling Claude-Mem Gemini CLI hooks...
|
|
171
|
-
`),!
|
|
172
|
-
Uninstallation failed: ${t}`),1}}function
|
|
171
|
+
`),!Ne(K))return console.log(" No Gemini CLI settings found \u2014 nothing to uninstall."),0;try{let e=Qr();if(!e.hooks)return console.log(" No hooks found in Gemini CLI settings \u2014 nothing to uninstall."),0;let t=0;for(let[r,n]of Object.entries(e.hooks)){let o=n.map(s=>{let i=s.hooks.filter(a=>a.name!==ft);return t+=s.hooks.length-i.length,{...s,hooks:i}}).filter(s=>s.hooks.length>0);o.length>0?e.hooks[r]=o:delete e.hooks[r]}return Object.keys(e.hooks).length===0&&delete e.hooks,uc(e,t),0}catch(e){let t=e instanceof Error?e.message:String(e);return console.error(`
|
|
172
|
+
Uninstallation failed: ${t}`),1}}function uc(e,t){if(rs(e),console.log(` Removed ${t} claude-mem hook(s) from ${K}`),Ne(oe)){let r=nr(oe,"utf-8"),n=/\n?<claude-mem-context>[\s\S]*?<\/claude-mem-context>\n?/;n.test(r)&&(r=r.replace(n,""),Zr(oe,r),console.log(` Removed context section from ${oe}`))}console.log(`
|
|
173
173
|
Uninstallation complete!
|
|
174
|
-
`),console.log("Restart Gemini CLI to apply changes.")}function
|
|
174
|
+
`),console.log("Restart Gemini CLI to apply changes.")}function ss(){if(console.log(`
|
|
175
175
|
Claude-Mem Gemini CLI Hooks Status
|
|
176
|
-
`),!
|
|
176
|
+
`),!Ne(K))return console.log("Gemini CLI settings: Not found"),console.log(` Expected at: ${K}
|
|
177
177
|
`),console.log(`No hooks installed. Run: claude-mem install --ide gemini-cli
|
|
178
|
-
`),0;let e;try{e=
|
|
178
|
+
`),0;let e;try{e=Qr()}catch(r){let n=r instanceof Error?r.message:String(r);return r instanceof Error?l.error("WORKER","Failed to read Gemini CLI settings",{path:K},r):l.error("WORKER","Failed to read Gemini CLI settings",{path:K},new Error(String(r))),console.log(`Gemini CLI settings: ${n}
|
|
179
179
|
`),0}if(!e.hooks)return console.log(`Gemini CLI settings: Found, but no hooks configured
|
|
180
180
|
`),console.log(`No hooks installed. Run: claude-mem install --ide gemini-cli
|
|
181
|
-
`),0;let t=[];for(let[r,n]of Object.entries(e.hooks))n.some(
|
|
181
|
+
`),0;let t=[];for(let[r,n]of Object.entries(e.hooks))n.some(s=>s.hooks.some(i=>i.name===ft))&&t.push(r);if(t.length===0)return console.log(`Gemini CLI settings: Found, but no claude-mem hooks
|
|
182
182
|
`),console.log(`Run: claude-mem install --ide gemini-cli
|
|
183
|
-
`),0;console.log(`Settings: ${
|
|
183
|
+
`),0;console.log(`Settings: ${K}`),console.log("Mode: Unified CLI (bun worker-service.cjs hook gemini-cli)"),console.log(`Events: ${t.length} of ${Object.keys(Ue).length} mapped`);for(let r of t){let n=Ue[r]??"unknown";console.log(` ${r} \u2192 ${n}`)}return Ne(oe)?nr(oe,"utf-8").includes("<claude-mem-context>")?console.log(`Context: Active (${oe})`):console.log("Context: GEMINI.md exists but missing claude-mem section"):console.log("Context: No GEMINI.md found"),console.log(""),0}async function dc(e,t){switch(e){case"install":return ns();case"uninstall":return os();case"status":return ss();default:return console.log(`
|
|
184
184
|
Claude-Mem Gemini CLI Integration
|
|
185
185
|
|
|
186
186
|
Usage: claude-mem gemini-cli <command>
|
|
@@ -196,36 +196,36 @@ Examples:
|
|
|
196
196
|
claude-mem gemini-cli uninstall # Remove hooks
|
|
197
197
|
|
|
198
198
|
For more info: https://docs.claude-mem.ai/usage/gemini-provider
|
|
199
|
-
`),0}}var
|
|
199
|
+
`),0}}var or,K,oe,ft,oc,Ue,tn=S(()=>{"use strict";J();gt();or=qr.join(nc(),".gemini"),K=qr.join(or,"settings.json"),oe=qr.join(or,"GEMINI.md"),ft="claude-mem",oc=1e4,Ue={SessionStart:"context",BeforeAgent:"session-init",AfterAgent:"observation",BeforeTool:"observation",AfterTool:"observation",PreCompress:"summarize",Notification:"observation"}});import pc from"path";import{existsSync as mc,readFileSync as gc,writeFileSync as rn,mkdirSync as fc}from"fs";function sr(e,t,r){let n=pc.dirname(e);fc(n,{recursive:!0});let o=`${ht}
|
|
200
200
|
${t}
|
|
201
|
-
${
|
|
201
|
+
${je}`;if(mc(e)){let s=gc(e,"utf-8"),i=s.indexOf(ht),a=s.indexOf(je);i!==-1&&a!==-1?s=s.slice(0,i)+o+s.slice(a+je.length):s=s.trimEnd()+`
|
|
202
202
|
|
|
203
|
-
`+
|
|
204
|
-
`,
|
|
203
|
+
`+o+`
|
|
204
|
+
`,rn(e,s,"utf-8")}else r?rn(e,`${r}
|
|
205
205
|
|
|
206
|
-
${
|
|
207
|
-
`,"utf-8"):
|
|
208
|
-
`,"utf-8")}var
|
|
209
|
-
`,"utf-8"),console.log(" Cleaned context from AGENTS.md"))}function
|
|
210
|
-
`+n.slice(
|
|
206
|
+
${o}
|
|
207
|
+
`,"utf-8"):rn(e,o+`
|
|
208
|
+
`,"utf-8")}var ht,je,nn=S(()=>{"use strict";ht="<claude-mem-context>",je="</claude-mem-context>"});var an={};se(an,{checkOpenCodeStatus:()=>$c,findBuiltPluginPath:()=>ls,getInstalledPluginPath:()=>St,getOpenCodeAgentsMdPath:()=>Et,getOpenCodeConfigDirectory:()=>ir,getOpenCodePluginsDirectory:()=>on,injectContextIntoAgentsMd:()=>sn,installOpenCodeIntegration:()=>kc,installOpenCodePlugin:()=>us,syncContextToAgentsMd:()=>yc,uninstallOpenCodePlugin:()=>xc});import Ce from"path";import{homedir as is}from"os";import{fileURLToPath as hc}from"url";import{existsSync as Ge,readFileSync as as,writeFileSync as Ec,mkdirSync as Sc,copyFileSync as Cc,unlinkSync as cs}from"fs";function ir(){return process.env.OPENCODE_CONFIG_DIR?process.env.OPENCODE_CONFIG_DIR:Ce.join(is(),".config","opencode")}function on(){return Ce.join(ir(),"plugins")}function Et(){return Ce.join(ir(),"AGENTS.md")}function St(){return Ce.join(on(),"claude-mem.js")}function ls(){let e=[Ce.join(process.env.CLAUDE_CONFIG_DIR||Ce.join(is(),".claude"),"plugins","marketplaces","thedotmack","dist","opencode-plugin","index.js"),Ce.join(Ce.dirname(hc(import.meta.url)),"..","..","..","dist","opencode-plugin","index.js")];for(let t of e)if(Ge(t))return t;return null}function us(){let e=ls();if(!e)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 t=on(),r=St();try{return Sc(t,{recursive:!0}),Cc(e,r),console.log(` Plugin installed to: ${r}`),l.info("OPENCODE","Plugin installed",{destination:r}),0}catch(n){let o=n instanceof Error?n.message:String(n);return console.error(`Failed to install OpenCode plugin: ${o}`),1}}function sn(e){let t=Et();try{return sr(t,e,"# Claude-Mem Memory Context"),l.info("OPENCODE","Context injected into AGENTS.md",{path:t}),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 yc(e,t){try{await vc(e,t)}catch(r){r instanceof Error?l.debug("WORKER","Worker not available during context sync",{},r):l.debug("WORKER","Worker not available during context sync",{},new Error(String(r)))}}async function wc(){let e=pt();if(!(await fetch(`http://127.0.0.1:${e}/api/readiness`)).ok)return null;let r=await fetch(`http://127.0.0.1:${e}/api/context/inject?project=opencode`);if(!r.ok)return null;let n=await r.text();return n&&n.trim()?n:null}async function vc(e,t){let r=await fetch(`http://127.0.0.1:${e}/api/context/inject?project=${encodeURIComponent(t)}`);if(!r.ok)return;let n=await r.text();n&&n.trim()&&sn(n)!==0&&l.warn("OPENCODE","Failed to inject context into AGENTS.md during sync")}function _c(e,t){t.length===0||t==="# Claude-Mem Memory Context"?(cs(e),console.log(" Removed empty AGENTS.md")):(Ec(e,t+`
|
|
209
|
+
`,"utf-8"),console.log(" Cleaned context from AGENTS.md"))}function xc(){let e=!1,t=St();if(Ge(t))try{cs(t),console.log(` Removed plugin: ${t}`)}catch(n){let o=n instanceof Error?n.message:String(n);console.error(` Failed to remove plugin: ${o}`),e=!0}let r=Et();if(Ge(r)){let n;try{n=as(r,"utf-8")}catch(i){let a=i instanceof Error?i.message:String(i);console.error(` Failed to read AGENTS.md: ${a}`),e=!0,n=""}let o=n.indexOf(ht),s=n.indexOf(je);if(o!==-1&&s!==-1){n=n.slice(0,o).trimEnd()+`
|
|
210
|
+
`+n.slice(s+je.length).trimStart();let i=n.trim();try{_c(r,i)}catch(a){let c=a instanceof Error?a.message:String(a);console.error(` Failed to clean AGENTS.md: ${c}`),e=!0}}}return e?1:0}function $c(){console.log(`
|
|
211
211
|
Claude-Mem OpenCode Integration Status
|
|
212
|
-
`);let e=
|
|
212
|
+
`);let e=ir(),t=St(),r=Et();if(console.log(`Config directory: ${e}`),console.log(` Exists: ${Ge(e)?"yes":"no"}`),console.log(""),console.log(`Plugin: ${t}`),console.log(` Installed: ${Ge(t)?"yes":"no"}`),console.log(""),console.log(`Context (AGENTS.md): ${r}`),Ge(r)){let o=as(r,"utf-8").includes(ht);console.log(" Exists: yes"),console.log(` Has claude-mem context: ${o?"yes":"no"}`)}else console.log(" Exists: no");return console.log(""),0}async function kc(){console.log(`
|
|
213
213
|
Installing Claude-Mem for OpenCode...
|
|
214
|
-
`);let e=
|
|
214
|
+
`);let e=us();if(e!==0)return e;let r=`# Memory Context from Past Sessions
|
|
215
215
|
|
|
216
216
|
*No context yet. Complete your first session and context will appear here.*
|
|
217
217
|
|
|
218
|
-
Use claude-mem search tools for manual memory queries.`,n="placeholder";try{let
|
|
218
|
+
Use claude-mem search tools for manual memory queries.`,n="placeholder";try{let s=await wc();s&&(r=s,n="existing memory")}catch(s){s instanceof Error?l.debug("WORKER","Worker not available during OpenCode install",{},s):l.debug("WORKER","Worker not available during OpenCode install",{},new Error(String(s)))}return sn(r)!==0?l.warn("OPENCODE",`Failed to inject ${n} context into AGENTS.md during install`):console.log(n==="existing memory"?" Context injected from existing memory":" Placeholder context created (worker not running)"),console.log(`
|
|
219
219
|
Installation complete!
|
|
220
220
|
|
|
221
|
-
Plugin installed to: ${
|
|
222
|
-
Context file: ${
|
|
221
|
+
Plugin installed to: ${St()}
|
|
222
|
+
Context file: ${Et()}
|
|
223
223
|
|
|
224
224
|
Next steps:
|
|
225
225
|
1. Start claude-mem worker: npx claude-mem start
|
|
226
226
|
2. Restart OpenCode to load the plugin
|
|
227
227
|
3. Memory capture is automatic from then on
|
|
228
|
-
`),0}var
|
|
228
|
+
`),0}var cn=S(()=>{"use strict";J();nn();Qt()});var dn={};se(dn,{checkWindsurfHooksStatus:()=>Ss,handleWindsurfCommand:()=>Lc,installWindsurfHooks:()=>hs,readWindsurfRegistry:()=>ur,registerWindsurfProject:()=>gs,uninstallWindsurfHooks:()=>Es,unregisterWindsurfProject:()=>fs,updateWindsurfContextForProject:()=>Mc,writeWindsurfContextFile:()=>un,writeWindsurfRegistry:()=>ln});import ee from"path";import{homedir as Ic}from"os";import{existsSync as He,readFileSync as cr,writeFileSync as Ct,unlinkSync as ps,mkdirSync as lr,renameSync as bc}from"fs";function ur(){try{return He(We)?JSON.parse(cr(We,"utf-8")):{}}catch(e){return e instanceof Error?l.error("WORKER","Failed to read registry, using empty",{file:We},e):l.error("WORKER","Failed to read registry, using empty",{file:We},new Error(String(e))),{}}}function ln(e){let t=ee.dirname(We);lr(t,{recursive:!0}),Ct(We,JSON.stringify(e,null,2))}function gs(e){let t=ur();t[e]={installedAt:new Date().toISOString()},ln(t),l.info("WINDSURF","Registered project for auto-context updates",{workspacePath:e})}function fs(e){let t=ur();t[e]&&(delete t[e],ln(t),l.info("WINDSURF","Unregistered project",{workspacePath:e}))}async function Mc(e,t,r){if(ur()[t])try{let s=await fetch(`http://127.0.0.1:${r}/api/context/inject?project=${encodeURIComponent(e)}`);if(!s.ok)return;let i=await s.text();if(!i||!i.trim())return;un(t,i),l.debug("WINDSURF","Updated context file",{projectName:e,workspacePath:t})}catch(s){s instanceof Error?l.error("WORKER","Failed to update context file",{projectName:e,workspacePath:t},s):l.error("WORKER","Failed to update context file",{projectName:e,workspacePath:t},new Error(String(s)))}}function un(e,t){let r=ee.join(e,".windsurf","rules"),n=ee.join(r,"claude-mem-context.md"),o=`${n}.tmp`;lr(r,{recursive:!0});let s=`# Memory Context from Past Sessions
|
|
229
229
|
|
|
230
230
|
The following context is from claude-mem, a persistent memory system that tracks your coding sessions.
|
|
231
231
|
|
|
@@ -233,16 +233,16 @@ ${t}
|
|
|
233
233
|
|
|
234
234
|
---
|
|
235
235
|
*Auto-updated by claude-mem after each session. Use MCP search tools for detailed queries.*
|
|
236
|
-
`;
|
|
236
|
+
`;s.length>ds&&(s=s.slice(0,ds-50)+`
|
|
237
237
|
|
|
238
238
|
*[Truncated \u2014 use MCP search for full history]*
|
|
239
|
-
`),
|
|
239
|
+
`),Ct(o,s),bc(o,n)}function Ac(e,t,r){let o={pre_user_prompt:"session-init",post_write_code:"file-edit",post_run_command:"observation",post_mcp_tool_use:"observation",post_cascade_response:"observation"}[r]??"observation";return`"${e}" "${t}" hook windsurf ${o}`}function Tc(e,t,r){lr(ms,{recursive:!0});let n={hooks:{}};if(He(L))try{n=JSON.parse(cr(L,"utf-8")),n.hooks||(n.hooks={})}catch(o){throw o instanceof Error?l.error("WORKER","Corrupt hooks.json, refusing to overwrite",{path:L},o):l.error("WORKER","Corrupt hooks.json, refusing to overwrite",{path:L},new Error(String(o))),new Error(`Corrupt hooks.json at ${L}, refusing to overwrite`)}for(let o of ar){let i={command:Ac(e,t,o),show_output:!1,working_directory:r},a=(n.hooks[o]??[]).filter(c=>!c.command.includes("worker-service")||!c.command.includes("windsurf"));n.hooks[o]=[...a,i]}Ct(L,JSON.stringify(n,null,2))}async function hs(){console.log(`
|
|
240
240
|
Installing Claude-Mem Windsurf hooks (user level)...
|
|
241
|
-
`);let e=
|
|
242
|
-
Installation failed: ${
|
|
241
|
+
`);let e=Fe();if(!e)return console.error("Could not find worker-service.cjs"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/worker-service.cjs"),1;let t=Le();if(!t)return console.error("Could not find Bun runtime"),console.error(" Install Bun: curl -fsSL https://bun.sh/install | bash"),1;let r=ee.dirname(e);console.log(` Using Bun runtime: ${t}`),console.log(` Worker service: ${e}`);let n=process.cwd();try{return await Rc(t,e,r,n),0}catch(o){let s=o instanceof Error?o.message:String(o);return console.error(`
|
|
242
|
+
Installation failed: ${s}`),1}}async function Rc(e,t,r,n){Tc(e,t,r),console.log(" Created/merged hooks.json"),await Pc(n),console.log(`
|
|
243
243
|
Installation complete!
|
|
244
244
|
|
|
245
|
-
Hooks installed to: ${
|
|
245
|
+
Hooks installed to: ${L}
|
|
246
246
|
Using unified CLI: bun worker-service.cjs hook windsurf <command>
|
|
247
247
|
|
|
248
248
|
Events registered:
|
|
@@ -256,21 +256,21 @@ Next steps:
|
|
|
256
256
|
1. Start claude-mem worker: claude-mem start
|
|
257
257
|
2. Restart Windsurf to load the hooks
|
|
258
258
|
3. Context is injected via .windsurf/rules/claude-mem-context.md (workspace-level)
|
|
259
|
-
`)}async function
|
|
259
|
+
`)}async function Pc(e){let t=pt(),r=ee.basename(e),n=!1;console.log(" Generating initial context...");try{n=await Dc(t,r,e)}catch(o){o instanceof Error?l.debug("WORKER","Worker not running during install",{},o):l.debug("WORKER","Worker not running during install",{},new Error(String(o)))}if(!n){let o=ee.join(e,".windsurf","rules");lr(o,{recursive:!0});let s=ee.join(o,"claude-mem-context.md");Ct(s,`# Memory Context from Past Sessions
|
|
260
260
|
|
|
261
261
|
*No context yet. Complete your first session and context will appear here.*
|
|
262
262
|
|
|
263
263
|
Use claude-mem's MCP search tools for manual memory queries.
|
|
264
|
-
`),console.log(" Created placeholder context file (will populate after first session)")}
|
|
264
|
+
`),console.log(" Created placeholder context file (will populate after first session)")}gs(e),console.log(" Registered for auto-context updates")}async function Dc(e,t,r){if(!(await fetch(`http://127.0.0.1:${e}/api/readiness`)).ok)return!1;let o=await fetch(`http://127.0.0.1:${e}/api/context/inject?project=${encodeURIComponent(t)}`);if(!o.ok)return!1;let s=await o.text();return s&&s.trim()?(un(r,s),console.log(" Generated initial context from existing memory"),!0):!1}function Es(){if(console.log(`
|
|
265
265
|
Uninstalling Claude-Mem Windsurf hooks...
|
|
266
|
-
`),
|
|
267
|
-
Uninstallation failed: ${r}`),1}}function
|
|
266
|
+
`),He(L))try{Oc()}catch(t){t instanceof Error?l.error("WORKER","Could not parse hooks.json during uninstall",{path:L},t):l.error("WORKER","Could not parse hooks.json during uninstall",{path:L},new Error(String(t))),console.log(" Warning: could not parse hooks.json \u2014 leaving file intact to preserve other hooks")}else console.log(" No hooks.json found");let e=process.cwd();try{return Fc(e),0}catch(t){let r=t instanceof Error?t.message:String(t);return console.error(`
|
|
267
|
+
Uninstallation failed: ${r}`),1}}function Oc(){let t={hooks:JSON.parse(cr(L,"utf-8")).hooks??{}};for(let r of ar){let n=t.hooks[r]??[];n.length>0&&(t.hooks[r]=n.filter(o=>!o.command.includes("worker-service")||!o.command.includes("windsurf")),t.hooks[r].length===0&&delete t.hooks[r])}Object.keys(t.hooks).length===0?(ps(L),console.log(" Removed hooks.json (no hooks remaining)")):(Ct(L,JSON.stringify(t,null,2)),console.log(" Removed claude-mem entries from hooks.json (other hooks preserved)"))}function Fc(e){let t=ee.join(e,".windsurf","rules","claude-mem-context.md");He(t)&&(ps(t),console.log(" Removed context file")),fs(e),console.log(" Unregistered from auto-context updates"),console.log(`
|
|
268
268
|
Uninstallation complete!
|
|
269
|
-
`),console.log("Restart Windsurf to apply changes.")}function
|
|
269
|
+
`),console.log("Restart Windsurf to apply changes.")}function Ss(){if(console.log(`
|
|
270
270
|
Claude-Mem Windsurf Hooks Status
|
|
271
|
-
`),
|
|
271
|
+
`),He(L)){console.log("User-level: Installed"),console.log(` Config: ${L}`);let e=null;try{e=JSON.parse(cr(L,"utf-8"))}catch(r){let n=r instanceof Error?r:new Error(String(r));l.error("WORKER","Unable to parse hooks.json",{path:L},n),console.log(" Mode: Unable to parse hooks.json")}if(e){let r=ar.filter(n=>(e?.hooks?.[n]??[]).some(o=>o.command.includes("worker-service")&&o.command.includes("windsurf")));console.log(` Events: ${r.length}/${ar.length} registered`);for(let n of r)console.log(` - ${n}`)}let t=ee.join(process.cwd(),".windsurf","rules","claude-mem-context.md");He(t)?console.log(" Context: Active (current workspace)"):console.log(" Context: Not yet generated for this workspace")}else console.log("User-level: Not installed"),console.log(`
|
|
272
272
|
No hooks installed. Run: claude-mem windsurf install
|
|
273
|
-
`);return console.log(""),0}async function
|
|
273
|
+
`);return console.log(""),0}async function Lc(e,t){switch(e){case"install":return hs();case"uninstall":return Es();case"status":return Ss();default:return console.log(`
|
|
274
274
|
Claude-Mem Windsurf Integration
|
|
275
275
|
|
|
276
276
|
Usage: claude-mem windsurf <command>
|
|
@@ -286,33 +286,33 @@ Examples:
|
|
|
286
286
|
claude-mem windsurf status # Check if hooks are installed
|
|
287
287
|
|
|
288
288
|
For more info: https://docs.claude-mem.ai/windsurf
|
|
289
|
-
`),0}}var
|
|
290
|
-
`,"utf-8")}function
|
|
291
|
-
`,"utf-8")
|
|
289
|
+
`),0}}var ms,L,ds,We,ar,pn=S(()=>{"use strict";J();Qt();dt();gt();ms=ee.join(Ic(),".codeium","windsurf"),L=ee.join(ms,"hooks.json"),ds=6e3,We=ee.join(Y,"windsurf-projects.json"),ar=["pre_user_prompt","post_write_code","post_run_command","post_mcp_tool_use","post_cascade_response"]});var fn={};se(fn,{checkOpenClawStatus:()=>Bc,findPluginManifestPath:()=>_s,findPluginSkillsDirectory:()=>xs,findPreBuiltPluginDirectory:()=>vs,getOpenClawClaudeMemExtensionDirectory:()=>wt,getOpenClawConfigDirectory:()=>yt,getOpenClawConfigFilePath:()=>Be,getOpenClawExtensionsDirectory:()=>ws,installOpenClawIntegration:()=>Kc,installOpenClawPlugin:()=>ks,uninstallOpenClawPlugin:()=>Hc});import D from"path";import{homedir as dr}from"os";import{existsSync as ce,readFileSync as Nc,writeFileSync as Cs,mkdirSync as ys,cpSync as mn,rmSync as Uc}from"fs";function yt(){return D.join(dr(),".openclaw")}function ws(){return D.join(yt(),"extensions")}function wt(){return D.join(ws(),"claude-mem")}function Be(){return D.join(yt(),"openclaw.json")}function vs(){let e=[D.join(process.env.CLAUDE_CONFIG_DIR||D.join(dr(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let t of e){let r=D.join(t,"openclaw","dist"),n=D.join(r,"index.js");if(ce(n))return r}return null}function _s(){let e=[D.join(process.env.CLAUDE_CONFIG_DIR||D.join(dr(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let t of e){let r=D.join(t,"openclaw","openclaw.plugin.json");if(ce(r))return r}return null}function xs(){let e=[D.join(process.env.CLAUDE_CONFIG_DIR||D.join(dr(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let t of e){let r=D.join(t,"openclaw","skills");if(ce(r))return r}return null}function gn(){let e=Be();if(!ce(e))return{};try{return JSON.parse(Nc(e,"utf-8"))}catch(t){let r=t instanceof Error?t:new Error(String(t));throw l.error("WORKER","Failed to parse openclaw.json",{path:e},r),r}}function $s(e){let t=yt();ys(t,{recursive:!0}),Cs(Be(),JSON.stringify(e,null,2)+`
|
|
290
|
+
`,"utf-8")}function jc(e,t="openclaw",r=!0){let n=gn();if(n.plugins||(n.plugins={}),n.plugins.slots||(n.plugins.slots={}),n.plugins.entries||(n.plugins.entries={}),n.plugins.slots.memory="claude-mem",!n.plugins.entries["claude-mem"])n.plugins.entries["claude-mem"]={enabled:!0,config:{workerPort:e,project:t,syncMemoryFile:r}};else{n.plugins.entries["claude-mem"].enabled=!0,n.plugins.entries["claude-mem"].config||(n.plugins.entries["claude-mem"].config={});let o=n.plugins.entries["claude-mem"].config;o.workerPort===void 0&&(o.workerPort=e),o.project===void 0&&(o.project=t),o.syncMemoryFile===void 0&&(o.syncMemoryFile=r)}$s(n)}function Gc(){let e=Be();if(!ce(e))return;let t=gn();t.plugins?.entries?.["claude-mem"]&&delete t.plugins.entries["claude-mem"],t.plugins?.slots?.memory==="claude-mem"&&delete t.plugins.slots.memory,$s(t)}function ks(){let e=vs();if(!e)return console.error("Could not find pre-built OpenClaw plugin bundle."),console.error(" Expected at: openclaw/dist/index.js"),console.error(" Ensure the npm package includes the openclaw directory."),1;let t=wt(),r=D.join(t,"dist"),n=_s(),o=xs(),s={name:"claude-mem",version:"1.0.0",type:"module",main:"dist/index.js",openclaw:{extensions:["./dist/index.js"]}};try{return ys(r,{recursive:!0}),Wc(e,r,t,n,o,s),0}catch(i){let a=i instanceof Error?i.message:String(i);return console.error(`Failed to install OpenClaw plugin: ${a}`),1}}function Wc(e,t,r,n,o,s){if(mn(e,t,{recursive:!0,force:!0}),console.log(` Plugin dist copied to: ${t}`),n){let a=D.join(r,"openclaw.plugin.json");mn(n,a,{force:!0}),console.log(` Plugin manifest copied to: ${a}`)}if(o){let a=D.join(r,"skills");mn(o,a,{recursive:!0,force:!0}),console.log(` Skills copied to: ${a}`)}Cs(D.join(r,"package.json"),JSON.stringify(s,null,2)+`
|
|
291
|
+
`,"utf-8");let i=F.getInt("CLAUDE_MEM_WORKER_PORT");jc(i),console.log(" Registered in openclaw.json"),l.info("OPENCLAW","Plugin installed",{destination:r})}function Hc(){let e=!1,t=wt();if(ce(t))try{Uc(t,{recursive:!0,force:!0}),console.log(` Removed extension: ${t}`)}catch(r){let n=r instanceof Error?r.message:String(r);console.error(` Failed to remove extension directory: ${n}`),e=!0}try{Gc(),console.log(" Unregistered from openclaw.json")}catch(r){let n=r instanceof Error?r.message:String(r);console.error(` Failed to update openclaw.json: ${n}`),e=!0}return e?1:0}function Bc(){console.log(`
|
|
292
292
|
Claude-Mem OpenClaw Integration Status
|
|
293
|
-
`);let e=
|
|
293
|
+
`);let e=yt(),t=wt(),r=Be(),n=D.join(t,"dist","index.js");if(console.log(`Config directory: ${e}`),console.log(` Exists: ${ce(e)?"yes":"no"}`),console.log(""),console.log(`Extension directory: ${t}`),console.log(` Exists: ${ce(t)?"yes":"no"}`),console.log(` Plugin entry: ${ce(n)?"yes":"no"}`),console.log(""),console.log(`Config (openclaw.json): ${r}`),ce(r)){let o=gn(),s=o.plugins?.entries?.["claude-mem"]!==void 0,i=o.plugins?.entries?.["claude-mem"]?.enabled===!0,a=o.plugins?.slots?.memory==="claude-mem";if(console.log(" Exists: yes"),console.log(` Registered: ${s?"yes":"no"}`),console.log(` Enabled: ${i?"yes":"no"}`),console.log(` Memory slot: ${a?"yes":"no"}`),s){let c=o.plugins.entries["claude-mem"].config;c&&(console.log(` Worker port: ${c.workerPort??"default"}`),console.log(` Project: ${c.project??"default"}`),console.log(` Sync MEMORY.md: ${c.syncMemoryFile??"default"}`))}}else console.log(" Exists: no");return console.log(""),0}async function Kc(){console.log(`
|
|
294
294
|
Installing Claude-Mem for OpenClaw...
|
|
295
|
-
`);let e=
|
|
295
|
+
`);let e=ks();if(e!==0)return e;let t=wt();return console.log(`
|
|
296
296
|
Installation complete!
|
|
297
297
|
|
|
298
298
|
Plugin installed to: ${t}
|
|
299
|
-
Config updated: ${
|
|
299
|
+
Config updated: ${Be()}
|
|
300
300
|
|
|
301
301
|
Next steps:
|
|
302
302
|
1. Start claude-mem worker: npx claude-mem start
|
|
303
303
|
2. Restart OpenClaw to load the plugin
|
|
304
304
|
3. Memory capture is automatic from then on
|
|
305
|
-
`),0}var
|
|
306
|
-
`)}function
|
|
305
|
+
`),0}var hn=S(()=>{"use strict";J();ke()});import{existsSync as Em,readFileSync as Sm,writeFileSync as Cm,mkdirSync as ym}from"fs";import{homedir as Is}from"os";import{join as bs,dirname as _m}from"path";var Ie,vt,Vc,pr,Ms=S(()=>{"use strict";Ie=bs(Is(),".claude-mem","transcript-watch.json"),vt=bs(Is(),".claude-mem","transcript-watch-state.json"),Vc={name:"codex",version:"0.3",description:"Schema for Codex session JSONL files under ~/.codex/sessions.",events:[{name:"session-meta",match:{path:"type",equals:"session_meta"},action:"session_context",fields:{sessionId:"payload.id",cwd:"payload.cwd"}},{name:"turn-context",match:{path:"type",equals:"turn_context"},action:"session_context",fields:{cwd:"payload.cwd"}},{name:"user-message",match:{path:"payload.type",equals:"user_message"},action:"session_init",fields:{prompt:"payload.message"}},{name:"assistant-message",match:{path:"payload.type",equals:"agent_message"},action:"assistant_message",fields:{message:"payload.message"}},{name:"tool-use",match:{path:"payload.type",in:["function_call","custom_tool_call","web_search_call","exec_command"]},action:"tool_use",fields:{toolId:"payload.call_id",toolName:{coalesce:["payload.name","payload.type",{value:"web_search"}]},toolInput:{coalesce:["payload.arguments","payload.input","payload.command","payload.action"]}}},{name:"tool-result",match:{path:"payload.type",in:["function_call_output","custom_tool_call_output","exec_command_output"]},action:"tool_result",fields:{toolId:"payload.call_id",toolResponse:"payload.output"}},{name:"session-end",match:{path:"payload.type",in:["turn_aborted","turn_completed"]},action:"session_end"}]},pr={version:1,schemas:{codex:Vc},watches:[{name:"codex",path:"~/.codex/sessions/**/*.jsonl",schema:"codex",startAtEnd:!0,context:{mode:"agents",updateOn:["session_start","session_end"]}}],stateFile:vt}});var yn={};se(yn,{installCodexCli:()=>Qc,uninstallCodexCli:()=>tl});import Sn from"path";import{homedir as As}from"os";import{existsSync as Cn,readFileSync as En,writeFileSync as mr,mkdirSync as Jc}from"fs";function Ts(){let e=Ie;if(!Cn(e))return{version:1,schemas:{},watches:[],stateFile:vt};try{let t=En(e,"utf-8"),r=JSON.parse(t);return r.version||(r.version=1),r.watches||(r.watches=[]),r.schemas||(r.schemas={}),r.stateFile||(r.stateFile=vt),r}catch(t){t instanceof Error?l.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:e},t):l.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:e},new Error(String(t)));let r=`${e}.backup.${Date.now()}`;return mr(r,En(e)),console.warn(` Backed up corrupt transcript-watch.json to ${r}`),{version:1,schemas:{},watches:[],stateFile:vt}}}function zc(e){let t={...e};t.schemas={...t.schemas};let r=pr.schemas?.[Ke];r&&(t.schemas[Ke]=r);let n=pr.watches.find(o=>o.name===Ke);if(n){let o=t.watches.findIndex(s=>s.name===Ke);o!==-1?t.watches[o]=n:t.watches.push(n)}return t}function Rs(e){Jc(Xc,{recursive:!0}),mr(Ie,JSON.stringify(e,null,2)+`
|
|
306
|
+
`)}function qc(){if(!Cn(_t))return;let e="<claude-mem-context>",t="</claude-mem-context>";try{Zc(e,t)}catch(r){let n=r instanceof Error?r.message:String(r);l.warn("WORKER","Failed to clean AGENTS.md context",{error:n})}}function Zc(e,t){let r=En(_t,"utf-8"),n=r.indexOf(e),o=r.indexOf(t);if(n===-1||o===-1)return;let s=r.substring(0,n).replace(/\n+$/,""),i=r.substring(o+t.length).replace(/^\n+/,""),a=(s+(i?`
|
|
307
307
|
|
|
308
|
-
`+i:"")).trim();a?
|
|
309
|
-
`):
|
|
308
|
+
`+i:"")).trim();a?mr(_t,a+`
|
|
309
|
+
`):mr(_t,""),console.log(` Removed legacy global context from ${_t}`)}async function Qc(){console.log(`
|
|
310
310
|
Installing Claude-Mem for Codex CLI (transcript watching)...
|
|
311
|
-
`);let e
|
|
312
|
-
Installation failed: ${n}`),1}}function
|
|
311
|
+
`);let e=Ts(),t=zc(e);try{return el(t),0}catch(r){let n=r instanceof Error?r.message:String(r);return console.error(`
|
|
312
|
+
Installation failed: ${n}`),1}}function el(e){Rs(e),console.log(` Updated ${Ie}`),console.log(" Watch path: ~/.codex/sessions/**/*.jsonl"),console.log(` Schema: codex (v${pr.schemas?.codex?.version??"?"})`),Ps(),console.log(`
|
|
313
313
|
Installation complete!
|
|
314
314
|
|
|
315
|
-
Transcript watch config: ${
|
|
315
|
+
Transcript watch config: ${Ie}
|
|
316
316
|
Context files: <workspace>/AGENTS.md
|
|
317
317
|
|
|
318
318
|
How it works:
|
|
@@ -323,30 +323,30 @@ How it works:
|
|
|
323
323
|
Next steps:
|
|
324
324
|
1. Start claude-mem worker: npx claude-mem start
|
|
325
325
|
2. Use Codex CLI as usual -- memory capture is automatic!
|
|
326
|
-
`)}function
|
|
326
|
+
`)}function tl(){if(console.log(`
|
|
327
327
|
Uninstalling Claude-Mem Codex CLI integration...
|
|
328
|
-
`),
|
|
329
|
-
Uninstallation failed: ${r}`),1}}else console.log(" No transcript-watch.json found -- nothing to remove.");return
|
|
328
|
+
`),Cn(Ie)){let e=Ts();e.watches=e.watches.filter(t=>t.name!==Ke),e.schemas&&delete e.schemas[Ke];try{Rs(e),console.log(` Removed codex watch from ${Ie}`)}catch(t){let r=t instanceof Error?t.message:String(t);return console.error(`
|
|
329
|
+
Uninstallation failed: ${r}`),1}}else console.log(" No transcript-watch.json found -- nothing to remove.");return Ps(),console.log(`
|
|
330
330
|
Uninstallation complete!`),console.log(`Restart claude-mem worker to apply changes.
|
|
331
|
-
`),0}var
|
|
332
|
-
`)}function
|
|
331
|
+
`),0}var Yc,_t,Xc,Ke,Ps,wn=S(()=>{"use strict";J();Ms();Yc=Sn.join(As(),".codex"),_t=Sn.join(Yc,"AGENTS.md"),Xc=Sn.join(As(),".claude-mem"),Ke="codex";Ps=qc});var Us={};se(Us,{MCP_IDE_INSTALLERS:()=>fl,installGooseMcpIntegration:()=>Ns});import z from"path";import{homedir as kt}from"os";import{existsSync as Fs,readFileSync as rl,writeFileSync as $t,mkdirSync as Ls}from"fs";function ol(e){return{command:process.execPath,args:[e]}}function sl(e,t,r="mcpServers"){let n=z.dirname(e);Ls(n,{recursive:!0});let o=te(e,{});o[r]||(o[r]={}),o[r]["claude-mem"]=ol(t),$t(e,JSON.stringify(o,null,2)+`
|
|
332
|
+
`)}function xt(e){return async()=>{console.log(`
|
|
333
333
|
Installing Claude-Mem MCP integration for ${e.ideLabel}...
|
|
334
|
-
`);let t=
|
|
335
|
-
Installation failed: ${i}`),1}}}function
|
|
334
|
+
`);let t=mt();if(!t)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let r=e.configPath,n=e.ideId==="warp"&&!Fs(z.dirname(r)),o;e.contextFile&&(o=e.contextFile.path);try{return il(e,r,t,n,o),0}catch(s){let i=s instanceof Error?s.message:String(s);return console.error(`
|
|
335
|
+
Installation failed: ${i}`),1}}}function il(e,t,r,n,o){n?console.log(" Note: ~/.warp/ not found. MCP may need to be configured via Warp Drive UI."):(sl(t,r,e.configKey),console.log(` MCP config written to: ${t}`)),o&&(sr(o,nl),console.log(` Context placeholder written to: ${o}`));let s=[`
|
|
336
336
|
Installation complete!
|
|
337
|
-
`];
|
|
338
|
-
`))}function
|
|
339
|
-
`)}function
|
|
340
|
-
`)}async function
|
|
337
|
+
`];s.push(`MCP config: ${t}`),o&&s.push(`Context: ${o}`),s.push(""),s.push("Note: This is an MCP-only integration providing search tools and context."),s.push(`Transcript capture is not available for ${e.ideLabel}.`),e.ideId==="warp"&&s.push("If MCP config via file is not supported, configure MCP through Warp Drive UI."),s.push(""),s.push("Next steps:"),s.push(" 1. Start claude-mem worker: npx claude-mem start"),s.push(` 2. Restart ${e.ideLabel} to pick up the MCP server`),s.push(""),console.log(s.join(`
|
|
338
|
+
`))}function pl(){return z.join(kt(),".config","goose","config.yaml")}function ml(e){return e.includes("claude-mem:")&&e.includes("mcpServers:")}function Ds(e){return["mcpServers:"," claude-mem:",` command: ${process.execPath}`," args:",` - ${e}`].join(`
|
|
339
|
+
`)}function Os(e){return[" claude-mem:",` command: ${process.execPath}`," args:",` - ${e}`].join(`
|
|
340
|
+
`)}async function Ns(){console.log(`
|
|
341
341
|
Installing Claude-Mem MCP integration for Goose...
|
|
342
|
-
`);let e=
|
|
343
|
-
Installation failed: ${
|
|
344
|
-
`;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,
|
|
345
|
-
`+
|
|
346
|
-
`+
|
|
342
|
+
`);let e=mt();if(!e)return console.error("Could not find MCP server script"),console.error(" Expected at: ~/.claude/plugins/marketplaces/thedotmack/plugin/scripts/mcp-server.cjs"),1;let t=pl(),r=z.dirname(t);try{return Ls(r,{recursive:!0}),gl(t,e),0}catch(n){let o=n instanceof Error?n.message:String(n);return console.error(`
|
|
343
|
+
Installation failed: ${o}`),1}}function gl(e,t){if(Fs(e)){let r=rl(e,"utf-8");if(ml(r)){let n=/( {2}claude-mem:\n(?:.*\n)*?(?= {2}\S|\n\n|^\S|$))/m,o=Os(t)+`
|
|
344
|
+
`;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,o),$t(e,r),console.log(` Updated existing claude-mem entry in: ${e}`)}else if(r.includes("mcpServers:")){let o=r.indexOf("mcpServers:")+11,s=`
|
|
345
|
+
`+Os(t);r=r.slice(0,o)+s+r.slice(o),$t(e,r),console.log(` Added claude-mem to existing mcpServers in: ${e}`)}else{let n=`
|
|
346
|
+
`+Ds(t)+`
|
|
347
347
|
`;r=r.trimEnd()+`
|
|
348
|
-
`+n
|
|
349
|
-
|
|
348
|
+
`+n,$t(e,r),console.log(` Appended mcpServers section to: ${e}`)}}else{let r=Ds(t)+`
|
|
349
|
+
`;$t(e,r),console.log(` Created config with MCP server: ${e}`)}console.log(`
|
|
350
350
|
Installation complete!
|
|
351
351
|
|
|
352
352
|
MCP config: ${e}
|
|
@@ -357,18 +357,20 @@ Transcript capture is not available for Goose.
|
|
|
357
357
|
Next steps:
|
|
358
358
|
1. Start claude-mem worker: npx claude-mem start
|
|
359
359
|
2. Restart Goose to pick up the MCP server
|
|
360
|
-
`)}var
|
|
360
|
+
`)}var nl,al,cl,ll,ul,dl,fl,js=S(()=>{"use strict";gt();ze();nn();nl=`# claude-mem: Cross-Session Memory
|
|
361
361
|
|
|
362
362
|
*No context yet. Complete your first session and context will appear here.*
|
|
363
363
|
|
|
364
|
-
Use claude-mem's MCP search tools for manual memory queries.`;
|
|
364
|
+
Use claude-mem's MCP search tools for manual memory queries.`;al={ideId:"copilot-cli",ideLabel:"Copilot CLI",configPath:z.join(kt(),".github","copilot","mcp.json"),configKey:"servers",contextFile:{path:z.join(process.cwd(),".github","copilot-instructions.md"),isWorkspaceRelative:!0}},cl={ideId:"antigravity",ideLabel:"Antigravity",configPath:z.join(kt(),".gemini","antigravity","mcp_config.json"),configKey:"mcpServers",contextFile:{path:z.join(process.cwd(),".agents","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},ll={ideId:"crush",ideLabel:"Crush",configPath:z.join(kt(),".config","crush","mcp.json"),configKey:"mcpServers"},ul={ideId:"roo-code",ideLabel:"Roo Code",configPath:z.join(process.cwd(),".roo","mcp.json"),configKey:"mcpServers",contextFile:{path:z.join(process.cwd(),".roo","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},dl={ideId:"warp",ideLabel:"Warp",configPath:z.join(kt(),".warp","mcp.json"),configKey:"mcpServers",contextFile:{path:z.join(process.cwd(),"WARP.md"),isWorkspaceRelative:!0}};fl={"copilot-cli":xt(al),antigravity:xt(cl),goose:Ns,crush:xt(ll),"roo-code":xt(ul),warp:xt(dl)}});var gr={};se(gr,{runInstallCommand:()=>Il});import{execSync as vn}from"child_process";import{cpSync as Gs,existsSync as It,readFileSync as hl,rmSync as Ws}from"fs";import{join as Ve}from"path";async function El(e){if(ye)await Ht(e);else for(let t of e){let r=await t.task(n=>console.log(` ${n}`));console.log(` ${r}`)}}function Sl(){let e=te(Te(),{});e.thedotmack={source:{source:"github",repo:"thedotmack/claude-mem"},installLocation:W(),lastUpdated:new Date().toISOString(),autoUpdate:!0},Qe(_e()),he(Te(),e)}function Cl(e){let t=te(Re(),{});t.version||(t.version=2),t.plugins||(t.plugins={});let r=yr(e),n=new Date().toISOString();t.plugins["claude-mem@thedotmack"]=[{scope:"user",installPath:r,version:e,installedAt:n,lastUpdated:n}],he(Re(),t)}function yl(){let e=te(Pe(),{});e.enabledPlugins||(e.enabledPlugins={}),e.enabledPlugins["claude-mem@thedotmack"]=!0,he(Pe(),e)}async function wl(e){let t=[];for(let r of e)switch(r){case"claude-code":{try{vn("claude plugin marketplace add thedotmack/claude-mem && claude plugin install claude-mem",{stdio:"inherit"}),v.success("Claude Code: plugin installed via CLI.")}catch(n){console.error("[install] Claude Code plugin install error:",n instanceof Error?n.message:String(n)),v.error("Claude Code: plugin install failed. Is `claude` CLI on your PATH?"),t.push(r)}break}case"cursor":{let{installCursorHooks:n,configureCursorMcp:o}=await Promise.resolve().then(()=>(gt(),es));await n("user")===0?o("user")===0?v.success("Cursor: hooks + MCP installed."):v.success("Cursor: hooks installed (MCP setup failed \u2014 run `npx claude-mem cursor mcp` to retry)."):(v.error("Cursor: hook installation failed."),t.push(r));break}case"gemini-cli":{let{installGeminiCliHooks:n}=await Promise.resolve().then(()=>(tn(),en));await n()===0?v.success("Gemini CLI: hooks installed."):(v.error("Gemini CLI: hook installation failed."),t.push(r));break}case"opencode":{let{installOpenCodeIntegration:n}=await Promise.resolve().then(()=>(cn(),an));await n()===0?v.success("OpenCode: plugin installed."):(v.error("OpenCode: plugin installation failed."),t.push(r));break}case"windsurf":{let{installWindsurfHooks:n}=await Promise.resolve().then(()=>(pn(),dn));await n()===0?v.success("Windsurf: hooks installed."):(v.error("Windsurf: hook installation failed."),t.push(r));break}case"openclaw":{let{installOpenClawIntegration:n}=await Promise.resolve().then(()=>(hn(),fn));await n()===0?v.success("OpenClaw: plugin installed."):(v.error("OpenClaw: plugin installation failed."),t.push(r));break}case"codex-cli":{let{installCodexCli:n}=await Promise.resolve().then(()=>(wn(),yn));await n()===0?v.success("Codex CLI: transcript watching configured."):(v.error("Codex CLI: integration setup failed."),t.push(r));break}case"copilot-cli":case"antigravity":case"goose":case"crush":case"roo-code":case"warp":{let{MCP_IDE_INSTALLERS:n}=await Promise.resolve().then(()=>(js(),Us)),o=n[r];if(o){let s=await o(),c=lt().find(u=>u.id===r)?.label??r;s===0?v.success(`${c}: MCP integration installed.`):(v.error(`${c}: MCP integration failed.`),t.push(r))}break}default:{let o=lt().find(s=>s.id===r);o&&!o.supported&&v.warn(`Support for ${o.label} coming soon.`);break}}return t}async function vl(){let t=lt().filter(o=>o.detected);if(t.length===0)return v.warn("No supported IDEs detected. Installing for Claude Code by default."),["claude-code"];let r=t.map(o=>({value:o.id,label:o.label,hint:o.supported?o.hint:"coming soon"})),n=await lo({message:"Which IDEs do you use?",options:r,initialValues:[],required:!0});return Se(n)&&(it("Installation cancelled."),process.exit(0)),n}function _l(){let e=W(),t=Rt();Qe(e);let r=["plugin","package.json","package-lock.json","node_modules","openclaw","dist","LICENSE","README.md","CHANGELOG.md"];for(let n of r){let o=Ve(t,n),s=Ve(e,n);It(o)&&(It(s)&&Ws(s,{recursive:!0,force:!0}),Gs(o,s,{recursive:!0,force:!0}))}}function xl(e){let t=wr(),r=yr(e);Ws(r,{recursive:!0,force:!0}),Qe(r),Gs(t,r,{recursive:!0,force:!0})}function $l(){let e=W(),t=Ve(e,"package.json");It(t)&&vn("npm install --production",{cwd:e,stdio:"pipe",encoding:"utf8",...me?{shell:process.env.ComSpec??"cmd.exe"}:{}})}function kl(){let e=Ve(W(),"plugin","scripts","smart-install.js");if(!It(e))return v.warn("smart-install.js not found \u2014 skipping Bun/uv auto-install."),!1;try{return vn(`node "${e}"`,{stdio:"inherit",encoding:"utf8",...me?{shell:process.env.ComSpec??"cmd.exe"}:{}}),!0}catch(t){return console.warn("[install] smart-install error:",t instanceof Error?t.message:String(t)),v.warn("smart-install encountered an issue. You may need to install Bun/uv manually."),!1}}async function Il(e={}){let t=Ze();ye?Wt(I.default.bgCyan(I.default.black(" claude-mem install "))):console.log("claude-mem install"),v.info(`Version: ${I.default.cyan(t)}`),v.info(`Platform: ${process.platform} (${process.arch})`);let r=W();if(It(Ve(r,"plugin",".claude-plugin","plugin.json"))){try{let p=JSON.parse(hl(Ve(r,"plugin",".claude-plugin","plugin.json"),"utf-8"));v.warn(`Existing installation detected (v${p.version??"unknown"}).`)}catch(p){console.warn("[install] Failed to read existing plugin version:",p instanceof Error?p.message:String(p)),v.warn("Existing installation detected.")}if(process.stdin.isTTY){let p=await st({message:"Overwrite existing installation?",initialValue:!0});(Se(p)||!p)&&(it("Installation cancelled."),process.exit(0))}}let o;if(e.ide){o=[e.ide];let p=lt(),m=p.find(y=>y.id===e.ide);m&&!m.supported&&(v.error(`Support for ${m.label} coming soon.`),process.exit(1)),m||(v.error(`Unknown IDE: ${e.ide}`),v.info(`Available IDEs: ${p.map(y=>y.id).join(", ")}`),process.exit(1))}else process.stdin.isTTY?o=await vl():o=["claude-code"];if(o.some(p=>p!=="claude-code")){let p=F.get("CLAUDE_MEM_WORKER_PORT");try{(await Bt(p,1e4)).workerWasRunning&&v.info("Stopped running worker before overwrite.")}catch(m){console.warn("[install] Pre-overwrite worker shutdown failed:",m instanceof Error?m.message:String(m))}await El([{title:"Copying plugin files",task:async m=>(m("Copying to marketplace directory..."),_l(),`Plugin files copied ${I.default.green("OK")}`)},{title:"Caching plugin version",task:async m=>(m(`Caching v${t}...`),xl(t),`Plugin cached (v${t}) ${I.default.green("OK")}`)},{title:"Registering marketplace",task:async()=>(Sl(),`Marketplace registered ${I.default.green("OK")}`)},{title:"Registering plugin",task:async()=>(Cl(t),`Plugin registered ${I.default.green("OK")}`)},{title:"Enabling plugin in Claude settings",task:async()=>(yl(),`Plugin enabled ${I.default.green("OK")}`)},{title:"Installing dependencies",task:async m=>{m("Running npm install...");try{return $l(),`Dependencies installed ${I.default.green("OK")}`}catch(y){return console.warn("[install] npm install error:",y instanceof Error?y.message:String(y)),`Dependencies may need manual install ${I.default.yellow("!")}`}}},{title:"Setting up Bun and uv",task:async m=>(m("Running smart-install..."),kl()?`Runtime dependencies ready ${I.default.green("OK")}`:`Runtime setup may need attention ${I.default.yellow("!")}`)}])}let i=await wl(o),a=i.length>0?"Installation Partial":"Installation Complete",c=[`Version: ${I.default.cyan(t)}`,`Plugin dir: ${I.default.cyan(r)}`,`IDEs: ${I.default.cyan(o.join(", "))}`];i.length>0&&c.push(`Failed: ${I.default.red(i.join(", "))}`),ye?at(c.join(`
|
|
365
365
|
`),a):(console.log(`
|
|
366
|
-
${a}`),c.forEach(
|
|
367
|
-
`),"Next Steps"),i.length>0
|
|
368
|
-
Next Steps`),
|
|
366
|
+
${a}`),c.forEach(p=>console.log(` ${p}`)));let u=F.get("CLAUDE_MEM_WORKER_PORT"),g=u,f=!1;try{let p=await fetch(`http://127.0.0.1:${u}/api/health`,{signal:AbortSignal.timeout(3e3)});if(p.ok){f=!0;try{let m=await p.json();m&&(typeof m.port=="number"||typeof m.port=="string")&&(g=m.port)}catch{}}}catch{}let E=["Open Claude Code and start a conversation -- memory is automatic!",f?`Worker port: ${I.default.cyan(String(g))}`:`Worker port: ${I.default.cyan(String(u))} (worker not yet ready -- still starting up; check ${I.default.bold("claude-mem status")} later)`,`View your memories: ${I.default.underline(`http://localhost:${g}`)}`,`Search past work: use ${I.default.bold("/mem-search")} in Claude Code`,`Start worker: ${I.default.bold("npx claude-mem start")}`,`Note: Close all Claude Code sessions before uninstalling, or ${I.default.cyan("~/.claude-mem")} will be recreated by active hooks.`];ye?(at(E.join(`
|
|
367
|
+
`),"Next Steps"),i.length>0?$e(I.default.yellow("claude-mem installed with some IDE setup failures.")):$e(I.default.green("claude-mem installed successfully!"))):(console.log(`
|
|
368
|
+
Next Steps`),E.forEach(p=>console.log(` ${p}`)),i.length>0?(console.log(`
|
|
369
369
|
claude-mem installed with some IDE setup failures.`),process.exitCode=1):console.log(`
|
|
370
|
-
claude-mem installed successfully!`))}var
|
|
371
|
-
`),
|
|
370
|
+
claude-mem installed successfully!`))}var I,ye,v,fr=S(()=>{"use strict";Lr();I=Ae(Xe(),1);xe();ze();ke();Nr();Eo();ye=process.stdin.isTTY===!0;v={info:e=>ye?B.info(e):console.log(` ${e}`),success:e=>ye?B.success(e):console.log(` ${e}`),warn:e=>ye?B.warn(e):console.warn(` ${e}`),error:e=>ye?B.error(e):console.error(` ${e}`)}});var Bs={};se(Bs,{runUninstallCommand:()=>Ll});import{existsSync as be,readFileSync as bl,readdirSync as _n,rmSync as bt,writeFileSync as Ml}from"fs";import{homedir as Hs}from"os";import{join as le}from"path";function Al(){let e=W();return be(e)?(bt(e,{recursive:!0,force:!0}),!0):!1}function Tl(){let e=le(_e(),"cache","thedotmack","claude-mem");return be(e)?(bt(e,{recursive:!0,force:!0}),!0):!1}function Rl(){let e=te(Te(),{});e.thedotmack&&(delete e.thedotmack,he(Te(),e))}function Pl(){let e=te(Re(),{});e.plugins?.["claude-mem@thedotmack"]&&(delete e.plugins["claude-mem@thedotmack"],he(Re(),e))}function Dl(){let e=Hs(),t=[le(e,".bashrc"),le(e,".zshrc"),le(e,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],r=/^\s*alias\s+claude-mem\s*=/;for(let n of t){if(!be(n))continue;let o;try{o=bl(n,"utf-8")}catch(a){console.warn(`[uninstall] Could not read ${n}:`,a instanceof Error?a.message:String(a));continue}let s=o.split(`
|
|
371
|
+
`),i=s.filter(a=>!r.test(a));if(i.length!==s.length)try{Ml(n,i.join(`
|
|
372
|
+
`)),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 Ol(){let e=te(Pe(),{});e.enabledPlugins?.["claude-mem@thedotmack"]!==void 0&&(delete e.enabledPlugins["claude-mem@thedotmack"],he(Pe(),e))}function Fl(){let e=Hs(),t=0,r=le(e,".npm","_npx");if(be(r)){let s=[];try{s=_n(r)}catch(i){console.warn(`[uninstall] Could not read ${r}:`,i instanceof Error?i.message:String(i))}for(let i of s){let a=le(r,i,"node_modules","claude-mem");if(be(a))try{bt(a,{recursive:!0,force:!0}),t++}catch(c){console.warn(`[uninstall] Could not remove ${a}:`,c instanceof Error?c.message:String(c))}}}let n=le(e,".cache","claude-cli-nodejs");if(be(n)){let s=[];try{s=_n(n)}catch(i){console.warn(`[uninstall] Could not read ${n}:`,i instanceof Error?i.message:String(i))}for(let i of s){let a=le(n,i),c=[];try{c=_n(a)}catch(u){console.warn(`[uninstall] Could not read ${a}:`,u instanceof Error?u.message:String(u));continue}for(let u of c){if(!u.startsWith("mcp-logs-plugin-claude-mem-"))continue;let g=le(a,u);try{bt(g,{recursive:!0,force:!0}),t++}catch(f){console.warn(`[uninstall] Could not remove ${g}:`,f instanceof Error?f.message:String(f))}}}}let o=le(e,".claude","plugins","data","claude-mem-thedotmack");if(be(o))try{bt(o,{recursive:!0,force:!0}),t++}catch(s){console.warn(`[uninstall] Could not remove ${o}:`,s instanceof Error?s.message:String(s))}return t}async function Ll(){if(Wt(V.default.bgRed(V.default.white(" claude-mem uninstall "))),Pt()){if(process.stdin.isTTY){let r=await st({message:"Are you sure you want to uninstall claude-mem?",initialValue:!1});if(Se(r)||!r){it("Uninstall cancelled.");return}}}else if(B.warn("claude-mem does not appear to be installed."),process.stdin.isTTY){let r=await st({message:"Clean up any remaining registration data anyway?",initialValue:!1});if(Se(r)||!r){$e("Nothing to do.");return}}else{$e("Nothing to do.");return}let e=F.get("CLAUDE_MEM_WORKER_PORT");try{(await Bt(e,1e4)).workerWasRunning&&B.info("Worker service stopped.")}catch(r){console.warn("[uninstall] Worker shutdown attempt failed:",r instanceof Error?r.message:String(r))}await Ht([{title:"Removing marketplace directory",task:async()=>Al()?`Marketplace directory removed ${V.default.green("OK")}`:`Marketplace directory not found ${V.default.dim("skipped")}`},{title:"Removing cache directory",task:async()=>Tl()?`Cache directory removed ${V.default.green("OK")}`:`Cache directory not found ${V.default.dim("skipped")}`},{title:"Removing marketplace registration",task:async()=>(Rl(),`Marketplace registration removed ${V.default.green("OK")}`)},{title:"Removing plugin registration",task:async()=>(Pl(),`Plugin registration removed ${V.default.green("OK")}`)},{title:"Removing from Claude settings",task:async()=>(Ol(),`Claude settings updated ${V.default.green("OK")}`)},{title:"Removing legacy claude-mem shell alias",task:async()=>(Dl(),`Legacy alias check complete ${V.default.green("OK")}`)},{title:"Removing stray claude-mem caches and logs",task:async()=>{let r=Fl();return r>0?`Stray paths removed: ${r} ${V.default.green("OK")}`:`No stray paths found ${V.default.dim("skipped")}`}}]);let t=[{label:"Gemini CLI hooks",fn:async()=>{let{uninstallGeminiCliHooks:r}=await Promise.resolve().then(()=>(tn(),en));return r()}},{label:"Windsurf hooks",fn:async()=>{let{uninstallWindsurfHooks:r}=await Promise.resolve().then(()=>(pn(),dn));return r()}},{label:"OpenCode plugin",fn:async()=>{let{uninstallOpenCodePlugin:r}=await Promise.resolve().then(()=>(cn(),an));return r()}},{label:"OpenClaw plugin",fn:async()=>{let{uninstallOpenClawPlugin:r}=await Promise.resolve().then(()=>(hn(),fn));return r()}},{label:"Codex CLI",fn:async()=>{let{uninstallCodexCli:r}=await Promise.resolve().then(()=>(wn(),yn));return r()}}];for(let{label:r,fn:n}of t)try{await n()===0&&B.info(`${r}: removed.`)}catch(o){console.warn(`[uninstall] ${r} cleanup failed:`,o instanceof Error?o.message:String(o))}at([`Your data directory at ${V.default.cyan("~/.claude-mem")} was preserved.`,"To remove it manually: rm -rf ~/.claude-mem"].join(`
|
|
373
|
+
`),"Note"),$e(V.default.green("claude-mem has been uninstalled."))}var V,Ks=S(()=>{"use strict";Lr();V=Ae(Xe(),1);xe();ze();ke();Nr()});import{spawnSync as Nl}from"child_process";import{existsSync as Ul}from"fs";import{homedir as xn}from"os";import{join as $n}from"path";function jl(){return me?[$n(xn(),".bun","bin","bun.exe"),$n(process.env.USERPROFILE||xn(),".bun","bin","bun.exe")]:[$n(xn(),".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun"]}function Vs(){let t=Nl(me?"where":"which",["bun"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:me});if(t.status===0&&t.stdout.trim())return"bun";for(let r of jl())if(Ul(r))return r;return null}var Js=S(()=>{"use strict";xe()});var ge={};se(ge,{runAdoptCommand:()=>Kl,runCleanupCommand:()=>Vl,runRestartCommand:()=>Hl,runSearchCommand:()=>Jl,runStartCommand:()=>Gl,runStatusCommand:()=>Bl,runStopCommand:()=>Wl,runTranscriptWatchCommand:()=>Yl});import{spawn as kn}from"child_process";import{existsSync as In}from"fs";import{join as Ys}from"path";function hr(){Pt()||(console.error(N.default.red("claude-mem is not installed.")),console.error(`Run: ${N.default.bold("npx claude-mem install")}`),process.exit(1))}function bn(){let e=Vs();return e||(console.error(N.default.red("Bun not found.")),console.error("Install Bun: https://bun.sh"),console.error("After installation, restart your terminal."),process.exit(1)),e}function Xs(){return Ys(W(),"plugin","scripts","worker-service.cjs")}function Je(e,t=[]){hr();let r=bn(),n=Xs();In(n)||(console.error(N.default.red(`Worker script not found at: ${n}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let o=[n,e,...t],s=kn(r,o,{stdio:"inherit",cwd:W(),env:process.env});s.on("error",i=>{console.error(N.default.red(`Failed to start Bun: ${i.message}`)),process.exit(1)}),s.on("close",i=>{process.exit(i??0)})}function Gl(){Je("start")}function Wl(){Je("stop")}function Hl(){Je("restart")}function Bl(){Je("status")}function Kl(e=[]){hr();let t=bn(),r=Xs();In(r)||(console.error(N.default.red(`Worker script not found at: ${r}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let n=process.cwd(),o=[r,"adopt","--cwd",n,...e],s=kn(t,o,{stdio:"inherit",cwd:W(),env:process.env});s.on("error",i=>{console.error(N.default.red(`Failed to start Bun: ${i.message}`)),process.exit(1)}),s.on("close",i=>{process.exit(i??0)})}function Vl(e=[]){Je("cleanup",e)}async function Jl(e){hr();let t=e.join(" ").trim();t||(console.error(N.default.red("Usage: npx claude-mem search <query>")),process.exit(1));let n=`http://127.0.0.1:${F.get("CLAUDE_MEM_WORKER_PORT")}/api/search?query=${encodeURIComponent(t)}`,o;try{o=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(N.default.red("Worker is not running.")),console.error(`Start it with: ${N.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(N.default.red(`Search failed: ${a}`)),process.exit(1)}o.ok||(o.status===404&&(console.error(N.default.red("Search endpoint not found. Is the worker running?")),console.error(`Try: ${N.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(N.default.red(`Search failed: HTTP ${o.status}`)),process.exit(1));let s;try{s=await o.json()}catch(i){let a=i instanceof Error?i.message:String(i);console.error(N.default.red(`Search failed: invalid JSON response (${a})`)),process.exit(1)}console.log(typeof s=="object"&&s!==null?JSON.stringify(s,null,2):s)}function Yl(){hr();let e=bn(),t=Ys(W(),"plugin","scripts","transcript-watcher.cjs");if(!In(t)){Je("transcript",["watch"]);return}let r=kn(e,[t,"watch"],{stdio:"inherit",cwd:W(),env:process.env});r.on("error",n=>{console.error(N.default.red(`Failed to start transcript watcher: ${n.message}`)),process.exit(1)}),r.on("close",n=>{process.exit(n??0)})}var N,fe=S(()=>{"use strict";N=Ae(Xe(),1);Js();xe();ke()});var b=Ae(Xe(),1);xe();var Me=process.argv.slice(2),zs=Me[0]?.toLowerCase()??"";function Xl(){let e=Ze();console.log(`
|
|
372
374
|
${b.default.bold("claude-mem")} v${e} \u2014 persistent memory for AI coding assistants
|
|
373
375
|
|
|
374
376
|
${b.default.bold("Install Commands")} (no Bun required):
|
|
@@ -386,10 +388,11 @@ ${b.default.bold("Runtime Commands")} (requires Bun, delegates to installed plug
|
|
|
386
388
|
${b.default.cyan("npx claude-mem status")} Show worker status
|
|
387
389
|
${b.default.cyan("npx claude-mem search <query>")} Search observations
|
|
388
390
|
${b.default.cyan("npx claude-mem adopt [--dry-run] [--branch <name>]")} Stamp merged worktrees into parent project
|
|
391
|
+
${b.default.cyan("npx claude-mem cleanup [--dry-run]")} Run one-time v12.4.3 pollution cleanup (or preview counts)
|
|
389
392
|
${b.default.cyan("npx claude-mem transcript watch")} Start transcript watcher
|
|
390
393
|
|
|
391
394
|
${b.default.bold("IDE Identifiers")}:
|
|
392
395
|
claude-code, cursor, gemini-cli, opencode, openclaw,
|
|
393
396
|
windsurf, codex-cli, copilot-cli, antigravity, goose,
|
|
394
397
|
crush, roo-code, warp
|
|
395
|
-
`)}async function
|
|
398
|
+
`)}async function zl(){switch(zs){case"":{let{runInstallCommand:e}=await Promise.resolve().then(()=>(fr(),gr));await e();break}case"install":{let e=Me.indexOf("--ide"),t=e!==-1?Me[e+1]:void 0,{runInstallCommand:r}=await Promise.resolve().then(()=>(fr(),gr));await r({ide:t});break}case"update":case"upgrade":{let{runInstallCommand:e}=await Promise.resolve().then(()=>(fr(),gr));await e();break}case"uninstall":case"remove":{let{runUninstallCommand:e}=await Promise.resolve().then(()=>(Ks(),Bs));await e();break}case"version":case"--version":case"-v":{console.log(Ze());break}case"help":case"--help":case"-h":{Xl();break}case"start":{let{runStartCommand:e}=await Promise.resolve().then(()=>(fe(),ge));e();break}case"stop":{let{runStopCommand:e}=await Promise.resolve().then(()=>(fe(),ge));e();break}case"restart":{let{runRestartCommand:e}=await Promise.resolve().then(()=>(fe(),ge));e();break}case"status":{let{runStatusCommand:e}=await Promise.resolve().then(()=>(fe(),ge));e();break}case"search":{let{runSearchCommand:e}=await Promise.resolve().then(()=>(fe(),ge));await e(Me.slice(1));break}case"adopt":{let{runAdoptCommand:e}=await Promise.resolve().then(()=>(fe(),ge));e(Me.slice(1));break}case"cleanup":{let{runCleanupCommand:e}=await Promise.resolve().then(()=>(fe(),ge));e(Me.slice(1));break}case"transcript":{let e=Me[1]?.toLowerCase();if(e==="watch"){let{runTranscriptWatchCommand:t}=await Promise.resolve().then(()=>(fe(),ge));t()}else console.error(b.default.red(`Unknown transcript subcommand: ${e??"(none)"}`)),console.error("Usage: npx claude-mem transcript watch"),process.exit(1);break}default:console.error(b.default.red(`Unknown command: ${zs}`)),console.error(`Run ${b.default.bold("npx claude-mem --help")} for usage information.`),process.exit(1)}}zl().catch(e=>{console.error(b.default.red("Fatal error:"),e.message||e),process.exit(1)});
|