claude-mem 12.4.8 → 12.4.9
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 +49 -49
- package/package.json +2 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/package.json +4 -1
- package/plugin/scripts/bun-runner.js +14 -3
- package/plugin/scripts/context-generator.cjs +75 -75
- package/plugin/scripts/mcp-server.cjs +25 -25
- package/plugin/scripts/worker-service.cjs +157 -157
package/dist/npx-cli/index.js
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var ks=Object.create;var Zt=Object.defineProperty;var As=Object.getOwnPropertyDescriptor;var bs=Object.getOwnPropertyNames;var Ms=Object.getPrototypeOf,Is=Object.prototype.hasOwnProperty;var
|
|
3
|
-
`,"utf-8")}var te,de=m(()=>{"use strict";Oe();te=process.platform==="win32"});var or=sn((Lc,Dn)=>{"use strict";var nr={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Gs={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Hs={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?nr.up():"");return t&&(e+=nr.left),e}};Dn.exports={cursor:nr,scroll:Gs,erase:Hs,beep:"\x07"}});import{stdin as Fn,stdout as Sn}from"node:process";import*as ie from"node:readline";import dn from"node:readline";import{WriteStream as Ks}from"node:tty";function Js({onlyFirst:t=!1}={}){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}function yn(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Ys,"")}function wn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function je(t,e={}){if(typeof t!="string"||t.length===0||(e={ambiguousIsNarrow:!0,...e},t=yn(t),t.length===0))return 0;t=t.replace(qs()," ");let r=e.ambiguousIsNarrow?1:2,o=0;for(let s of t){let i=s.codePointAt(0);if(!(i<=31||i>=127&&i<=159||i>=768&&i<=879))switch(Xs.eastAsianWidth(s)){case"F":case"W":o+=2;break;case"A":o+=r;break;default:o+=1}}return o}function ei(){let t=new Map;for(let[e,r]of Object.entries(F)){for(let[o,s]of Object.entries(r))F[o]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},r[o]=F[o],t.set(s[0],s[1]);Object.defineProperty(F,e,{value:r,enumerable:!1})}return Object.defineProperty(F,"codes",{value:t,enumerable:!1}),F.color.close="\x1B[39m",F.bgColor.close="\x1B[49m",F.color.ansi=pn(),F.color.ansi256=mn(),F.color.ansi16m=gn(),F.bgColor.ansi=pn(sr),F.bgColor.ansi256=mn(sr),F.bgColor.ansi16m=gn(sr),Object.defineProperties(F,{rgbToAnsi256:{value:(e,r,o)=>e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5),enumerable:!1},hexToRgb:{value:e=>{let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!r)return[0,0,0];let[o]=r;o.length===3&&(o=[...o].map(i=>i+i).join(""));let s=Number.parseInt(o,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:e=>F.rgbToAnsi256(...F.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value:e=>{if(e<8)return 30+e;if(e<16)return 90+(e-8);let r,o,s;if(e>=232)r=((e-232)*10+8)/255,o=r,s=r;else{e-=16;let u=e%36;r=Math.floor(e/36)/5,o=Math.floor(u/6)/5,s=u%6/5}let i=Math.max(r,o,s)*2;if(i===0)return 30;let n=30+(Math.round(s)<<2|Math.round(o)<<1|Math.round(r));return i===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(e,r,o)=>F.ansi256ToAnsi(F.rgbToAnsi256(e,r,o)),enumerable:!1},hexToAnsi:{value:e=>F.ansi256ToAnsi(F.hexToAnsi256(e)),enumerable:!1}}),F}function
|
|
2
|
+
var ks=Object.create;var Zt=Object.defineProperty;var As=Object.getOwnPropertyDescriptor;var bs=Object.getOwnPropertyNames;var Ms=Object.getPrototypeOf,Is=Object.prototype.hasOwnProperty;var Rs=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var m=(t,e)=>()=>(t&&(e=t(t=0)),e);var sn=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),q=(t,e)=>{for(var r in e)Zt(t,r,{get:e[r],enumerable:!0})},$s=(t,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of bs(e))!Is.call(t,s)&&s!==r&&Zt(t,s,{get:()=>e[s],enumerable:!(o=As(e,s))||o.enumerable});return t};var le=(t,e,r)=>(r=t!=null?ks(Ms(t)):{},$s(e||!t||!t.__esModule?Zt(r,"default",{value:t,enumerable:!0}):r,t));var Ce=sn((Ac,Qt)=>{var pt=process||{},un=pt.argv||[],dt=pt.env||{},Ps=!(dt.NO_COLOR||un.includes("--no-color"))&&(!!dt.FORCE_COLOR||un.includes("--color")||pt.platform==="win32"||(pt.stdout||{}).isTTY&&dt.TERM!=="dumb"||!!dt.CI),Ts=(t,e,r=t)=>o=>{let s=""+o,i=s.indexOf(e,t.length);return~i?t+Os(s,e,r,i)+e:t+s+e},Os=(t,e,r,o)=>{let s="",i=0;do s+=t.substring(i,o)+r,i=o+e.length,o=t.indexOf(e,i);while(~o);return s+t.substring(i)},an=(t=Ps)=>{let e=t?Ts:()=>String;return{isColorSupported:t,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};Qt.exports=an();Qt.exports.createColors=an});import{existsSync as Ls,readFileSync as Bs}from"fs";function J(t,e){if(!Ls(t))return e;try{return JSON.parse(Bs(t,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${t}: ${r instanceof Error?r.message:String(r)}`)}}var Oe=m(()=>{"use strict"});import{existsSync as Le,mkdirSync as Ns,readFileSync as cn,writeFileSync as js}from"fs";import{homedir as Us}from"os";import{dirname as ln,join as j}from"path";import{fileURLToPath as Ws}from"url";function er(){return process.env.CLAUDE_CONFIG_DIR||j(Us(),".claude")}function R(){return j(er(),"plugins","marketplaces","thedotmack")}function De(){return j(er(),"plugins")}function he(){return j(De(),"known_marketplaces.json")}function Fe(){return j(De(),"installed_plugins.json")}function Se(){return j(er(),"settings.json")}function tr(t){return j(De(),"cache","thedotmack","claude-mem",t)}function mt(){let t=Ws(import.meta.url),e=j(ln(t),"..","..");if(!Le(j(e,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${e}. Bundle structure may have changed \u2014 update the path walk.`);return e}function rr(){return j(mt(),"plugin")}function Be(){let t=j(rr(),".claude-plugin","plugin.json");if(Le(t))try{let r=JSON.parse(cn(t,"utf-8"));if(r.version)return r.version}catch{}let e=j(mt(),"package.json");if(Le(e))try{let r=JSON.parse(cn(e,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function gt(){let t=R();return Le(j(t,"plugin",".claude-plugin","plugin.json"))}function Ne(t){Le(t)||Ns(t,{recursive:!0})}function se(t,e){Ne(ln(t)),js(t,JSON.stringify(e,null,2)+`
|
|
3
|
+
`,"utf-8")}var te,de=m(()=>{"use strict";Oe();te=process.platform==="win32"});var or=sn((Lc,Dn)=>{"use strict";var nr={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let r="";return t<0?r+=`\x1B[${-t}D`:t>0&&(r+=`\x1B[${t}C`),e<0?r+=`\x1B[${-e}A`:e>0&&(r+=`\x1B[${e}B`),r},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Gs={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},Hs={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let r=0;r<t;r++)e+=this.line+(r<t-1?nr.up():"");return t&&(e+=nr.left),e}};Dn.exports={cursor:nr,scroll:Gs,erase:Hs,beep:"\x07"}});import{stdin as Fn,stdout as Sn}from"node:process";import*as ie from"node:readline";import dn from"node:readline";import{WriteStream as Ks}from"node:tty";function Js({onlyFirst:t=!1}={}){let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(e,t?void 0:"g")}function yn(t){if(typeof t!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(Ys,"")}function wn(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function je(t,e={}){if(typeof t!="string"||t.length===0||(e={ambiguousIsNarrow:!0,...e},t=yn(t),t.length===0))return 0;t=t.replace(qs()," ");let r=e.ambiguousIsNarrow?1:2,o=0;for(let s of t){let i=s.codePointAt(0);if(!(i<=31||i>=127&&i<=159||i>=768&&i<=879))switch(Xs.eastAsianWidth(s)){case"F":case"W":o+=2;break;case"A":o+=r;break;default:o+=1}}return o}function ei(){let t=new Map;for(let[e,r]of Object.entries(F)){for(let[o,s]of Object.entries(r))F[o]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},r[o]=F[o],t.set(s[0],s[1]);Object.defineProperty(F,e,{value:r,enumerable:!1})}return Object.defineProperty(F,"codes",{value:t,enumerable:!1}),F.color.close="\x1B[39m",F.bgColor.close="\x1B[49m",F.color.ansi=pn(),F.color.ansi256=mn(),F.color.ansi16m=gn(),F.bgColor.ansi=pn(sr),F.bgColor.ansi256=mn(sr),F.bgColor.ansi16m=gn(sr),Object.defineProperties(F,{rgbToAnsi256:{value:(e,r,o)=>e===r&&r===o?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5),enumerable:!1},hexToRgb:{value:e=>{let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(e.toString(16));if(!r)return[0,0,0];let[o]=r;o.length===3&&(o=[...o].map(i=>i+i).join(""));let s=Number.parseInt(o,16);return[s>>16&255,s>>8&255,s&255]},enumerable:!1},hexToAnsi256:{value:e=>F.rgbToAnsi256(...F.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value:e=>{if(e<8)return 30+e;if(e<16)return 90+(e-8);let r,o,s;if(e>=232)r=((e-232)*10+8)/255,o=r,s=r;else{e-=16;let u=e%36;r=Math.floor(e/36)/5,o=Math.floor(u/6)/5,s=u%6/5}let i=Math.max(r,o,s)*2;if(i===0)return 30;let n=30+(Math.round(s)<<2|Math.round(o)<<1|Math.round(r));return i===2&&(n+=60),n},enumerable:!1},rgbToAnsi:{value:(e,r,o)=>F.ansi256ToAnsi(F.rgbToAnsi256(e,r,o)),enumerable:!1},hexToAnsi:{value:e=>F.ansi256ToAnsi(F.hexToAnsi256(e)),enumerable:!1}}),F}function Cn(t,e,r){return String(t).normalize().replace(/\r\n/g,`
|
|
4
4
|
`).split(`
|
|
5
5
|
`).map(o=>ii(o,e,r)).join(`
|
|
6
|
-
`)}function lr(t,e){if(typeof t=="string")return
|
|
6
|
+
`)}function lr(t,e){if(typeof t=="string")return Et.aliases.get(t)===e;for(let r of t)if(r!==void 0&&lr(r,e))return!0;return!1}function ai(t,e){if(t===e)return;let r=t.split(`
|
|
7
7
|
`),o=e.split(`
|
|
8
|
-
`),s=[];for(let i=0;i<Math.max(r.length,o.length);i++)r[i]!==o[i]&&s.push(i);return s}function ue(t){return t===ur}function ft(t,e){let r=t;r.isTTY&&r.setRawMode(e)}function kn({input:t=Fn,output:e=Sn,overwrite:r=!0,hideCursor:o=!0}={}){let s=ie.createInterface({input:t,output:e,prompt:"",tabSize:1});ie.emitKeypressEvents(t,s),t.isTTY&&t.setRawMode(!0);let i=(n,{name:u,sequence:c})=>{let D=String(n);if(lr([D,u,c],"cancel")){o&&e.write(b.cursor.show),process.exit(0);return}if(!r)return;ie.moveCursor(e,u==="return"?0:-1,u==="return"?-1:0,()=>{ie.clearLine(e,1,()=>{t.once("keypress",i)})})};return o&&e.write(b.cursor.hide),t.once("keypress",i),()=>{t.off("keypress",i),o&&e.write(b.cursor.show),t.isTTY&&!ci&&t.setRawMode(!1),s.terminal=!1,s.close()}}var b,Ys,vn,Vs,Xs,zs,qs,sr,pn,mn,gn,F,Zs,Qs,ti,Ft,ri,ar,_n,ni,xn,cr,fn,Cn,oi,ir,si,ii,ui,Ct,ci,ur,li,Di,U,Et,ht,di,pi,hn,An,Dr=m(()=>{b=le(or(),1);Ys=Js();vn={exports:{}};(function(t){var e={};t.exports=e,e.eastAsianWidth=function(o){var s=o.charCodeAt(0),i=o.length==2?o.charCodeAt(1):0,n=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,n=s<<10|i,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},e.characterLength=function(o){var s=this.eastAsianWidth(o);return s=="F"||s=="W"||s=="A"?2:1};function r(o){return o.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}e.length=function(o){for(var s=r(o),i=0,n=0;n<s.length;n++)i=i+this.characterLength(s[n]);return i},e.slice=function(o,s,i){textLen=e.length(o),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var n="",u=0,c=r(o),D=0;D<c.length;D++){var d=c[D],p=e.length(d);if(u>=s-(p==2?1:0))if(u+p<=i)n+=d;else break;u+=p}return n}})(vn);Vs=vn.exports,Xs=wn(Vs),zs=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},qs=wn(zs);sr=10,pn=(t=0)=>e=>`\x1B[${e+t}m`,mn=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,gn=(t=0)=>(e,r,o)=>`\x1B[${38+t};2;${e};${r};${o}m`,F={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(F.modifier);Zs=Object.keys(F.color),Qs=Object.keys(F.bgColor);[...Zs,...Qs];ti=ei(),Ft=new Set(["\x1B","\x9B"]),ri=39,ar="\x07",_n="[",ni="]",xn="m",cr=`${ni}8;;`,fn=t=>`${Ft.values().next().value}${_n}${t}${xn}`,Cn=t=>`${Ft.values().next().value}${cr}${t}${ar}`,oi=t=>t.split(" ").map(e=>je(e)),ir=(t,e,r)=>{let o=[...e],s=!1,i=!1,n=je(yn(t[t.length-1]));for(let[u,c]of o.entries()){let D=je(c);if(n+D<=r?t[t.length-1]+=c:(t.push(c),n=0),Ft.has(c)&&(s=!0,i=o.slice(u+1).join("").startsWith(cr)),s){i?c===ar&&(s=!1,i=!1):c===xn&&(s=!1);continue}n+=D,n===r&&u<o.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},si=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(je(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},ii=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",s,i,n=oi(t),u=[""];for(let[D,d]of t.split(" ").entries()){r.trim!==!1&&(u[u.length-1]=u[u.length-1].trimStart());let p=je(u[u.length-1]);if(D!==0&&(p>=e&&(r.wordWrap===!1||r.trim===!1)&&(u.push(""),p=0),(p>0||r.trim===!1)&&(u[u.length-1]+=" ",p++)),r.hard&&n[D]>e){let I=e-p,_=1+Math.floor((n[D]-I-1)/e);Math.floor((n[D]-1)/e)<_&&u.push(""),ir(u,d,e);continue}if(p+n[D]>e&&p>0&&n[D]>0){if(r.wordWrap===!1&&p<e){ir(u,d,e);continue}u.push("")}if(p+n[D]>e&&r.wordWrap===!1){ir(u,d,e);continue}u[u.length-1]+=d}r.trim!==!1&&(u=u.map(D=>si(D)));let c=[...u.join(`
|
|
8
|
+
`),s=[];for(let i=0;i<Math.max(r.length,o.length);i++)r[i]!==o[i]&&s.push(i);return s}function ue(t){return t===ur}function ft(t,e){let r=t;r.isTTY&&r.setRawMode(e)}function kn({input:t=Fn,output:e=Sn,overwrite:r=!0,hideCursor:o=!0}={}){let s=ie.createInterface({input:t,output:e,prompt:"",tabSize:1});ie.emitKeypressEvents(t,s),t.isTTY&&t.setRawMode(!0);let i=(n,{name:u,sequence:c})=>{let D=String(n);if(lr([D,u,c],"cancel")){o&&e.write(b.cursor.show),process.exit(0);return}if(!r)return;ie.moveCursor(e,u==="return"?0:-1,u==="return"?-1:0,()=>{ie.clearLine(e,1,()=>{t.once("keypress",i)})})};return o&&e.write(b.cursor.hide),t.once("keypress",i),()=>{t.off("keypress",i),o&&e.write(b.cursor.show),t.isTTY&&!ci&&t.setRawMode(!1),s.terminal=!1,s.close()}}var b,Ys,vn,Vs,Xs,zs,qs,sr,pn,mn,gn,F,Zs,Qs,ti,Ft,ri,ar,_n,ni,xn,cr,fn,En,oi,ir,si,ii,ui,Et,ci,ur,li,Di,U,Ct,ht,di,pi,hn,An,Dr=m(()=>{b=le(or(),1);Ys=Js();vn={exports:{}};(function(t){var e={};t.exports=e,e.eastAsianWidth=function(o){var s=o.charCodeAt(0),i=o.length==2?o.charCodeAt(1):0,n=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,n=s<<10|i,n+=65536),n==12288||65281<=n&&n<=65376||65504<=n&&n<=65510?"F":n==8361||65377<=n&&n<=65470||65474<=n&&n<=65479||65482<=n&&n<=65487||65490<=n&&n<=65495||65498<=n&&n<=65500||65512<=n&&n<=65518?"H":4352<=n&&n<=4447||4515<=n&&n<=4519||4602<=n&&n<=4607||9001<=n&&n<=9002||11904<=n&&n<=11929||11931<=n&&n<=12019||12032<=n&&n<=12245||12272<=n&&n<=12283||12289<=n&&n<=12350||12353<=n&&n<=12438||12441<=n&&n<=12543||12549<=n&&n<=12589||12593<=n&&n<=12686||12688<=n&&n<=12730||12736<=n&&n<=12771||12784<=n&&n<=12830||12832<=n&&n<=12871||12880<=n&&n<=13054||13056<=n&&n<=19903||19968<=n&&n<=42124||42128<=n&&n<=42182||43360<=n&&n<=43388||44032<=n&&n<=55203||55216<=n&&n<=55238||55243<=n&&n<=55291||63744<=n&&n<=64255||65040<=n&&n<=65049||65072<=n&&n<=65106||65108<=n&&n<=65126||65128<=n&&n<=65131||110592<=n&&n<=110593||127488<=n&&n<=127490||127504<=n&&n<=127546||127552<=n&&n<=127560||127568<=n&&n<=127569||131072<=n&&n<=194367||177984<=n&&n<=196605||196608<=n&&n<=262141?"W":32<=n&&n<=126||162<=n&&n<=163||165<=n&&n<=166||n==172||n==175||10214<=n&&n<=10221||10629<=n&&n<=10630?"Na":n==161||n==164||167<=n&&n<=168||n==170||173<=n&&n<=174||176<=n&&n<=180||182<=n&&n<=186||188<=n&&n<=191||n==198||n==208||215<=n&&n<=216||222<=n&&n<=225||n==230||232<=n&&n<=234||236<=n&&n<=237||n==240||242<=n&&n<=243||247<=n&&n<=250||n==252||n==254||n==257||n==273||n==275||n==283||294<=n&&n<=295||n==299||305<=n&&n<=307||n==312||319<=n&&n<=322||n==324||328<=n&&n<=331||n==333||338<=n&&n<=339||358<=n&&n<=359||n==363||n==462||n==464||n==466||n==468||n==470||n==472||n==474||n==476||n==593||n==609||n==708||n==711||713<=n&&n<=715||n==717||n==720||728<=n&&n<=731||n==733||n==735||768<=n&&n<=879||913<=n&&n<=929||931<=n&&n<=937||945<=n&&n<=961||963<=n&&n<=969||n==1025||1040<=n&&n<=1103||n==1105||n==8208||8211<=n&&n<=8214||8216<=n&&n<=8217||8220<=n&&n<=8221||8224<=n&&n<=8226||8228<=n&&n<=8231||n==8240||8242<=n&&n<=8243||n==8245||n==8251||n==8254||n==8308||n==8319||8321<=n&&n<=8324||n==8364||n==8451||n==8453||n==8457||n==8467||n==8470||8481<=n&&n<=8482||n==8486||n==8491||8531<=n&&n<=8532||8539<=n&&n<=8542||8544<=n&&n<=8555||8560<=n&&n<=8569||n==8585||8592<=n&&n<=8601||8632<=n&&n<=8633||n==8658||n==8660||n==8679||n==8704||8706<=n&&n<=8707||8711<=n&&n<=8712||n==8715||n==8719||n==8721||n==8725||n==8730||8733<=n&&n<=8736||n==8739||n==8741||8743<=n&&n<=8748||n==8750||8756<=n&&n<=8759||8764<=n&&n<=8765||n==8776||n==8780||n==8786||8800<=n&&n<=8801||8804<=n&&n<=8807||8810<=n&&n<=8811||8814<=n&&n<=8815||8834<=n&&n<=8835||8838<=n&&n<=8839||n==8853||n==8857||n==8869||n==8895||n==8978||9312<=n&&n<=9449||9451<=n&&n<=9547||9552<=n&&n<=9587||9600<=n&&n<=9615||9618<=n&&n<=9621||9632<=n&&n<=9633||9635<=n&&n<=9641||9650<=n&&n<=9651||9654<=n&&n<=9655||9660<=n&&n<=9661||9664<=n&&n<=9665||9670<=n&&n<=9672||n==9675||9678<=n&&n<=9681||9698<=n&&n<=9701||n==9711||9733<=n&&n<=9734||n==9737||9742<=n&&n<=9743||9748<=n&&n<=9749||n==9756||n==9758||n==9792||n==9794||9824<=n&&n<=9825||9827<=n&&n<=9829||9831<=n&&n<=9834||9836<=n&&n<=9837||n==9839||9886<=n&&n<=9887||9918<=n&&n<=9919||9924<=n&&n<=9933||9935<=n&&n<=9953||n==9955||9960<=n&&n<=9983||n==10045||n==10071||10102<=n&&n<=10111||11093<=n&&n<=11097||12872<=n&&n<=12879||57344<=n&&n<=63743||65024<=n&&n<=65039||n==65533||127232<=n&&n<=127242||127248<=n&&n<=127277||127280<=n&&n<=127337||127344<=n&&n<=127386||917760<=n&&n<=917999||983040<=n&&n<=1048573||1048576<=n&&n<=1114109?"A":"N"},e.characterLength=function(o){var s=this.eastAsianWidth(o);return s=="F"||s=="W"||s=="A"?2:1};function r(o){return o.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}e.length=function(o){for(var s=r(o),i=0,n=0;n<s.length;n++)i=i+this.characterLength(s[n]);return i},e.slice=function(o,s,i){textLen=e.length(o),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var n="",u=0,c=r(o),D=0;D<c.length;D++){var d=c[D],p=e.length(d);if(u>=s-(p==2?1:0))if(u+p<=i)n+=d;else break;u+=p}return n}})(vn);Vs=vn.exports,Xs=wn(Vs),zs=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},qs=wn(zs);sr=10,pn=(t=0)=>e=>`\x1B[${e+t}m`,mn=(t=0)=>e=>`\x1B[${38+t};5;${e}m`,gn=(t=0)=>(e,r,o)=>`\x1B[${38+t};2;${e};${r};${o}m`,F={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(F.modifier);Zs=Object.keys(F.color),Qs=Object.keys(F.bgColor);[...Zs,...Qs];ti=ei(),Ft=new Set(["\x1B","\x9B"]),ri=39,ar="\x07",_n="[",ni="]",xn="m",cr=`${ni}8;;`,fn=t=>`${Ft.values().next().value}${_n}${t}${xn}`,En=t=>`${Ft.values().next().value}${cr}${t}${ar}`,oi=t=>t.split(" ").map(e=>je(e)),ir=(t,e,r)=>{let o=[...e],s=!1,i=!1,n=je(yn(t[t.length-1]));for(let[u,c]of o.entries()){let D=je(c);if(n+D<=r?t[t.length-1]+=c:(t.push(c),n=0),Ft.has(c)&&(s=!0,i=o.slice(u+1).join("").startsWith(cr)),s){i?c===ar&&(s=!1,i=!1):c===xn&&(s=!1);continue}n+=D,n===r&&u<o.length-1&&(t.push(""),n=0)}!n&&t[t.length-1].length>0&&t.length>1&&(t[t.length-2]+=t.pop())},si=t=>{let e=t.split(" "),r=e.length;for(;r>0&&!(je(e[r-1])>0);)r--;return r===e.length?t:e.slice(0,r).join(" ")+e.slice(r).join("")},ii=(t,e,r={})=>{if(r.trim!==!1&&t.trim()==="")return"";let o="",s,i,n=oi(t),u=[""];for(let[D,d]of t.split(" ").entries()){r.trim!==!1&&(u[u.length-1]=u[u.length-1].trimStart());let p=je(u[u.length-1]);if(D!==0&&(p>=e&&(r.wordWrap===!1||r.trim===!1)&&(u.push(""),p=0),(p>0||r.trim===!1)&&(u[u.length-1]+=" ",p++)),r.hard&&n[D]>e){let I=e-p,_=1+Math.floor((n[D]-I-1)/e);Math.floor((n[D]-1)/e)<_&&u.push(""),ir(u,d,e);continue}if(p+n[D]>e&&p>0&&n[D]>0){if(r.wordWrap===!1&&p<e){ir(u,d,e);continue}u.push("")}if(p+n[D]>e&&r.wordWrap===!1){ir(u,d,e);continue}u[u.length-1]+=d}r.trim!==!1&&(u=u.map(D=>si(D)));let c=[...u.join(`
|
|
9
9
|
`)];for(let[D,d]of c.entries()){if(o+=d,Ft.has(d)){let{groups:I}=new RegExp(`(?:\\${_n}(?<code>\\d+)m|\\${cr}(?<uri>.*)${ar})`).exec(c.slice(D).join(""))||{groups:{}};if(I.code!==void 0){let _=Number.parseFloat(I.code);s=_===ri?void 0:_}else I.uri!==void 0&&(i=I.uri.length===0?void 0:I.uri)}let p=ti.codes.get(Number(s));c[D+1]===`
|
|
10
|
-
`?(i&&(o+=
|
|
11
|
-
`&&(s&&p&&(o+=fn(s)),i&&(o+=
|
|
12
|
-
`),ft(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=
|
|
13
|
-
`).length-1;this.output.write(b.cursor.move(-999,e*-1))}render(){let e=
|
|
10
|
+
`?(i&&(o+=En("")),s&&p&&(o+=fn(p))):d===`
|
|
11
|
+
`&&(s&&p&&(o+=fn(s)),i&&(o+=En(i)))}return o};ui=["up","down","left","right","space","enter","cancel"],Et={actions:new Set(ui),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};ci=globalThis.process.platform.startsWith("win"),ur=Symbol("clack:cancel");li=Object.defineProperty,Di=(t,e,r)=>e in t?li(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,U=(t,e,r)=>(Di(t,typeof e!="symbol"?e+"":e,r),r),Ct=class{constructor(e,r=!0){U(this,"input"),U(this,"output"),U(this,"_abortSignal"),U(this,"rl"),U(this,"opts"),U(this,"_render"),U(this,"_track",!1),U(this,"_prevFrame",""),U(this,"_subscribers",new Map),U(this,"_cursor",0),U(this,"state","initial"),U(this,"error",""),U(this,"value");let{input:o=Fn,output:s=Sn,render:i,signal:n,...u}=e;this.opts=u,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=r,this._abortSignal=n,this.input=o,this.output=s}unsubscribe(){this._subscribers.clear()}setSubscriber(e,r){let o=this._subscribers.get(e)??[];o.push(r),this._subscribers.set(e,o)}on(e,r){this.setSubscriber(e,{cb:r})}once(e,r){this.setSubscriber(e,{cb:r,once:!0})}emit(e,...r){let o=this._subscribers.get(e)??[],s=[];for(let i of o)i.cb(...r),i.once&&s.push(()=>o.splice(o.indexOf(i),1));for(let i of s)i()}prompt(){return new Promise((e,r)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(ur);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let o=new Ks(0);o._write=(s,i,n)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),n()},this.input.pipe(o),this.rl=dn.createInterface({input:this.input,output:o,tabSize:2,prompt:"",escapeCodeTimeout:50}),dn.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),ft(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(b.cursor.show),this.output.off("resize",this.render),ft(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(b.cursor.show),this.output.off("resize",this.render),ft(this.input,!1),e(ur)})})}onKeypress(e,r){if(this.state==="error"&&(this.state="active"),r?.name&&(!this._track&&Et.aliases.has(r.name)&&this.emit("cursor",Et.aliases.get(r.name)),Et.actions.has(r.name)&&this.emit("cursor",r.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),e===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),e&&this.emit("key",e.toLowerCase()),r?.name==="return"){if(this.opts.validate){let o=this.opts.validate(this.value);o&&(this.error=o instanceof Error?o.message:o,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}lr([e,r?.name,r?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
|
|
12
|
+
`),ft(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=Cn(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
|
|
13
|
+
`).length-1;this.output.write(b.cursor.move(-999,e*-1))}render(){let e=Cn(this._render(this)??"",process.stdout.columns,{hard:!0});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(b.cursor.hide);else{let r=ai(this._prevFrame,e);if(this.restoreCursor(),r&&r?.length===1){let o=r[0];this.output.write(b.cursor.move(0,o)),this.output.write(b.erase.lines(1));let s=e.split(`
|
|
14
14
|
`);this.output.write(s[o]),this._prevFrame=e,this.output.write(b.cursor.move(0,s.length-o-1));return}if(r&&r?.length>1){let o=r[0];this.output.write(b.cursor.move(0,o)),this.output.write(b.erase.down());let s=e.split(`
|
|
15
15
|
`).slice(o);this.output.write(s.join(`
|
|
16
|
-
`)),this._prevFrame=e;return}this.output.write(b.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}},ht=class extends
|
|
16
|
+
`)),this._prevFrame=e;return}this.output.write(b.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}},ht=class extends Ct{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",r=>{this.output.write(b.cursor.move(0,-1)),this.value=r,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},di=Object.defineProperty,pi=(t,e,r)=>e in t?di(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,hn=(t,e,r)=>(pi(t,typeof e!="symbol"?e+"":e,r),r),An=class extends Ct{constructor(t){super(t,!1),hn(this,"options"),hn(this,"cursor",0),this.options=t.options,this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:e})=>e===t.cursorAt),0),this.on("key",e=>{e==="a"&&this.toggleAll()}),this.on("cursor",e=>{switch(e){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){let t=this.value.length===this.options.length;this.value=t?[]:this.options.map(e=>e.value)}toggleValue(){let t=this.value.includes(this._value);this.value=t?this.value.filter(e=>e!==this._value):[...this.value,this._value]}}});import{stripVTControlCharacters as dr}from"node:util";import Y from"node:process";function mi(){return Y.platform!=="win32"?Y.env.TERM!=="linux":!!Y.env.CI||!!Y.env.WT_SESSION||!!Y.env.TERMINUS_SUBLIME||Y.env.ConEmuTask==="{cmd::Cmder}"||Y.env.TERM_PROGRAM==="Terminus-Sublime"||Y.env.TERM_PROGRAM==="vscode"||Y.env.TERM==="xterm-256color"||Y.env.TERM==="alacritty"||Y.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var l,St,pr,w,gi,Pn,Tn,yt,fi,y,Ue,bn,Mn,Ei,In,Ci,Zc,Rn,hi,Fi,Si,yi,wi,vi,_i,On,$n,We,Ln,Ge,He,wt,pe,$,xi,vt,mr=m(()=>{Dr();Dr();l=le(Ce(),1),St=le(or(),1);pr=mi(),w=(t,e)=>pr?t:e,gi=w("\u25C6","*"),Pn=w("\u25A0","x"),Tn=w("\u25B2","x"),yt=w("\u25C7","o"),fi=w("\u250C","T"),y=w("\u2502","|"),Ue=w("\u2514","\u2014"),bn=w("\u25CF",">"),Mn=w("\u25CB"," "),Ei=w("\u25FB","[\u2022]"),In=w("\u25FC","[+]"),Ci=w("\u25FB","[ ]"),Zc=w("\u25AA","\u2022"),Rn=w("\u2500","-"),hi=w("\u256E","+"),Fi=w("\u251C","+"),Si=w("\u256F","+"),yi=w("\u25CF","\u2022"),wi=w("\u25C6","*"),vi=w("\u25B2","!"),_i=w("\u25A0","x"),On=t=>{switch(t){case"initial":case"active":return l.default.cyan(gi);case"cancel":return l.default.red(Pn);case"error":return l.default.yellow(Tn);case"submit":return l.default.green(yt)}},$n=t=>{let{cursor:e,options:r,style:o}=t,s=t.maxItems??Number.POSITIVE_INFINITY,i=Math.max(process.stdout.rows-4,0),n=Math.min(i,Math.max(s,5)),u=0;e>=u+n-3?u=Math.max(Math.min(e-n+3,r.length-n),0):e<u+2&&(u=Math.max(e-2,0));let c=n<r.length&&u>0,D=n<r.length&&u+n<r.length;return r.slice(u,u+n).map((d,p,I)=>{let _=p===0&&c,g=p===I.length-1&&D;return _||g?l.default.dim("..."):o(d,p+u===e)})},We=t=>{let e=t.active??"Yes",r=t.inactive??"No";return new ht({active:e,inactive:r,initialValue:t.initialValue??!0,render(){let o=`${l.default.gray(y)}
|
|
17
17
|
${On(this.state)} ${t.message}
|
|
18
18
|
`,s=this.value?e:r;switch(this.state){case"submit":return`${o}${l.default.gray(y)} ${l.default.dim(s)}`;case"cancel":return`${o}${l.default.gray(y)} ${l.default.strikethrough(l.default.dim(s))}
|
|
19
19
|
${l.default.gray(y)}`;default:return`${o}${l.default.cyan(y)} ${this.value?`${l.default.green(bn)} ${e}`:`${l.default.dim(Mn)} ${l.default.dim(e)}`} ${l.default.dim("/")} ${this.value?`${l.default.dim(Mn)} ${l.default.dim(r)}`:`${l.default.green(bn)} ${r}`}
|
|
20
20
|
${l.default.cyan(Ue)}
|
|
21
|
-
`}}}).prompt()},Ln=t=>{let e=(r,o)=>{let s=r.label??String(r.value);return o==="active"?`${l.default.cyan(
|
|
21
|
+
`}}}).prompt()},Ln=t=>{let e=(r,o)=>{let s=r.label??String(r.value);return o==="active"?`${l.default.cyan(Ei)} ${s} ${r.hint?l.default.dim(`(${r.hint})`):""}`:o==="selected"?`${l.default.green(In)} ${l.default.dim(s)}`:o==="cancelled"?`${l.default.strikethrough(l.default.dim(s))}`:o==="active-selected"?`${l.default.green(In)} ${s} ${r.hint?l.default.dim(`(${r.hint})`):""}`:o==="submitted"?`${l.default.dim(s)}`:`${l.default.dim(Ci)} ${l.default.dim(s)}`};return new An({options:t.options,initialValues:t.initialValues,required:t.required??!0,cursorAt:t.cursorAt,validate(r){if(this.required&&r.length===0)return`Please select at least one option.
|
|
22
22
|
${l.default.reset(l.default.dim(`Press ${l.default.gray(l.default.bgWhite(l.default.inverse(" space ")))} to select, ${l.default.gray(l.default.bgWhite(l.default.inverse(" enter ")))} to submit`))}`},render(){let r=`${l.default.gray(y)}
|
|
23
23
|
${On(this.state)} ${t.message}
|
|
24
24
|
`,o=(s,i)=>{let n=this.value.includes(s.value);return i&&n?e(s,"active-selected"):n?e(s,"selected"):e(s,i?"active":"inactive")};switch(this.state){case"submit":return`${r}${l.default.gray(y)} ${this.options.filter(({value:s})=>this.value.includes(s)).map(s=>e(s,"submitted")).join(l.default.dim(", "))||l.default.dim("none")}`;case"cancel":{let s=this.options.filter(({value:i})=>this.value.includes(i)).map(i=>e(i,"cancelled")).join(l.default.dim(", "));return`${r}${l.default.gray(y)} ${s.trim()?`${s}
|
|
25
25
|
${l.default.gray(y)}`:""}`}case"error":{let s=this.error.split(`
|
|
26
26
|
`).map((i,n)=>n===0?`${l.default.yellow(Ue)} ${l.default.yellow(i)}`:` ${i}`).join(`
|
|
27
|
-
`);return`${r+l.default.yellow(y)} ${
|
|
27
|
+
`);return`${r+l.default.yellow(y)} ${$n({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:o}).join(`
|
|
28
28
|
${l.default.yellow(y)} `)}
|
|
29
29
|
${s}
|
|
30
|
-
`}default:return`${r}${l.default.cyan(y)} ${
|
|
30
|
+
`}default:return`${r}${l.default.cyan(y)} ${$n({options:this.options,cursor:this.cursor,maxItems:t.maxItems,style:o}).join(`
|
|
31
31
|
${l.default.cyan(y)} `)}
|
|
32
32
|
${l.default.cyan(Ue)}
|
|
33
33
|
`}}}).prompt()},Ge=(t="",e="")=>{let r=`
|
|
@@ -35,31 +35,31 @@ ${t}
|
|
|
35
35
|
`.split(`
|
|
36
36
|
`),o=dr(e).length,s=Math.max(r.reduce((n,u)=>{let c=dr(u);return c.length>n?c.length:n},0),o)+2,i=r.map(n=>`${l.default.gray(y)} ${l.default.dim(n)}${" ".repeat(s-dr(n).length)}${l.default.gray(y)}`).join(`
|
|
37
37
|
`);process.stdout.write(`${l.default.gray(y)}
|
|
38
|
-
${l.default.green(yt)} ${l.default.reset(e)} ${l.default.gray(
|
|
38
|
+
${l.default.green(yt)} ${l.default.reset(e)} ${l.default.gray(Rn.repeat(Math.max(s-o-1,1))+hi)}
|
|
39
39
|
${i}
|
|
40
|
-
${l.default.gray(Fi
|
|
40
|
+
${l.default.gray(Fi+Rn.repeat(s+2)+Si)}
|
|
41
41
|
`)},He=(t="")=>{process.stdout.write(`${l.default.gray(Ue)} ${l.default.red(t)}
|
|
42
42
|
|
|
43
43
|
`)},wt=(t="")=>{process.stdout.write(`${l.default.gray(fi)} ${t}
|
|
44
44
|
`)},pe=(t="")=>{process.stdout.write(`${l.default.gray(y)}
|
|
45
45
|
${l.default.gray(Ue)} ${t}
|
|
46
46
|
|
|
47
|
-
`)}
|
|
47
|
+
`)},$={message:(t="",{symbol:e=l.default.gray(y)}={})=>{let r=[`${l.default.gray(y)}`];if(t){let[o,...s]=t.split(`
|
|
48
48
|
`);r.push(`${e} ${o}`,...s.map(i=>`${l.default.gray(y)} ${i}`))}process.stdout.write(`${r.join(`
|
|
49
49
|
`)}
|
|
50
|
-
`)},info:t=>{
|
|
50
|
+
`)},info:t=>{$.message(t,{symbol:l.default.blue(yi)})},success:t=>{$.message(t,{symbol:l.default.green(wi)})},step:t=>{$.message(t,{symbol:l.default.green(yt)})},warn:t=>{$.message(t,{symbol:l.default.yellow(vi)})},warning:t=>{$.warn(t)},error:t=>{$.message(t,{symbol:l.default.red(_i)})}},xi=()=>{let t=pr?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],e=pr?80:120,r=process.env.CI==="true",o,s,i=!1,n="",u,c=O=>{let K=O>1?"Something went wrong":"Canceled";i&&N(K,O)},D=()=>c(2),d=()=>c(1),p=()=>{process.on("uncaughtExceptionMonitor",D),process.on("unhandledRejection",D),process.on("SIGINT",d),process.on("SIGTERM",d),process.on("exit",c)},I=()=>{process.removeListener("uncaughtExceptionMonitor",D),process.removeListener("unhandledRejection",D),process.removeListener("SIGINT",d),process.removeListener("SIGTERM",d),process.removeListener("exit",c)},_=()=>{if(u===void 0)return;r&&process.stdout.write(`
|
|
51
51
|
`);let O=u.split(`
|
|
52
52
|
`);process.stdout.write(St.cursor.move(-999,O.length-1)),process.stdout.write(St.erase.down(O.length))},g=O=>O.replace(/\.+$/,""),h=(O="")=>{i=!0,o=kn(),n=g(O),process.stdout.write(`${l.default.gray(y)}
|
|
53
53
|
`);let K=0,oe=0;p(),s=setInterval(()=>{if(r&&n===u)return;_(),u=n;let _s=l.default.magenta(t[K]),xs=r?"...":".".repeat(Math.floor(oe)).slice(0,3);process.stdout.write(`${_s} ${n}${xs}`),K=K+1<t.length?K+1:0,oe=oe<t.length?oe+.125:0},e)},N=(O="",K=0)=>{i=!1,clearInterval(s),_();let oe=K===0?l.default.green(yt):K===1?l.default.red(Pn):l.default.red(Tn);n=g(O??n),process.stdout.write(`${oe} ${n}
|
|
54
|
-
`),I(),o()};return{start:h,stop:N,message:(O="")=>{n=g(O??n)}}},vt=async t=>{for(let e of t){if(e.enabled===!1)continue;let r=xi();r.start(e.title);let o=await e.task(r.message);r.stop(o||e.title)}}});import{readFileSync as ki,writeFileSync as Nn,existsSync as jn,mkdirSync as Ai}from"fs";import{join as Un,dirname as bi}from"path";import{homedir as Wn}from"os";var x,me=m(()=>{"use strict";x=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:Un(Wn(),".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:Un(Wn(),".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(e){return process.env[e]??this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let o of Object.keys(this.DEFAULTS))process.env[o]!==void 0&&(r[o]=process.env[o]);return r}static loadFromFile(e){try{if(!jn(e)){let n=this.getAllDefaults();try{let u=bi(e);jn(u)||Ai(u,{recursive:!0}),Nn(e,JSON.stringify(n,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(u){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,u instanceof Error?u.message:String(u))}return this.applyEnvOverrides(n)}let r=ki(e,"utf-8"),o=JSON.parse(r),s=o;if(o.env&&typeof o.env=="object"){s=o.env;try{Nn(e,JSON.stringify(s,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(n){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,n instanceof Error?n.message:String(n))}}let i={...this.DEFAULTS};for(let n of Object.keys(this.DEFAULTS))s[n]!==void 0&&(i[n]=s[n]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r instanceof Error?r.message:String(r)),this.applyEnvOverrides(this.getAllDefaults())}}}});async function _t(t,e=1e4){let r=`http://127.0.0.1:${t}`,o=!1;try{await fetch(`${r}/api/admin/shutdown`,{method:"POST",signal:AbortSignal.timeout(5e3)}),o=!0}catch{return{workerWasRunning:!1,confirmedStopped:!0}}let s=500,i=Math.ceil(e/s);for(let n=0;n<i;n++){await new Promise(u=>setTimeout(u,s));try{await fetch(`${r}/api/health`,{signal:AbortSignal.timeout(1e3)})}catch(u){if(u instanceof Error&&u.name==="AbortError")continue;return{workerWasRunning:o,confirmedStopped:!0}}}return{workerWasRunning:o,confirmedStopped:!1}}var gr=m(()=>{"use strict"});import{execSync as Mi}from"child_process";import{existsSync as V,readdirSync as Ii}from"fs";import{homedir as Gn}from"os";import{join as X}from"path";function Ke(t){try{return Mi(`${te?"where":"which"} ${t}`,{stdio:"pipe"}),!0}catch(e){return process.env.DEBUG&&console.error(`[ide-detection] ${t} not in PATH:`,e instanceof Error?e.message:String(e)),!1}}function
|
|
55
|
-
${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let r=Object.keys(e);return r.length===0?"{}":r.length<=3?JSON.stringify(e):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,r){if(!r)return e;let o=r;if(typeof r=="string")try{o=JSON.parse(r)}catch{o=r}if(e==="Bash"&&o.command)return`${e}(${o.command})`;if(o.file_path)return`${e}(${o.file_path})`;if(o.notebook_path)return`${e}(${o.notebook_path})`;if(e==="Glob"&&o.pattern)return`${e}(${o.pattern})`;if(e==="Grep"&&o.pattern)return`${e}(${o.pattern})`;if(o.url)return`${e}(${o.url})`;if(o.query)return`${e}(${o.query})`;if(e==="Task"){if(o.subagent_type)return`${e}(${o.subagent_type})`;if(o.description)return`${e}(${o.description})`}return e==="Skill"&&o.skill?`${e}(${o.skill})`:e==="LSP"&&o.operation?`${e}(${o.operation})`:e}formatTimestamp(e){let r=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),u=String(e.getSeconds()).padStart(2,"0"),c=String(e.getMilliseconds()).padStart(3,"0");return`${r}-${o}-${s} ${i}:${n}:${u}.${c}`}log(e,r,o,s,i){if(e<this.getLevel())return;this.ensureLogFileInitialized();let n=this.formatTimestamp(new Date),u=fr[e].padEnd(5),c=r.padEnd(6),D="";s?.correlationId?D=`[${s.correlationId}] `:s?.sessionId&&(D=`[session-${s.sessionId}] `);let d="";i!=null
|
|
54
|
+
`),I(),o()};return{start:h,stop:N,message:(O="")=>{n=g(O??n)}}},vt=async t=>{for(let e of t){if(e.enabled===!1)continue;let r=xi();r.start(e.title);let o=await e.task(r.message);r.stop(o||e.title)}}});import{readFileSync as ki,writeFileSync as Nn,existsSync as jn,mkdirSync as Ai}from"fs";import{join as Un,dirname as bi}from"path";import{homedir as Wn}from"os";var x,me=m(()=>{"use strict";x=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:Un(Wn(),".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:Un(Wn(),".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(e){return process.env[e]??this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let o of Object.keys(this.DEFAULTS))process.env[o]!==void 0&&(r[o]=process.env[o]);return r}static loadFromFile(e){try{if(!jn(e)){let n=this.getAllDefaults();try{let u=bi(e);jn(u)||Ai(u,{recursive:!0}),Nn(e,JSON.stringify(n,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(u){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,u instanceof Error?u.message:String(u))}return this.applyEnvOverrides(n)}let r=ki(e,"utf-8"),o=JSON.parse(r),s=o;if(o.env&&typeof o.env=="object"){s=o.env;try{Nn(e,JSON.stringify(s,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(n){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,n instanceof Error?n.message:String(n))}}let i={...this.DEFAULTS};for(let n of Object.keys(this.DEFAULTS))s[n]!==void 0&&(i[n]=s[n]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r instanceof Error?r.message:String(r)),this.applyEnvOverrides(this.getAllDefaults())}}}});async function _t(t,e=1e4){let r=`http://127.0.0.1:${t}`,o=!1;try{await fetch(`${r}/api/admin/shutdown`,{method:"POST",signal:AbortSignal.timeout(5e3)}),o=!0}catch{return{workerWasRunning:!1,confirmedStopped:!0}}let s=500,i=Math.ceil(e/s);for(let n=0;n<i;n++){await new Promise(u=>setTimeout(u,s));try{await fetch(`${r}/api/health`,{signal:AbortSignal.timeout(1e3)})}catch(u){if(u instanceof Error&&u.name==="AbortError")continue;return{workerWasRunning:o,confirmedStopped:!0}}}return{workerWasRunning:o,confirmedStopped:!1}}var gr=m(()=>{"use strict"});import{execSync as Mi}from"child_process";import{existsSync as V,readdirSync as Ii}from"fs";import{homedir as Gn}from"os";import{join as X}from"path";function Ke(t){try{return Mi(`${te?"where":"which"} ${t}`,{stdio:"pipe"}),!0}catch(e){return process.env.DEBUG&&console.error(`[ide-detection] ${t} not in PATH:`,e instanceof Error?e.message:String(e)),!1}}function Ri(t){let e=X(Gn(),".vscode","extensions");if(!V(e))return!1;try{return Ii(e).some(o=>o.toLowerCase().includes(t.toLowerCase()))}catch(r){return console.warn("[ide-detection] Failed to read VS Code extensions directory:",r instanceof Error?r.message:String(r)),!1}}function Je(){let t=Gn();return[{id:"claude-code",label:"Claude Code",detected:V(X(t,".claude")),supported:!0,hint:"recommended"},{id:"gemini-cli",label:"Gemini CLI",detected:V(X(t,".gemini")),supported:!0},{id:"opencode",label:"OpenCode",detected:V(X(t,".config","opencode"))||Ke("opencode"),supported:!0,hint:"plugin-based integration"},{id:"openclaw",label:"OpenClaw",detected:V(X(t,".openclaw")),supported:!0,hint:"plugin-based integration"},{id:"windsurf",label:"Windsurf",detected:V(X(t,".codeium","windsurf")),supported:!0},{id:"codex-cli",label:"Codex CLI",detected:V(X(t,".codex")),supported:!0,hint:"transcript-based integration"},{id:"cursor",label:"Cursor",detected:V(X(t,".cursor")),supported:!0,hint:"hooks + MCP integration"},{id:"copilot-cli",label:"Copilot CLI",detected:Ke("copilot"),supported:!0,hint:"MCP-based integration"},{id:"antigravity",label:"Antigravity",detected:V(X(t,".gemini","antigravity")),supported:!0,hint:"MCP-based integration"},{id:"goose",label:"Goose",detected:V(X(t,".config","goose"))||Ke("goose"),supported:!0,hint:"MCP-based integration"},{id:"crush",label:"Crush",detected:Ke("crush"),supported:!0,hint:"MCP-based integration"},{id:"roo-code",label:"Roo Code",detected:Ri("roo-code"),supported:!0,hint:"MCP-based integration"},{id:"warp",label:"Warp",detected:V(X(t,".warp"))||Ke("warp"),supported:!0,hint:"MCP-based integration"}]}var Hn=m(()=>{"use strict";de()});import{appendFileSync as $i,existsSync as Kn,mkdirSync as Pi,readFileSync as Ti}from"fs";import{join as xt}from"path";import{homedir as Oi}from"os";var fr,Jn,Er,a,L=m(()=>{"use strict";fr=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(fr||{}),Jn=xt(Oi(),".claude-mem"),Er=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=xt(Jn,"logs");Kn(e)||Pi(e,{recursive:!0});let r=new Date().toISOString().split("T")[0];this.logFilePath=xt(e,`claude-mem-${r}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e instanceof Error?e.message:String(e)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=xt(Jn,"settings.json");if(Kn(e)){let r=Ti(e,"utf-8"),s=(JSON.parse(r).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=fr[s]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}correlationId(e,r){return`obs-${e}-${r}`}sessionId(e){return`session-${e}`}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
|
|
55
|
+
${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let r=Object.keys(e);return r.length===0?"{}":r.length<=3?JSON.stringify(e):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,r){if(!r)return e;let o=r;if(typeof r=="string")try{o=JSON.parse(r)}catch{o=r}if(e==="Bash"&&o.command)return`${e}(${o.command})`;if(o.file_path)return`${e}(${o.file_path})`;if(o.notebook_path)return`${e}(${o.notebook_path})`;if(e==="Glob"&&o.pattern)return`${e}(${o.pattern})`;if(e==="Grep"&&o.pattern)return`${e}(${o.pattern})`;if(o.url)return`${e}(${o.url})`;if(o.query)return`${e}(${o.query})`;if(e==="Task"){if(o.subagent_type)return`${e}(${o.subagent_type})`;if(o.description)return`${e}(${o.description})`}return e==="Skill"&&o.skill?`${e}(${o.skill})`:e==="LSP"&&o.operation?`${e}(${o.operation})`:e}formatTimestamp(e){let r=e.getFullYear(),o=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),n=String(e.getMinutes()).padStart(2,"0"),u=String(e.getSeconds()).padStart(2,"0"),c=String(e.getMilliseconds()).padStart(3,"0");return`${r}-${o}-${s} ${i}:${n}:${u}.${c}`}log(e,r,o,s,i){if(e<this.getLevel())return;this.ensureLogFileInitialized();let n=this.formatTimestamp(new Date),u=fr[e].padEnd(5),c=r.padEnd(6),D="";s?.correlationId?D=`[${s.correlationId}] `:s?.sessionId&&(D=`[session-${s.sessionId}] `);let d="";if(i!=null)if(i instanceof Error)d=this.getLevel()===0?`
|
|
56
56
|
${i.message}
|
|
57
|
-
${i.stack}`:` ${i.message}
|
|
58
|
-
`+JSON.stringify(i,null,2)
|
|
57
|
+
${i.stack}`:` ${i.message}`;else if(this.getLevel()===0&&typeof i=="object")try{d=`
|
|
58
|
+
`+JSON.stringify(i,null,2)}catch{d=" "+this.formatData(i)}else d=" "+this.formatData(i);let p="";if(s){let{sessionId:_,memorySessionId:g,correlationId:h,...N}=s;Object.keys(N).length>0&&(p=` {${Object.entries(N).map(([K,oe])=>`${K}=${oe}`).join(", ")}}`)}let I=`[${n}] [${u}] [${c}] ${D}${o}${p}${d}`;if(this.logFilePath)try{$i(this.logFilePath,I+`
|
|
59
59
|
`,"utf8")}catch(_){process.stderr.write(`[LOGGER] Failed to write to log file: ${_ instanceof Error?_.message:String(_)}
|
|
60
60
|
`)}else process.stderr.write(I+`
|
|
61
61
|
`)}debug(e,r,o,s){this.log(0,e,r,o,s)}info(e,r,o,s){this.log(1,e,r,o,s)}warn(e,r,o,s){this.log(2,e,r,o,s)}error(e,r,o,s){this.log(3,e,r,o,s)}dataIn(e,r,o,s){this.info(e,`\u2192 ${r}`,o,s)}dataOut(e,r,o,s){this.info(e,`\u2190 ${r}`,o,s)}success(e,r,o,s){this.info(e,`\u2713 ${r}`,o,s)}failure(e,r,o,s){this.error(e,`\u2717 ${r}`,o,s)}timing(e,r,o,s){this.info(e,`\u23F1 ${r}`,s,{duration:`${o}ms`})}happyPathError(e,r,o,s,i=""){let D=((new Error().stack||"").split(`
|
|
62
|
-
`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),d=D?`${D[1].split("/").pop()}:${D[2]}`:"unknown",p={...o,location:d};return this.warn(e,`[HAPPY-PATH] ${r}`,p,s),i}},a=new Cr});function Yn(t){return process.platform==="win32"?Math.round(t*Ye.WINDOWS_MULTIPLIER):t}var Ye,Er=m(()=>{"use strict";Ye={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 M,dirname as Li,basename as Bi}from"path";import{homedir as Vn}from"os";import{existsSync as Ni,mkdirSync as Fl}from"fs";import{execSync as yl}from"child_process";import{fileURLToPath as ji}from"url";function Ui(){return typeof __dirname<"u"?__dirname:Li(ji(import.meta.url))}function Wi(){if(process.env.CLAUDE_MEM_DATA_DIR)return process.env.CLAUDE_MEM_DATA_DIR;let t=M(Vn(),".claude-mem"),e=M(t,"settings.json");try{if(Ni(e)){let{readFileSync:r}=$s("fs"),o=JSON.parse(r(e,"utf-8")),s=o.env??o;if(s.CLAUDE_MEM_DATA_DIR)return s.CLAUDE_MEM_DATA_DIR}}catch{}return t}var _l,B,ye,kt,xl,kl,Al,bl,Ml,Gi,Il,$l,Hi,Rl,Pl,Tl,Ol,Ve=m(()=>{"use strict";L();_l=Ui();B=Wi(),ye=process.env.CLAUDE_CONFIG_DIR||M(Vn(),".claude"),kt=M(ye,"plugins","marketplaces","thedotmack"),xl=M(B,"archives"),kl=M(B,"logs"),Al=M(B,"trash"),bl=M(B,"backups"),Ml=M(B,"modes"),Gi=M(B,"settings.json"),Il=M(B,"claude-mem.db"),$l=M(B,"vector-db"),Hi=M(B,"observer-sessions"),Rl=Bi(Hi),Pl=M(ye,"settings.json"),Tl=M(ye,"commands"),Ol=M(ye,"CLAUDE.md")});var Xn=m(()=>{"use strict";me();Ve()});var zn=m(()=>{"use strict"});import{spawn as Kl,spawnSync as Ki}from"child_process";import{existsSync as Ji,mkdirSync as qn,readFileSync as Zn,writeFileSync as Yi}from"fs";import{homedir as Vi}from"os";import At from"path";function Z(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(a.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return a.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}function Qi(t){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux")try{let e=Zn(`/proc/${t}/stat`,"utf-8"),r=e.lastIndexOf(") ");if(r<0)return null;let s=e.slice(r+2).split(" ")[19];return s&&/^\d+$/.test(s)?s:null}catch(e){return a.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}if(process.platform==="win32")return null;try{let e=Ki("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...process.env,LC_ALL:"C",LANG:"C"}});if(e.status!==0)return null;let r=e.stdout.trim();return r.length>0?r:null}catch(e){return a.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}}function Qn(t){if(!t||!Z(t.pid))return!1;if(!t.startToken)return!0;let e=Qi(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||a.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function bt(){return hr||(hr=new Fr),hr}var Xi,zi,qi,Zi,Fr,hr,Mt=m(()=>{"use strict";L();zn();Xi=5e3,zi=1e3,qi=At.join(Vi(),".claude-mem"),Zi=At.join(qi,"supervisor.json");Fr=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Zi){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,qn(At.dirname(this.registryPath),{recursive:!0}),!Ji(this.registryPath)){this.persist();return}try{let o=JSON.parse(Zn(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(o))this.entries.set(s,i)}catch(r){r instanceof Error?a.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):a.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&a.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,r,o){this.initialize(),this.entries.set(e,r),o&&this.runtimeProcesses.set(e,o),this.persist()}unregister(e){this.initialize(),this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let o=Date.parse(e.startedAt),s=Date.parse(r.startedAt);return(Number.isNaN(o)?0:o)-(Number.isNaN(s)?0:s)})}getBySession(e){let r=String(e);return this.getAll().filter(o=>o.sessionId!==void 0&&String(o.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}getByPid(e){return this.getAll().filter(r=>r.pid===e)}pruneDeadEntries(){this.initialize();let e=0;for(let[r,o]of this.entries)Z(o.pid)||(this.entries.delete(r),this.runtimeProcesses.delete(r),e+=1);return e>0&&this.persist(),e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let o=typeof e=="number"?e:Number(e)||void 0;a.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:o,pids:r.map(u=>u.pid)});let s=r.filter(u=>Z(u.pid));for(let u of s)try{typeof u.pgid=="number"&&process.platform!=="win32"?process.kill(-u.pgid,"SIGTERM"):process.kill(u.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&a.debug("SYSTEM",`Failed to SIGTERM session process PID ${u.pid}`,{pid:u.pid,pgid:u.pgid},c):a.warn("SYSTEM",`Failed to SIGTERM session process PID ${u.pid} (non-Error)`,{pid:u.pid,pgid:u.pgid,error:String(c)})}let i=Date.now()+Xi;for(;Date.now()<i&&s.filter(c=>Z(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100));let n=s.filter(u=>Z(u.pid));for(let u of n){a.warn("SYSTEM",`Session process PID ${u.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:u.pid,pgid:u.pgid,sessionId:o});try{typeof u.pgid=="number"&&process.platform!=="win32"?process.kill(-u.pgid,"SIGKILL"):process.kill(u.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&a.debug("SYSTEM",`Failed to SIGKILL session process PID ${u.pid}`,{pid:u.pid,pgid:u.pgid},c):a.warn("SYSTEM",`Failed to SIGKILL session process PID ${u.pid} (non-Error)`,{pid:u.pid,pgid:u.pgid,error:String(c)})}}if(n.length>0){let u=Date.now()+zi;for(;Date.now()<u&&n.filter(D=>Z(D.pid)).length!==0;)await new Promise(D=>setTimeout(D,100))}for(let u of r)this.entries.delete(u.id),this.runtimeProcesses.delete(u.id);return this.persist(),a.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:o,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};qn(At.dirname(this.registryPath),{recursive:!0}),Yi(this.registryPath,JSON.stringify(e,null,2))}},hr=null});import{execFile as eu}from"child_process";import{rmSync as tu}from"fs";import{homedir as ru}from"os";import ro from"path";import{promisify as nu}from"util";async function no(t){let e=t.currentPid??process.pid,r=t.pidFilePath??iu,o=t.registry.getAll(),s=[...o].filter(n=>n.pid!==e).sort((n,u)=>Date.parse(u.startedAt)-Date.parse(n.startedAt));for(let n of s){if(!Z(n.pid)){t.registry.unregister(n.id);continue}try{await to(n,"SIGTERM")}catch(u){u instanceof Error?a.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:n.pid,pgid:n.pgid,type:n.type},u):a.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:n.pid,pgid:n.pgid,type:n.type,error:String(u)})}}await eo(s,5e3);let i=s.filter(n=>Z(n.pid));for(let n of i)try{await to(n,"SIGKILL")}catch(u){u instanceof Error?a.debug("SYSTEM","Failed to force kill child process",{pid:n.pid,pgid:n.pgid,type:n.type},u):a.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:n.pid,pgid:n.pgid,type:n.type,error:String(u)})}await eo(i,1e3);for(let n of s)t.registry.unregister(n.id);for(let n of o.filter(u=>u.pid===e))t.registry.unregister(n.id);try{tu(r,{force:!0})}catch(n){n instanceof Error?a.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:r},n):a.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:r,error:String(n)})}t.registry.pruneDeadEntries()}async function eo(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.filter(s=>Z(s.pid)).length===0)return;await new Promise(s=>setTimeout(s,100))}}async function to(t,e){let{pid:r,pgid:o}=t;if(process.platform!=="win32"){try{typeof o=="number"?process.kill(-o,e):process.kill(r,e)}catch(n){if(n instanceof Error&&n.code==="ESRCH")return;throw n}return}if(e==="SIGTERM"){try{process.kill(r,e)}catch(n){if(n instanceof Error&&n.code==="ESRCH")return;throw n}return}let s=await uu();if(s){await new Promise((n,u)=>{s(r,e,c=>{if(!c){n();return}if(c.code==="ESRCH"){n();return}u(c)})});return}let i=["/PID",String(r),"/T"];e==="SIGKILL"&&i.push("/F"),await ou("taskkill",i,{timeout:Ye.POWERSHELL_COMMAND,windowsHide:!0})}async function uu(){let t="tree-kill";try{let e=await import(t);return e.default??e}catch(e){return a.debug("SYSTEM","tree-kill module not available, using fallback",{},e instanceof Error?e:void 0),null}}var ou,su,iu,oo=m(()=>{"use strict";L();Er();Mt();ou=nu(eu),su=ro.join(ru(),".claude-mem"),iu=ro.join(su,"worker.pid")});function au(){let e=bt().pruneDeadEntries();e>0&&a.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function io(){we===null&&(we=setInterval(au,so),we.unref(),a.debug("SYSTEM","Health checker started",{intervalMs:so}))}function uo(){we!==null&&(clearInterval(we),we=null,a.debug("SYSTEM","Health checker stopped"))}var so,we,ao=m(()=>{"use strict";L();Mt();so=3e4,we=null});import{existsSync as cu,readFileSync as lu,rmSync as co}from"fs";import{homedir as Du}from"os";import lo from"path";function Do(t={}){let e=t.pidFilePath??pu;if(!cu(e))return"missing";let r=null;try{r=JSON.parse(lu(e,"utf-8"))}catch(s){return s instanceof Error?a.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):a.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),co(e,{force:!0}),"invalid"}return Qn(r)&&r?((t.logAlive??!0)&&a.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(a.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),co(e,{force:!0}),"stale")}var du,pu,Sr,CD,po=m(()=>{"use strict";L();Mt();oo();ao();du=lo.join(Du(),".claude-mem"),pu=lo.join(du,"worker.pid"),Sr=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),Do({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,io()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async o=>{if(this.shutdownInitiated){a.warn("SYSTEM",`Received ${o} but shutdown already in progress`);return}this.shutdownInitiated=!0,a.info("SYSTEM",`Received ${o}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?a.error("SYSTEM","Error during shutdown",{},s):a.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(i){i instanceof Error?a.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):a.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{a.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}uo(),this.stopPromise=no({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,o){this.registry.register(e,r,o)}unregisterProcess(e){this.registry.unregister(e)}getRegistry(){return this.registry}},CD=new Sr(bt())});import mo from"path";import{readFileSync as wD,existsSync as vD,writeFileSync as _D,renameSync as xD,mkdirSync as kD}from"fs";import{spawn as bD,execSync as MD}from"child_process";function gu(t,e={},r){return new Promise((o,s)=>{let i=setTimeout(()=>s(new Error(`Request timed out after ${r}ms`)),r);fetch(t,e).then(n=>{clearTimeout(i),o(n)},n=>{clearTimeout(i),s(n)})})}function Xe(){if(It!==null)return It;let t=mo.join(x.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=x.loadFromFile(t);return It=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),It}function fu(){if($t!==null)return $t;let t=mo.join(x.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return $t=x.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,$t}function Cu(t){return`http://${fu()}:${Xe()}${t}`}function Rt(t,e={}){let r=e.method??"GET",o=e.timeoutMs??mu,s=Cu(t),i={method:r};return e.headers&&(i.headers=e.headers),e.body&&(i.body=e.body),o>0?gu(s,i,o):fetch(s,i)}var mu,It,$t,Pt=m(()=>{"use strict";L();Er();me();Ve();Xn();po();mu=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;a.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Yn(Ye.HEALTH_CHECK)})();It=null,$t=null});import{existsSync as Eu,readFileSync as hu,writeFileSync as go,mkdirSync as fo,renameSync as Fu}from"fs";import{join as yr,basename as jD}from"path";function Co(t){try{return Eu(t)?JSON.parse(hu(t,"utf-8")):{}}catch(e){return a.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function Eo(t,e){let r=yr(t,"..");fo(r,{recursive:!0}),go(t,JSON.stringify(e,null,2))}function wr(t,e){let r=yr(t,".cursor","rules"),o=yr(r,"claude-mem-context.mdc"),s=`${o}.tmp`;fo(r,{recursive:!0});let i=`---
|
|
62
|
+
`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),d=D?`${D[1].split("/").pop()}:${D[2]}`:"unknown",p={...o,location:d};return this.warn(e,`[HAPPY-PATH] ${r}`,p,s),i}},a=new Er});function Yn(t){return process.platform==="win32"?Math.round(t*Ye.WINDOWS_MULTIPLIER):t}var Ye,Cr=m(()=>{"use strict";Ye={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 M,dirname as Li,basename as Bi}from"path";import{homedir as Vn}from"os";import{existsSync as Ni,mkdirSync as Fl}from"fs";import{execSync as yl}from"child_process";import{fileURLToPath as ji}from"url";function Ui(){return typeof __dirname<"u"?__dirname:Li(ji(import.meta.url))}function Wi(){if(process.env.CLAUDE_MEM_DATA_DIR)return process.env.CLAUDE_MEM_DATA_DIR;let t=M(Vn(),".claude-mem"),e=M(t,"settings.json");try{if(Ni(e)){let{readFileSync:r}=Rs("fs"),o=JSON.parse(r(e,"utf-8")),s=o.env??o;if(s.CLAUDE_MEM_DATA_DIR)return s.CLAUDE_MEM_DATA_DIR}}catch{}return t}var _l,B,ye,kt,xl,kl,Al,bl,Ml,Gi,Il,Rl,Hi,$l,Pl,Tl,Ol,Ve=m(()=>{"use strict";L();_l=Ui();B=Wi(),ye=process.env.CLAUDE_CONFIG_DIR||M(Vn(),".claude"),kt=M(ye,"plugins","marketplaces","thedotmack"),xl=M(B,"archives"),kl=M(B,"logs"),Al=M(B,"trash"),bl=M(B,"backups"),Ml=M(B,"modes"),Gi=M(B,"settings.json"),Il=M(B,"claude-mem.db"),Rl=M(B,"vector-db"),Hi=M(B,"observer-sessions"),$l=Bi(Hi),Pl=M(ye,"settings.json"),Tl=M(ye,"commands"),Ol=M(ye,"CLAUDE.md")});var Xn=m(()=>{"use strict";me();Ve()});var zn=m(()=>{"use strict"});import{spawn as Kl,spawnSync as Ki}from"child_process";import{existsSync as Ji,mkdirSync as qn,readFileSync as Zn,writeFileSync as Yi}from"fs";import{homedir as Vi}from"os";import At from"path";function Z(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(a.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return a.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}function Qi(t){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux")try{let e=Zn(`/proc/${t}/stat`,"utf-8"),r=e.lastIndexOf(") ");if(r<0)return null;let s=e.slice(r+2).split(" ")[19];return s&&/^\d+$/.test(s)?s:null}catch(e){return a.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}if(process.platform==="win32")return null;try{let e=Ki("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...process.env,LC_ALL:"C",LANG:"C"}});if(e.status!==0)return null;let r=e.stdout.trim();return r.length>0?r:null}catch(e){return a.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:e instanceof Error?e.message:String(e)}),null}}function Qn(t){if(!t||!Z(t.pid))return!1;if(!t.startToken)return!0;let e=Qi(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||a.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function bt(){return hr||(hr=new Fr),hr}var Xi,zi,qi,Zi,Fr,hr,Mt=m(()=>{"use strict";L();zn();Xi=5e3,zi=1e3,qi=At.join(Vi(),".claude-mem"),Zi=At.join(qi,"supervisor.json");Fr=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Zi){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,qn(At.dirname(this.registryPath),{recursive:!0}),!Ji(this.registryPath)){this.persist();return}try{let o=JSON.parse(Zn(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(o))this.entries.set(s,i)}catch(r){r instanceof Error?a.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):a.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&a.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,r,o){this.initialize(),this.entries.set(e,r),o&&this.runtimeProcesses.set(e,o),this.persist()}unregister(e){this.initialize(),this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let o=Date.parse(e.startedAt),s=Date.parse(r.startedAt);return(Number.isNaN(o)?0:o)-(Number.isNaN(s)?0:s)})}getBySession(e){let r=String(e);return this.getAll().filter(o=>o.sessionId!==void 0&&String(o.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}getByPid(e){return this.getAll().filter(r=>r.pid===e)}pruneDeadEntries(){this.initialize();let e=0;for(let[r,o]of this.entries)Z(o.pid)||(this.entries.delete(r),this.runtimeProcesses.delete(r),e+=1);return e>0&&this.persist(),e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let o=typeof e=="number"?e:Number(e)||void 0;a.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:o,pids:r.map(u=>u.pid)});let s=r.filter(u=>Z(u.pid));for(let u of s)try{typeof u.pgid=="number"&&process.platform!=="win32"?process.kill(-u.pgid,"SIGTERM"):process.kill(u.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&a.debug("SYSTEM",`Failed to SIGTERM session process PID ${u.pid}`,{pid:u.pid,pgid:u.pgid},c):a.warn("SYSTEM",`Failed to SIGTERM session process PID ${u.pid} (non-Error)`,{pid:u.pid,pgid:u.pgid,error:String(c)})}let i=Date.now()+Xi;for(;Date.now()<i&&s.filter(c=>Z(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100));let n=s.filter(u=>Z(u.pid));for(let u of n){a.warn("SYSTEM",`Session process PID ${u.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:u.pid,pgid:u.pgid,sessionId:o});try{typeof u.pgid=="number"&&process.platform!=="win32"?process.kill(-u.pgid,"SIGKILL"):process.kill(u.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&a.debug("SYSTEM",`Failed to SIGKILL session process PID ${u.pid}`,{pid:u.pid,pgid:u.pgid},c):a.warn("SYSTEM",`Failed to SIGKILL session process PID ${u.pid} (non-Error)`,{pid:u.pid,pgid:u.pgid,error:String(c)})}}if(n.length>0){let u=Date.now()+zi;for(;Date.now()<u&&n.filter(D=>Z(D.pid)).length!==0;)await new Promise(D=>setTimeout(D,100))}for(let u of r)this.entries.delete(u.id),this.runtimeProcesses.delete(u.id);return this.persist(),a.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:o,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};qn(At.dirname(this.registryPath),{recursive:!0}),Yi(this.registryPath,JSON.stringify(e,null,2))}},hr=null});import{execFile as eu}from"child_process";import{rmSync as tu}from"fs";import{homedir as ru}from"os";import ro from"path";import{promisify as nu}from"util";async function no(t){let e=t.currentPid??process.pid,r=t.pidFilePath??iu,o=t.registry.getAll(),s=[...o].filter(n=>n.pid!==e).sort((n,u)=>Date.parse(u.startedAt)-Date.parse(n.startedAt));for(let n of s){if(!Z(n.pid)){t.registry.unregister(n.id);continue}try{await to(n,"SIGTERM")}catch(u){u instanceof Error?a.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:n.pid,pgid:n.pgid,type:n.type},u):a.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:n.pid,pgid:n.pgid,type:n.type,error:String(u)})}}await eo(s,5e3);let i=s.filter(n=>Z(n.pid));for(let n of i)try{await to(n,"SIGKILL")}catch(u){u instanceof Error?a.debug("SYSTEM","Failed to force kill child process",{pid:n.pid,pgid:n.pgid,type:n.type},u):a.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:n.pid,pgid:n.pgid,type:n.type,error:String(u)})}await eo(i,1e3);for(let n of s)t.registry.unregister(n.id);for(let n of o.filter(u=>u.pid===e))t.registry.unregister(n.id);try{tu(r,{force:!0})}catch(n){n instanceof Error?a.debug("SYSTEM","Failed to remove PID file during shutdown",{pidFilePath:r},n):a.warn("SYSTEM","Failed to remove PID file during shutdown (non-Error)",{pidFilePath:r,error:String(n)})}t.registry.pruneDeadEntries()}async function eo(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.filter(s=>Z(s.pid)).length===0)return;await new Promise(s=>setTimeout(s,100))}}async function to(t,e){let{pid:r,pgid:o}=t;if(process.platform!=="win32"){try{typeof o=="number"?process.kill(-o,e):process.kill(r,e)}catch(n){if(n instanceof Error&&n.code==="ESRCH")return;throw n}return}if(e==="SIGTERM"){try{process.kill(r,e)}catch(n){if(n instanceof Error&&n.code==="ESRCH")return;throw n}return}let s=await uu();if(s){await new Promise((n,u)=>{s(r,e,c=>{if(!c){n();return}if(c.code==="ESRCH"){n();return}u(c)})});return}let i=["/PID",String(r),"/T"];e==="SIGKILL"&&i.push("/F"),await ou("taskkill",i,{timeout:Ye.POWERSHELL_COMMAND,windowsHide:!0})}async function uu(){let t="tree-kill";try{let e=await import(t);return e.default??e}catch(e){return a.debug("SYSTEM","tree-kill module not available, using fallback",{},e instanceof Error?e:void 0),null}}var ou,su,iu,oo=m(()=>{"use strict";L();Cr();Mt();ou=nu(eu),su=ro.join(ru(),".claude-mem"),iu=ro.join(su,"worker.pid")});function au(){let e=bt().pruneDeadEntries();e>0&&a.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function io(){we===null&&(we=setInterval(au,so),we.unref(),a.debug("SYSTEM","Health checker started",{intervalMs:so}))}function uo(){we!==null&&(clearInterval(we),we=null,a.debug("SYSTEM","Health checker stopped"))}var so,we,ao=m(()=>{"use strict";L();Mt();so=3e4,we=null});import{existsSync as cu,readFileSync as lu,rmSync as co}from"fs";import{homedir as Du}from"os";import lo from"path";function Do(t={}){let e=t.pidFilePath??pu;if(!cu(e))return"missing";let r=null;try{r=JSON.parse(lu(e,"utf-8"))}catch(s){return s instanceof Error?a.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):a.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),co(e,{force:!0}),"invalid"}return Qn(r)&&r?((t.logAlive??!0)&&a.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(a.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),co(e,{force:!0}),"stale")}var du,pu,Sr,ED,po=m(()=>{"use strict";L();Mt();oo();ao();du=lo.join(Du(),".claude-mem"),pu=lo.join(du,"worker.pid"),Sr=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),Do({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,io()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async o=>{if(this.shutdownInitiated){a.warn("SYSTEM",`Received ${o} but shutdown already in progress`);return}this.shutdownInitiated=!0,a.info("SYSTEM",`Received ${o}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?a.error("SYSTEM","Error during shutdown",{},s):a.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(i){i instanceof Error?a.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):a.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{a.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}uo(),this.stopPromise=no({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,o){this.registry.register(e,r,o)}unregisterProcess(e){this.registry.unregister(e)}getRegistry(){return this.registry}},ED=new Sr(bt())});import mo from"path";import{readFileSync as wD,existsSync as vD,writeFileSync as _D,renameSync as xD,mkdirSync as kD}from"fs";import{spawn as bD,execSync as MD}from"child_process";function gu(t,e={},r){return new Promise((o,s)=>{let i=setTimeout(()=>s(new Error(`Request timed out after ${r}ms`)),r);fetch(t,e).then(n=>{clearTimeout(i),o(n)},n=>{clearTimeout(i),s(n)})})}function Xe(){if(It!==null)return It;let t=mo.join(x.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=x.loadFromFile(t);return It=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),It}function fu(){if(Rt!==null)return Rt;let t=mo.join(x.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return Rt=x.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,Rt}function Eu(t){return`http://${fu()}:${Xe()}${t}`}function $t(t,e={}){let r=e.method??"GET",o=e.timeoutMs??mu,s=Eu(t),i={method:r};return e.headers&&(i.headers=e.headers),e.body&&(i.body=e.body),o>0?gu(s,i,o):fetch(s,i)}var mu,It,Rt,Pt=m(()=>{"use strict";L();Cr();me();Ve();Xn();po();mu=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;a.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Yn(Ye.HEALTH_CHECK)})();It=null,Rt=null});import{existsSync as Cu,readFileSync as hu,writeFileSync as go,mkdirSync as fo,renameSync as Fu}from"fs";import{join as yr,basename as jD}from"path";function Eo(t){try{return Cu(t)?JSON.parse(hu(t,"utf-8")):{}}catch(e){return a.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function Co(t,e){let r=yr(t,"..");fo(r,{recursive:!0}),go(t,JSON.stringify(e,null,2))}function wr(t,e){let r=yr(t,".cursor","rules"),o=yr(r,"claude-mem-context.mdc"),s=`${o}.tmp`;fo(r,{recursive:!0});let i=`---
|
|
63
63
|
alwaysApply: true
|
|
64
64
|
description: "Claude-mem context from past sessions (auto-updated)"
|
|
65
65
|
---
|
|
@@ -72,7 +72,7 @@ ${e}
|
|
|
72
72
|
|
|
73
73
|
---
|
|
74
74
|
*Updated after last session. Use claude-mem's MCP search tools for more detailed queries.*
|
|
75
|
-
`;go(s,i),Fu(s,o)}var ho=m(()=>{"use strict";L()});var Ao={};q(Ao,{checkCursorHooksStatus:()=>ko,configureCursorMcp:()=>xu,detectClaudeCode:()=>Iu,detectPlatform:()=>yo,findBunPath:()=>_e,findMcpServerPath:()=>ze,findWorkerServicePath:()=>ve,getScriptExtension:()=>vu,getTargetDir:()=>Lt,handleCursorCommand:()
|
|
75
|
+
`;go(s,i),Fu(s,o)}var ho=m(()=>{"use strict";L()});var Ao={};q(Ao,{checkCursorHooksStatus:()=>ko,configureCursorMcp:()=>xu,detectClaudeCode:()=>Iu,detectPlatform:()=>yo,findBunPath:()=>_e,findMcpServerPath:()=>ze,findWorkerServicePath:()=>ve,getScriptExtension:()=>vu,getTargetDir:()=>Lt,handleCursorCommand:()=>Ru,installCursorHooks:()=>_o,readCursorRegistry:()=>Ot,registerCursorProject:()=>wo,uninstallCursorHooks:()=>xo,unregisterCursorProject:()=>vo,updateCursorContextForProject:()=>_u,writeCursorRegistry:()=>kr});import f from"path";import{homedir as Tt}from"os";import{existsSync as G,readFileSync as Fo,writeFileSync as _r,unlinkSync as vr,mkdirSync as xr}from"fs";import{exec as Su}from"child_process";import{promisify as yu}from"util";function yo(){return process.platform==="win32"?"windows":"unix"}function vu(){return yo()==="windows"?".ps1":".sh"}function Ot(){return Eo(So)}function kr(t){Co(So,t)}function wo(t,e){let r=Ot();r[t]={workspacePath:e,installedAt:new Date().toISOString()},kr(r),a.info("CURSOR","Registered project for auto-context updates",{projectName:t,workspacePath:e})}function vo(t){let e=Ot();e[t]&&(delete e[t],kr(e),a.info("CURSOR","Unregistered project",{projectName:t}))}async function _u(t,e){let o=Ot()[t];if(o)try{let s=await $t(`/api/context/inject?project=${encodeURIComponent(t)}`);if(!s.ok)return;let i=await s.text();if(!i||!i.trim())return;wr(o.workspacePath,i),a.debug("CURSOR","Updated context file",{projectName:t,workspacePath:o.workspacePath})}catch(s){s instanceof Error?a.error("WORKER","Failed to update context file",{projectName:t},s):a.error("WORKER","Failed to update context file",{projectName:t},new Error(String(s)))}}function ze(){let t=[f.join(kt,"plugin","scripts","mcp-server.cjs"),f.join(process.cwd(),"plugin","scripts","mcp-server.cjs")];for(let e of t)if(G(e))return e;return null}function ve(){let t=[f.join(kt,"plugin","scripts","worker-service.cjs"),f.join(process.cwd(),"plugin","scripts","worker-service.cjs")];for(let e of t)if(G(e))return e;return null}function _e(){let t=[f.join(Tt(),".bun","bin","bun"),"/usr/local/bin/bun","/usr/bin/bun",...process.platform==="win32"?[f.join(Tt(),".bun","bin","bun.exe"),f.join(process.env.LOCALAPPDATA||"","bun","bun.exe")]:[]];for(let e of t)if(e&&G(e))return e;return"bun"}function Lt(t){switch(t){case"project":return f.join(process.cwd(),".cursor");case"user":return f.join(Tt(),".cursor");case"enterprise":return process.platform==="darwin"?"/Library/Application Support/Cursor":process.platform==="linux"?"/etc/cursor":process.platform==="win32"?f.join(process.env.ProgramData||"C:\\ProgramData","Cursor"):null;default:return null}}function xu(t){let e=ze();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 r=Lt(t);if(!r)return console.error(`Invalid target: ${t}. Use: project or user`),1;let o=f.join(r,"mcp.json");try{xr(r,{recursive:!0});let s={mcpServers:{}};if(G(o))try{s=JSON.parse(Fo(o,"utf-8")),s.mcpServers||(s.mcpServers={})}catch(i){i instanceof Error?a.error("WORKER","Corrupt mcp.json, creating new config",{path:o},i):a.error("WORKER","Corrupt mcp.json, creating new config",{path:o},new Error(String(i))),s={mcpServers:{}}}return s.mcpServers["claude-mem"]={command:"node",args:[e]},_r(o,JSON.stringify(s,null,2)),console.log(` Configured MCP server in ${t==="user"?"~/.cursor":".cursor"}/mcp.json`),console.log(` Server path: ${e}`),0}catch(s){return console.error(`Failed to configure MCP: ${s.message}`),1}}async function _o(t){console.log(`
|
|
76
76
|
Installing Claude-Mem Cursor hooks (${t} level)...
|
|
77
77
|
`);let e=Lt(t);if(!e)return console.error(`Invalid target: ${t}. Use: project, user, or enterprise`),1;let r=ve();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 o=process.cwd(),s=f.join(e,"hooks.json"),i=_e(),n=i.replace(/\\/g,"\\\\"),u=r.replace(/\\/g,"\\\\"),c=d=>`"${n}" "${u}" hook cursor ${d}`;console.log(` Using Bun runtime: ${i}`);let D={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(e,{recursive:!0}),await ku(s,D,r,t,e,o),0}catch(d){let p=d instanceof Error?d.message:String(d);return console.error(`
|
|
78
78
|
Installation failed: ${p}`),t==="enterprise"&&console.error(" Tip: Enterprise installation may require sudo/admin privileges"),1}}async function ku(t,e,r,o,s,i){_r(t,JSON.stringify(e,null,2)),console.log(" Created hooks.json (unified CLI mode)"),console.log(` Worker service: ${r}`),o==="project"&&await Au(s,i),console.log(`
|
|
@@ -99,7 +99,7 @@ description: "Claude-mem context from past sessions (auto-updated)"
|
|
|
99
99
|
*No context yet. Complete your first session and context will appear here.*
|
|
100
100
|
|
|
101
101
|
Use claude-mem's MCP search tools for manual memory queries.
|
|
102
|
-
`),console.log(" Created placeholder context file (will populate after first session)")}wo(o,e),console.log(" Registered for auto-context updates")}async function bu(t,e){if(!(await
|
|
102
|
+
`),console.log(" Created placeholder context file (will populate after first session)")}wo(o,e),console.log(" Registered for auto-context updates")}async function bu(t,e){if(!(await $t("/api/readiness")).ok)return!1;let o=await $t(`/api/context/inject?project=${encodeURIComponent(t)}`);if(!o.ok)return!1;let s=await o.text();return s&&s.trim()?(wr(e,s),console.log(" Generated initial context from existing memory"),!0):!1}function xo(t){console.log(`
|
|
103
103
|
Uninstalling Claude-Mem Cursor hooks (${t} level)...
|
|
104
104
|
`);let e=Lt(t);if(!e)return console.error(`Invalid target: ${t}`),1;let r=f.join(e,"hooks"),o=f.join(e,"hooks.json"),s=["common.sh","session-init.sh","context-inject.sh","save-observation.sh","save-file-edit.sh","session-summary.sh"],i=["common.ps1","session-init.ps1","context-inject.ps1","save-observation.ps1","save-file-edit.ps1","session-summary.ps1"],n=[...s,...i];try{return Mu(r,n,o,t,e),0}catch(u){let c=u instanceof Error?u.message:String(u);return console.error(`
|
|
105
105
|
Uninstallation failed: ${c}`),1}}function Mu(t,e,r,o,s){for(let i of e){let n=f.join(t,i);G(n)&&(vr(n),console.log(` Removed legacy script: ${i}`))}if(G(r)&&(vr(r),console.log(" Removed hooks.json")),o==="project"){let i=f.join(s,"rules","claude-mem-context.mdc");G(i)&&(vr(i),console.log(" Removed context file"));let n=f.basename(process.cwd());vo(n),console.log(" Unregistered from auto-context updates")}console.log(`
|
|
@@ -107,7 +107,7 @@ Uninstallation complete!
|
|
|
107
107
|
`),console.log("Restart Cursor to apply changes.")}function ko(){console.log(`
|
|
108
108
|
Claude-Mem Cursor Hooks Status
|
|
109
109
|
`);let t=[{name:"Project",dir:f.join(process.cwd(),".cursor")},{name:"User",dir:f.join(Tt(),".cursor")}];process.platform==="darwin"?t.push({name:"Enterprise",dir:"/Library/Application Support/Cursor"}):process.platform==="linux"&&t.push({name:"Enterprise",dir:"/etc/cursor"});let e=!1;for(let r of t){let o=f.join(r.dir,"hooks.json"),s=f.join(r.dir,"hooks");if(G(o)){e=!0,console.log(`${r.name}: Installed`),console.log(` Config: ${o}`);let i=null;try{i=JSON.parse(Fo(o,"utf-8"))}catch(n){n instanceof Error?a.error("WORKER","Unable to parse hooks.json",{path:o},n):a.error("WORKER","Unable to parse hooks.json",{path:o},new Error(String(n))),console.log(" Mode: Unable to parse hooks.json")}if(i){let n=i?.hooks?.beforeSubmitPrompt?.[0]?.command||"";if(n.includes("worker-service.cjs")&&n.includes("hook cursor"))console.log(" Mode: Unified CLI (bun worker-service.cjs)");else{let u=["session-init.sh","context-inject.sh","save-observation.sh"],c=["session-init.ps1","context-inject.ps1","save-observation.ps1"],D=u.some(p=>G(f.join(s,p))),d=c.some(p=>G(f.join(s,p)));D||d?(console.log(" Mode: Legacy shell scripts (consider reinstalling for unified CLI)"),D&&d?console.log(" Platform: Both (bash + PowerShell)"):D?console.log(" Platform: Unix (bash)"):d&&console.log(" Platform: Windows (PowerShell)")):console.log(" Mode: Unknown configuration")}}if(r.name==="Project"){let n=f.join(r.dir,"rules","claude-mem-context.mdc");G(n)?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 e||console.log(`No hooks installed. Run: claude-mem cursor install
|
|
110
|
-
`),0}async function Iu(){try{let{stdout:e}=await wu("which claude || where claude",{timeout:5e3});if(e.trim())return!0}catch(e){e instanceof Error?a.debug("WORKER","Claude CLI not in PATH",{},e):a.debug("WORKER","Claude CLI not in PATH",{},new Error(String(e)))}let t=f.join(ye,"plugins");return!!G(t)}async function
|
|
110
|
+
`),0}async function Iu(){try{let{stdout:e}=await wu("which claude || where claude",{timeout:5e3});if(e.trim())return!0}catch(e){e instanceof Error?a.debug("WORKER","Claude CLI not in PATH",{},e):a.debug("WORKER","Claude CLI not in PATH",{},new Error(String(e)))}let t=f.join(ye,"plugins");return!!G(t)}async function Ru(t,e){switch(t){case"install":{let r=e[0]||"project";return _o(r)}case"uninstall":{let r=e[0]||"project";return xo(r)}case"status":return ko();case"setup":return console.log("Use the main entry point for setup"),0;default:return console.log(`
|
|
111
111
|
Claude-Mem Cursor Integration
|
|
112
112
|
|
|
113
113
|
Usage: claude-mem cursor <command> [options]
|
|
@@ -131,7 +131,7 @@ Examples:
|
|
|
131
131
|
claude-mem cursor status # Check if hooks are installed
|
|
132
132
|
|
|
133
133
|
For more info: https://docs.claude-mem.ai/cursor
|
|
134
|
-
`),0}}var wu,So,qe=m(()=>{"use strict";L();Pt();Ve();ho();wu=yu(Su),So=f.join(B,"cursor-projects.json")});var Ir={};q(Ir,{checkGeminiCliHooksStatus:()
|
|
134
|
+
`),0}}var wu,So,qe=m(()=>{"use strict";L();Pt();Ve();ho();wu=yu(Su),So=f.join(B,"cursor-projects.json")});var Ir={};q(Ir,{checkGeminiCliHooksStatus:()=>$o,handleGeminiCliCommand:()=>Uu,installGeminiCliHooks:()=>Io,uninstallGeminiCliHooks:()=>Ro});import Ar from"path";import{homedir as $u}from"os";import{existsSync as xe,readFileSync as Bt,writeFileSync as br,mkdirSync as bo}from"fs";function Tu(t,e,r){let o=ke[r];if(!o)throw new Error(`Unknown Gemini CLI event: ${r}`);let s=t.replace(/\\/g,"\\\\"),i=e.replace(/\\/g,"\\\\");return`"${s}" "${i}" hook gemini-cli ${o}`}function Ou(t){return{matcher:"*",hooks:[{name:Ze,type:"command",command:t,timeout:Pu}]}}function Mr(){if(!xe(P))return{};let t=Bt(P,"utf-8");try{return JSON.parse(t)}catch(e){throw e instanceof Error?a.error("WORKER","Corrupt JSON in Gemini settings",{path:P},e):a.error("WORKER","Corrupt JSON in Gemini settings",{path:P},new Error(String(e))),new Error(`Corrupt JSON in ${P}, refusing to overwrite user settings`)}}function Mo(t){bo(Nt,{recursive:!0}),br(P,JSON.stringify(t,null,2)+`
|
|
135
135
|
`)}function Lu(t,e){let r={...t};r.hooks||(r.hooks={});for(let[o,s]of Object.entries(e)){let i=r.hooks[o]??[];for(let n of s){let u=i.findIndex(c=>c.hooks.some(D=>D.name===Ze));if(u>=0){let c=i[u],D=c.hooks.findIndex(d=>d.name===Ze);D>=0?c.hooks[D]=n.hooks[0]:c.hooks.push(n.hooks[0])}else i.push(n)}r.hooks[o]=i}return r}function Bu(){let t="<claude-mem-context>",r=`${t}
|
|
136
136
|
# Memory Context from Past Sessions
|
|
137
137
|
|
|
@@ -158,12 +158,12 @@ Next steps:
|
|
|
158
158
|
Context Injection:
|
|
159
159
|
Context from past sessions is injected via ~/.gemini/GEMINI.md
|
|
160
160
|
and automatically included in Gemini CLI conversations.
|
|
161
|
-
`)}function
|
|
161
|
+
`)}function Ro(){if(console.log(`
|
|
162
162
|
Uninstalling Claude-Mem Gemini CLI hooks...
|
|
163
163
|
`),!xe(P))return console.log(" No Gemini CLI settings found \u2014 nothing to uninstall."),0;try{let t=Mr();if(!t.hooks)return console.log(" No hooks found in Gemini CLI settings \u2014 nothing to uninstall."),0;let e=0;for(let[r,o]of Object.entries(t.hooks)){let s=o.map(i=>{let n=i.hooks.filter(u=>u.name!==Ze);return e+=i.hooks.length-n.length,{...i,hooks:n}}).filter(i=>i.hooks.length>0);s.length>0?t.hooks[r]=s:delete t.hooks[r]}return Object.keys(t.hooks).length===0&&delete t.hooks,ju(t,e),0}catch(t){let e=t instanceof Error?t.message:String(t);return console.error(`
|
|
164
164
|
Uninstallation failed: ${e}`),1}}function ju(t,e){if(Mo(t),console.log(` Removed ${e} claude-mem hook(s) from ${P}`),xe(z)){let r=Bt(z,"utf-8"),o=/\n?<claude-mem-context>[\s\S]*?<\/claude-mem-context>\n?/;o.test(r)&&(r=r.replace(o,""),br(z,r),console.log(` Removed context section from ${z}`))}console.log(`
|
|
165
165
|
Uninstallation complete!
|
|
166
|
-
`),console.log("Restart Gemini CLI to apply changes.")}function
|
|
166
|
+
`),console.log("Restart Gemini CLI to apply changes.")}function $o(){if(console.log(`
|
|
167
167
|
Claude-Mem Gemini CLI Hooks Status
|
|
168
168
|
`),!xe(P))return console.log("Gemini CLI settings: Not found"),console.log(` Expected at: ${P}
|
|
169
169
|
`),console.log(`No hooks installed. Run: claude-mem install --ide gemini-cli
|
|
@@ -172,7 +172,7 @@ Claude-Mem Gemini CLI Hooks Status
|
|
|
172
172
|
`),console.log(`No hooks installed. Run: claude-mem install --ide gemini-cli
|
|
173
173
|
`),0;let e=[];for(let[r,o]of Object.entries(t.hooks))o.some(i=>i.hooks.some(n=>n.name===Ze))&&e.push(r);if(e.length===0)return console.log(`Gemini CLI settings: Found, but no claude-mem hooks
|
|
174
174
|
`),console.log(`Run: claude-mem install --ide gemini-cli
|
|
175
|
-
`),0;console.log(`Settings: ${P}`),console.log("Mode: Unified CLI (bun worker-service.cjs hook gemini-cli)"),console.log(`Events: ${e.length} of ${Object.keys(ke).length} mapped`);for(let r of e){let o=ke[r]??"unknown";console.log(` ${r} \u2192 ${o}`)}return xe(z)?Bt(z,"utf-8").includes("<claude-mem-context>")?console.log(`Context: Active (${z})`):console.log("Context: GEMINI.md exists but missing claude-mem section"):console.log("Context: No GEMINI.md found"),console.log(""),0}async function Uu(t,e){switch(t){case"install":return Io();case"uninstall":return
|
|
175
|
+
`),0;console.log(`Settings: ${P}`),console.log("Mode: Unified CLI (bun worker-service.cjs hook gemini-cli)"),console.log(`Events: ${e.length} of ${Object.keys(ke).length} mapped`);for(let r of e){let o=ke[r]??"unknown";console.log(` ${r} \u2192 ${o}`)}return xe(z)?Bt(z,"utf-8").includes("<claude-mem-context>")?console.log(`Context: Active (${z})`):console.log("Context: GEMINI.md exists but missing claude-mem section"):console.log("Context: No GEMINI.md found"),console.log(""),0}async function Uu(t,e){switch(t){case"install":return Io();case"uninstall":return Ro();case"status":return $o();default:return console.log(`
|
|
176
176
|
Claude-Mem Gemini CLI Integration
|
|
177
177
|
|
|
178
178
|
Usage: claude-mem gemini-cli <command>
|
|
@@ -188,15 +188,15 @@ Examples:
|
|
|
188
188
|
claude-mem gemini-cli uninstall # Remove hooks
|
|
189
189
|
|
|
190
190
|
For more info: https://docs.claude-mem.ai/usage/gemini-provider
|
|
191
|
-
`),0}}var Nt,P,z,Ze,Pu,ke
|
|
191
|
+
`),0}}var Nt,P,z,Ze,Pu,ke,Rr=m(()=>{"use strict";L();qe();Nt=Ar.join($u(),".gemini"),P=Ar.join(Nt,"settings.json"),z=Ar.join(Nt,"GEMINI.md"),Ze="claude-mem",Pu=1e4,ke={SessionStart:"context",BeforeAgent:"session-init",AfterAgent:"observation",BeforeTool:"observation",AfterTool:"observation",PreCompress:"summarize",Notification:"observation"}});import Wu from"path";import{existsSync as Gu,readFileSync as Hu,writeFileSync as $r,mkdirSync as Ku}from"fs";function jt(t,e,r){let o=Wu.dirname(t);Ku(o,{recursive:!0});let s=`${Qe}
|
|
192
192
|
${e}
|
|
193
193
|
${Ae}`;if(Gu(t)){let i=Hu(t,"utf-8"),n=i.indexOf(Qe),u=i.indexOf(Ae);n!==-1&&u!==-1?i=i.slice(0,n)+s+i.slice(u+Ae.length):i=i.trimEnd()+`
|
|
194
194
|
|
|
195
195
|
`+s+`
|
|
196
|
-
|
|
196
|
+
`,$r(t,i,"utf-8")}else r?$r(t,`${r}
|
|
197
197
|
|
|
198
198
|
${s}
|
|
199
|
-
`,"utf-8")
|
|
199
|
+
`,"utf-8"):$r(t,s+`
|
|
200
200
|
`,"utf-8")}var Qe,Ae,Pr=m(()=>{"use strict";Qe="<claude-mem-context>",Ae="</claude-mem-context>"});var Lr={};q(Lr,{checkOpenCodeStatus:()=>ta,findBuiltPluginPath:()=>Lo,getInstalledPluginPath:()=>tt,getOpenCodeAgentsMdPath:()=>et,getOpenCodeConfigDirectory:()=>Ut,getOpenCodePluginsDirectory:()=>Tr,injectContextIntoAgentsMd:()=>Or,installOpenCodeIntegration:()=>ra,installOpenCodePlugin:()=>Bo,syncContextToAgentsMd:()=>zu,uninstallOpenCodePlugin:()=>ea});import ae from"path";import{homedir as Po}from"os";import{fileURLToPath as Ju}from"url";import{existsSync as be,readFileSync as To,writeFileSync as Yu,mkdirSync as Vu,copyFileSync as Xu,unlinkSync as Oo}from"fs";function Ut(){return process.env.OPENCODE_CONFIG_DIR?process.env.OPENCODE_CONFIG_DIR:ae.join(Po(),".config","opencode")}function Tr(){return ae.join(Ut(),"plugins")}function et(){return ae.join(Ut(),"AGENTS.md")}function tt(){return ae.join(Tr(),"claude-mem.js")}function Lo(){let t=[ae.join(process.env.CLAUDE_CONFIG_DIR||ae.join(Po(),".claude"),"plugins","marketplaces","thedotmack","dist","opencode-plugin","index.js"),ae.join(ae.dirname(Ju(import.meta.url)),"..","..","..","dist","opencode-plugin","index.js")];for(let e of t)if(be(e))return e;return null}function Bo(){let t=Lo();if(!t)return console.error("Could not find built OpenCode plugin bundle."),console.error(" Expected at: dist/opencode-plugin/index.js"),console.error(" Run the build first: npm run build"),1;let e=Tr(),r=tt();try{return Vu(e,{recursive:!0}),Xu(t,r),console.log(` Plugin installed to: ${r}`),a.info("OPENCODE","Plugin installed",{destination:r}),0}catch(o){let s=o instanceof Error?o.message:String(o);return console.error(`Failed to install OpenCode plugin: ${s}`),1}}function Or(t){let e=et();try{return jt(e,t,"# Claude-Mem Memory Context"),a.info("OPENCODE","Context injected into AGENTS.md",{path:e}),0}catch(r){let o=r instanceof Error?r.message:String(r);return console.error(`Failed to inject context into AGENTS.md: ${o}`),1}}async function zu(t,e){try{await Zu(t,e)}catch(r){r instanceof Error?a.debug("WORKER","Worker not available during context sync",{},r):a.debug("WORKER","Worker not available during context sync",{},new Error(String(r)))}}async function qu(){let t=Xe();if(!(await fetch(`http://127.0.0.1:${t}/api/readiness`)).ok)return null;let r=await fetch(`http://127.0.0.1:${t}/api/context/inject?project=opencode`);if(!r.ok)return null;let o=await r.text();return o&&o.trim()?o:null}async function Zu(t,e){let r=await fetch(`http://127.0.0.1:${t}/api/context/inject?project=${encodeURIComponent(e)}`);if(!r.ok)return;let o=await r.text();o&&o.trim()&&Or(o)!==0&&a.warn("OPENCODE","Failed to inject context into AGENTS.md during sync")}function Qu(t,e){e.length===0||e==="# Claude-Mem Memory Context"?(Oo(t),console.log(" Removed empty AGENTS.md")):(Yu(t,e+`
|
|
201
201
|
`,"utf-8"),console.log(" Cleaned context from AGENTS.md"))}function ea(){let t=!1,e=tt();if(be(e))try{Oo(e),console.log(` Removed plugin: ${e}`)}catch(o){let s=o instanceof Error?o.message:String(o);console.error(` Failed to remove plugin: ${s}`),t=!0}let r=et();if(be(r)){let o;try{o=To(r,"utf-8")}catch(n){let u=n instanceof Error?n.message:String(n);console.error(` Failed to read AGENTS.md: ${u}`),t=!0,o=""}let s=o.indexOf(Qe),i=o.indexOf(Ae);if(s!==-1&&i!==-1){o=o.slice(0,s).trimEnd()+`
|
|
202
202
|
`+o.slice(i+Ae.length).trimStart();let n=o.trim();try{Qu(r,n)}catch(u){let c=u instanceof Error?u.message:String(u);console.error(` Failed to clean AGENTS.md: ${c}`),t=!0}}}return t?1:0}function ta(){console.log(`
|
|
@@ -278,23 +278,23 @@ Examples:
|
|
|
278
278
|
claude-mem windsurf status # Check if hooks are installed
|
|
279
279
|
|
|
280
280
|
For more info: https://docs.claude-mem.ai/windsurf
|
|
281
|
-
`),0}}var Uo,k,No,Me,Wt,Wr=m(()=>{"use strict";L();Pt();Ve();qe();Uo=H.join(na(),".codeium","windsurf"),k=H.join(Uo,"hooks.json"),No=6e3,Me=H.join(B,"windsurf-projects.json"),Wt=["pre_user_prompt","post_write_code","post_run_command","post_mcp_tool_use","post_cascade_response"]});var Kr={};q(Kr,{checkOpenClawStatus:()=>Fa,findPluginManifestPath:()=>qo,findPluginSkillsDirectory:()=>Zo,findPreBuiltPluginDirectory:()=>zo,getOpenClawClaudeMemExtensionDirectory:()=>ot,getOpenClawConfigDirectory:()=>nt,getOpenClawConfigFilePath:()
|
|
282
|
-
`,"utf-8")}function fa(t,e="openclaw",r=!0){let o=Hr();if(o.plugins||(o.plugins={}),o.plugins.slots||(o.plugins.slots={}),o.plugins.entries||(o.plugins.entries={}),o.plugins.slots.memory="claude-mem",!o.plugins.entries["claude-mem"])o.plugins.entries["claude-mem"]={enabled:!0,config:{workerPort:t,project:e,syncMemoryFile:r}};else{o.plugins.entries["claude-mem"].enabled=!0,o.plugins.entries["claude-mem"].config||(o.plugins.entries["claude-mem"].config={});let s=o.plugins.entries["claude-mem"].config;s.workerPort===void 0&&(s.workerPort=t),s.project===void 0&&(s.project=e),s.syncMemoryFile===void 0&&(s.syncMemoryFile=r)}Qo(o)}function
|
|
283
|
-
`,"utf-8");let n=x.getInt("CLAUDE_MEM_WORKER_PORT");fa(n),console.log(" Registered in openclaw.json"),a.info("OPENCLAW","Plugin installed",{destination:r})}function ha(){let t=!1,e=ot();if(Q(e))try{ga(e,{recursive:!0,force:!0}),console.log(` Removed extension: ${e}`)}catch(r){let o=r instanceof Error?r.message:String(r);console.error(` Failed to remove extension directory: ${o}`),t=!0}try{
|
|
281
|
+
`),0}}var Uo,k,No,Me,Wt,Wr=m(()=>{"use strict";L();Pt();Ve();qe();Uo=H.join(na(),".codeium","windsurf"),k=H.join(Uo,"hooks.json"),No=6e3,Me=H.join(B,"windsurf-projects.json"),Wt=["pre_user_prompt","post_write_code","post_run_command","post_mcp_tool_use","post_cascade_response"]});var Kr={};q(Kr,{checkOpenClawStatus:()=>Fa,findPluginManifestPath:()=>qo,findPluginSkillsDirectory:()=>Zo,findPreBuiltPluginDirectory:()=>zo,getOpenClawClaudeMemExtensionDirectory:()=>ot,getOpenClawConfigDirectory:()=>nt,getOpenClawConfigFilePath:()=>Re,getOpenClawExtensionsDirectory:()=>Xo,installOpenClawIntegration:()=>Sa,installOpenClawPlugin:()=>es,uninstallOpenClawPlugin:()=>ha});import v from"path";import{homedir as Jt}from"os";import{existsSync as Q,readFileSync as ma,writeFileSync as Yo,mkdirSync as Vo,cpSync as Gr,rmSync as ga}from"fs";function nt(){return v.join(Jt(),".openclaw")}function Xo(){return v.join(nt(),"extensions")}function ot(){return v.join(Xo(),"claude-mem")}function Re(){return v.join(nt(),"openclaw.json")}function zo(){let t=[v.join(process.env.CLAUDE_CONFIG_DIR||v.join(Jt(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let e of t){let r=v.join(e,"openclaw","dist"),o=v.join(r,"index.js");if(Q(o))return r}return null}function qo(){let t=[v.join(process.env.CLAUDE_CONFIG_DIR||v.join(Jt(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let e of t){let r=v.join(e,"openclaw","openclaw.plugin.json");if(Q(r))return r}return null}function Zo(){let t=[v.join(process.env.CLAUDE_CONFIG_DIR||v.join(Jt(),".claude"),"plugins","marketplaces","thedotmack"),process.cwd()];for(let e of t){let r=v.join(e,"openclaw","skills");if(Q(r))return r}return null}function Hr(){let t=Re();if(!Q(t))return{};try{return JSON.parse(ma(t,"utf-8"))}catch(e){let r=e instanceof Error?e:new Error(String(e));throw a.error("WORKER","Failed to parse openclaw.json",{path:t},r),r}}function Qo(t){let e=nt();Vo(e,{recursive:!0}),Yo(Re(),JSON.stringify(t,null,2)+`
|
|
282
|
+
`,"utf-8")}function fa(t,e="openclaw",r=!0){let o=Hr();if(o.plugins||(o.plugins={}),o.plugins.slots||(o.plugins.slots={}),o.plugins.entries||(o.plugins.entries={}),o.plugins.slots.memory="claude-mem",!o.plugins.entries["claude-mem"])o.plugins.entries["claude-mem"]={enabled:!0,config:{workerPort:t,project:e,syncMemoryFile:r}};else{o.plugins.entries["claude-mem"].enabled=!0,o.plugins.entries["claude-mem"].config||(o.plugins.entries["claude-mem"].config={});let s=o.plugins.entries["claude-mem"].config;s.workerPort===void 0&&(s.workerPort=t),s.project===void 0&&(s.project=e),s.syncMemoryFile===void 0&&(s.syncMemoryFile=r)}Qo(o)}function Ea(){let t=Re();if(!Q(t))return;let e=Hr();e.plugins?.entries?.["claude-mem"]&&delete e.plugins.entries["claude-mem"],e.plugins?.slots?.memory==="claude-mem"&&delete e.plugins.slots.memory,Qo(e)}function es(){let t=zo();if(!t)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 e=ot(),r=v.join(e,"dist"),o=qo(),s=Zo(),i={name:"claude-mem",version:"1.0.0",type:"module",main:"dist/index.js",openclaw:{extensions:["./dist/index.js"]}};try{return Vo(r,{recursive:!0}),Ca(t,r,e,o,s,i),0}catch(n){let u=n instanceof Error?n.message:String(n);return console.error(`Failed to install OpenClaw plugin: ${u}`),1}}function Ca(t,e,r,o,s,i){if(Gr(t,e,{recursive:!0,force:!0}),console.log(` Plugin dist copied to: ${e}`),o){let u=v.join(r,"openclaw.plugin.json");Gr(o,u,{force:!0}),console.log(` Plugin manifest copied to: ${u}`)}if(s){let u=v.join(r,"skills");Gr(s,u,{recursive:!0,force:!0}),console.log(` Skills copied to: ${u}`)}Yo(v.join(r,"package.json"),JSON.stringify(i,null,2)+`
|
|
283
|
+
`,"utf-8");let n=x.getInt("CLAUDE_MEM_WORKER_PORT");fa(n),console.log(" Registered in openclaw.json"),a.info("OPENCLAW","Plugin installed",{destination:r})}function ha(){let t=!1,e=ot();if(Q(e))try{ga(e,{recursive:!0,force:!0}),console.log(` Removed extension: ${e}`)}catch(r){let o=r instanceof Error?r.message:String(r);console.error(` Failed to remove extension directory: ${o}`),t=!0}try{Ea(),console.log(" Unregistered from openclaw.json")}catch(r){let o=r instanceof Error?r.message:String(r);console.error(` Failed to update openclaw.json: ${o}`),t=!0}return t?1:0}function Fa(){console.log(`
|
|
284
284
|
Claude-Mem OpenClaw Integration Status
|
|
285
|
-
`);let t=nt(),e=ot(),r
|
|
285
|
+
`);let t=nt(),e=ot(),r=Re(),o=v.join(e,"dist","index.js");if(console.log(`Config directory: ${t}`),console.log(` Exists: ${Q(t)?"yes":"no"}`),console.log(""),console.log(`Extension directory: ${e}`),console.log(` Exists: ${Q(e)?"yes":"no"}`),console.log(` Plugin entry: ${Q(o)?"yes":"no"}`),console.log(""),console.log(`Config (openclaw.json): ${r}`),Q(r)){let s=Hr(),i=s.plugins?.entries?.["claude-mem"]!==void 0,n=s.plugins?.entries?.["claude-mem"]?.enabled===!0,u=s.plugins?.slots?.memory==="claude-mem";if(console.log(" Exists: yes"),console.log(` Registered: ${i?"yes":"no"}`),console.log(` Enabled: ${n?"yes":"no"}`),console.log(` Memory slot: ${u?"yes":"no"}`),i){let c=s.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 Sa(){console.log(`
|
|
286
286
|
Installing Claude-Mem for OpenClaw...
|
|
287
287
|
`);let t=es();if(t!==0)return t;let e=ot();return console.log(`
|
|
288
288
|
Installation complete!
|
|
289
289
|
|
|
290
290
|
Plugin installed to: ${e}
|
|
291
|
-
Config updated: ${
|
|
291
|
+
Config updated: ${Re()}
|
|
292
292
|
|
|
293
293
|
Next steps:
|
|
294
294
|
1. Start claude-mem worker: npx claude-mem start
|
|
295
295
|
2. Restart OpenClaw to load the plugin
|
|
296
296
|
3. Memory capture is automatic from then on
|
|
297
|
-
`),0}var Jr=m(()=>{"use strict";L();me()});import{existsSync as Ad,readFileSync as bd,writeFileSync as Md,mkdirSync as Id}from"fs";import{homedir as ts}from"os";import{join as rs,dirname as Pd}from"path";var ge,st,ya,Yt,ns=m(()=>{"use strict";ge=rs(ts(),".claude-mem","transcript-watch.json"),st=rs(ts(),".claude-mem","transcript-watch-state.json"),ya={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"}]},Yt={version:1,schemas:{codex:ya},watches:[{name:"codex",path:"~/.codex/sessions/**/*.jsonl",schema:"codex",startAtEnd:!0,context:{mode:"agents",updateOn:["session_start","session_end"]}}],stateFile:st}});var zr={};q(zr,{installCodexCli:()=>ba,uninstallCodexCli:()=>Ia});import Vr from"path";import{homedir as os}from"os";import{existsSync as Xr,readFileSync as Yr,writeFileSync as Vt,mkdirSync as wa}from"fs";function ss(){let t=ge;if(!Xr(t))return{version:1,schemas:{},watches:[],stateFile:st};try{let e=Yr(t,"utf-8"),r=JSON.parse(e);return r.version||(r.version=1),r.watches||(r.watches=[]),r.schemas||(r.schemas={}),r.stateFile||(r.stateFile=st),r}catch(e){e instanceof Error?a.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:t},e):a.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:t},new Error(String(e)));let r=`${t}.backup.${Date.now()}`;return Vt(r,Yr(t)),console.warn(` Backed up corrupt transcript-watch.json to ${r}`),{version:1,schemas:{},watches:[],stateFile:st}}}function xa(t){let e={...t};e.schemas={...e.schemas};let r=Yt.schemas?.[
|
|
297
|
+
`),0}var Jr=m(()=>{"use strict";L();me()});import{existsSync as Ad,readFileSync as bd,writeFileSync as Md,mkdirSync as Id}from"fs";import{homedir as ts}from"os";import{join as rs,dirname as Pd}from"path";var ge,st,ya,Yt,ns=m(()=>{"use strict";ge=rs(ts(),".claude-mem","transcript-watch.json"),st=rs(ts(),".claude-mem","transcript-watch-state.json"),ya={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"}]},Yt={version:1,schemas:{codex:ya},watches:[{name:"codex",path:"~/.codex/sessions/**/*.jsonl",schema:"codex",startAtEnd:!0,context:{mode:"agents",updateOn:["session_start","session_end"]}}],stateFile:st}});var zr={};q(zr,{installCodexCli:()=>ba,uninstallCodexCli:()=>Ia});import Vr from"path";import{homedir as os}from"os";import{existsSync as Xr,readFileSync as Yr,writeFileSync as Vt,mkdirSync as wa}from"fs";function ss(){let t=ge;if(!Xr(t))return{version:1,schemas:{},watches:[],stateFile:st};try{let e=Yr(t,"utf-8"),r=JSON.parse(e);return r.version||(r.version=1),r.watches||(r.watches=[]),r.schemas||(r.schemas={}),r.stateFile||(r.stateFile=st),r}catch(e){e instanceof Error?a.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:t},e):a.error("WORKER","Corrupt transcript-watch.json, creating backup",{path:t},new Error(String(e)));let r=`${t}.backup.${Date.now()}`;return Vt(r,Yr(t)),console.warn(` Backed up corrupt transcript-watch.json to ${r}`),{version:1,schemas:{},watches:[],stateFile:st}}}function xa(t){let e={...t};e.schemas={...e.schemas};let r=Yt.schemas?.[$e];r&&(e.schemas[$e]=r);let o=Yt.watches.find(s=>s.name===$e);if(o){let s=e.watches.findIndex(i=>i.name===$e);s!==-1?e.watches[s]=o:e.watches.push(o)}return e}function is(t){wa(_a,{recursive:!0}),Vt(ge,JSON.stringify(t,null,2)+`
|
|
298
298
|
`)}function ka(){if(!Xr(it))return;let t="<claude-mem-context>",e="</claude-mem-context>";try{Aa(t,e)}catch(r){let o=r instanceof Error?r.message:String(r);a.warn("WORKER","Failed to clean AGENTS.md context",{error:o})}}function Aa(t,e){let r=Yr(it,"utf-8"),o=r.indexOf(t),s=r.indexOf(e);if(o===-1||s===-1)return;let i=r.substring(0,o).replace(/\n+$/,""),n=r.substring(s+e.length).replace(/^\n+/,""),u=(i+(n?`
|
|
299
299
|
|
|
300
300
|
`+n:"")).trim();u?Vt(it,u+`
|
|
@@ -317,14 +317,14 @@ Next steps:
|
|
|
317
317
|
2. Use Codex CLI as usual -- memory capture is automatic!
|
|
318
318
|
`)}function Ia(){if(console.log(`
|
|
319
319
|
Uninstalling Claude-Mem Codex CLI integration...
|
|
320
|
-
`),Xr(ge)){let t=ss();t.watches=t.watches.filter(e=>e.name
|
|
320
|
+
`),Xr(ge)){let t=ss();t.watches=t.watches.filter(e=>e.name!==$e),t.schemas&&delete t.schemas[$e];try{is(t),console.log(` Removed codex watch from ${ge}`)}catch(e){let r=e instanceof Error?e.message:String(e);return console.error(`
|
|
321
321
|
Uninstallation failed: ${r}`),1}}else console.log(" No transcript-watch.json found -- nothing to remove.");return us(),console.log(`
|
|
322
322
|
Uninstallation complete!`),console.log(`Restart claude-mem worker to apply changes.
|
|
323
|
-
`),0}var va,it,_a,
|
|
323
|
+
`),0}var va,it,_a,$e,us,qr=m(()=>{"use strict";L();ns();va=Vr.join(os(),".codex"),it=Vr.join(va,"AGENTS.md"),_a=Vr.join(os(),".claude-mem"),$e="codex";us=ka});var ps={};q(ps,{MCP_IDE_INSTALLERS:()=>Ka,installGooseMcpIntegration:()=>ds});import W from"path";import{homedir as ct}from"os";import{existsSync as ls,readFileSync as Ra,writeFileSync as at,mkdirSync as Ds}from"fs";function Pa(t){return{command:process.execPath,args:[t]}}function Ta(t,e,r="mcpServers"){let o=W.dirname(t);Ds(o,{recursive:!0});let s=J(t,{});s[r]||(s[r]={}),s[r]["claude-mem"]=Pa(e),at(t,JSON.stringify(s,null,2)+`
|
|
324
324
|
`)}function ut(t){return async()=>{console.log(`
|
|
325
325
|
Installing Claude-Mem MCP integration for ${t.ideLabel}...
|
|
326
326
|
`);let e=ze();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 r=t.configPath,o=t.ideId==="warp"&&!ls(W.dirname(r)),s;t.contextFile&&(s=t.contextFile.path);try{return Oa(t,r,e,o,s),0}catch(i){let n=i instanceof Error?i.message:String(i);return console.error(`
|
|
327
|
-
Installation failed: ${n}`),1}}}function Oa(t,e,r,o,s){o?console.log(" Note: ~/.warp/ not found. MCP may need to be configured via Warp Drive UI."):(Ta(e,r,t.configKey),console.log(` MCP config written to: ${e}`)),s&&(jt(s
|
|
327
|
+
Installation failed: ${n}`),1}}}function Oa(t,e,r,o,s){o?console.log(" Note: ~/.warp/ not found. MCP may need to be configured via Warp Drive UI."):(Ta(e,r,t.configKey),console.log(` MCP config written to: ${e}`)),s&&(jt(s,$a),console.log(` Context placeholder written to: ${s}`));let i=[`
|
|
328
328
|
Installation complete!
|
|
329
329
|
`];i.push(`MCP config: ${e}`),s&&i.push(`Context: ${s}`),i.push(""),i.push("Note: This is an MCP-only integration providing search tools and context."),i.push(`Transcript capture is not available for ${t.ideLabel}.`),t.ideId==="warp"&&i.push("If MCP config via file is not supported, configure MCP through Warp Drive UI."),i.push(""),i.push("Next steps:"),i.push(" 1. Start claude-mem worker: npx claude-mem start"),i.push(` 2. Restart ${t.ideLabel} to pick up the MCP server`),i.push(""),console.log(i.join(`
|
|
330
330
|
`))}function Wa(){return W.join(ct(),".config","goose","config.yaml")}function Ga(t){return t.includes("claude-mem:")&&t.includes("mcpServers:")}function as(t){return["mcpServers:"," claude-mem:",` command: ${process.execPath}`," args:",` - ${t}`].join(`
|
|
@@ -332,7 +332,7 @@ Installation complete!
|
|
|
332
332
|
`)}async function ds(){console.log(`
|
|
333
333
|
Installing Claude-Mem MCP integration for Goose...
|
|
334
334
|
`);let t=ze();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 e=Wa(),r=W.dirname(e);try{return Ds(r,{recursive:!0}),Ha(e,t),0}catch(o){let s=o instanceof Error?o.message:String(o);return console.error(`
|
|
335
|
-
Installation failed: ${s}`),1}}function Ha(t,e){if(ls(t)){let r
|
|
335
|
+
Installation failed: ${s}`),1}}function Ha(t,e){if(ls(t)){let r=Ra(t,"utf-8");if(Ga(r)){let o=/( {2}claude-mem:\n(?:.*\n)*?(?= {2}\S|\n\n|^\S|$))/m,s=cs(e)+`
|
|
336
336
|
`;if(!o.test(r))throw new Error("Found mcpServers/claude-mem markers but could not locate a replaceable claude-mem block");r=r.replace(o,s),at(t,r),console.log(` Updated existing claude-mem entry in: ${t}`)}else if(r.includes("mcpServers:")){let s=r.indexOf("mcpServers:")+11,i=`
|
|
337
337
|
`+cs(e);r=r.slice(0,s)+i+r.slice(s),at(t,r),console.log(` Added claude-mem to existing mcpServers in: ${t}`)}else{let o=`
|
|
338
338
|
`+as(e)+`
|
|
@@ -349,20 +349,20 @@ Transcript capture is not available for Goose.
|
|
|
349
349
|
Next steps:
|
|
350
350
|
1. Start claude-mem worker: npx claude-mem start
|
|
351
351
|
2. Restart Goose to pick up the MCP server
|
|
352
|
-
`)}var
|
|
352
|
+
`)}var $a,La,Ba,Na,ja,Ua,Ka,ms=m(()=>{"use strict";qe();Oe();Pr();$a=`# claude-mem: Cross-Session Memory
|
|
353
353
|
|
|
354
354
|
*No context yet. Complete your first session and context will appear here.*
|
|
355
355
|
|
|
356
|
-
Use claude-mem's MCP search tools for manual memory queries.`;La={ideId:"copilot-cli",ideLabel:"Copilot CLI",configPath:W.join(ct(),".github","copilot","mcp.json"),configKey:"servers",contextFile:{path:W.join(process.cwd(),".github","copilot-instructions.md"),isWorkspaceRelative:!0}},Ba={ideId:"antigravity",ideLabel:"Antigravity",configPath:W.join(ct(),".gemini","antigravity","mcp_config.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),".agents","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},Na={ideId:"crush",ideLabel:"Crush",configPath:W.join(ct(),".config","crush","mcp.json"),configKey:"mcpServers"},ja={ideId:"roo-code",ideLabel:"Roo Code",configPath:W.join(process.cwd(),".roo","mcp.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),".roo","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},Ua={ideId:"warp",ideLabel:"Warp",configPath:W.join(ct(),".warp","mcp.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),"WARP.md"),isWorkspaceRelative:!0}};Ka={"copilot-cli":ut(La),antigravity:ut(Ba),goose:ds,crush:ut(Na),"roo-code":ut(ja),warp:ut(Ua)}});var Xt={};q(Xt,{runInstallCommand:()=>nc});import{execSync as Zr}from"child_process";import{cpSync as gs,existsSync as lt,readFileSync as Ja,rmSync as fs}from"fs";import{join as Pe}from"path";async function Ya(t){if(ce)await vt(t);else for(let e of t){let r=await e.task(o=>console.log(` ${o}`));console.log(` ${r}`)}}function Va(){let t=J(he(),{});t.thedotmack={source:{source:"github",repo:"thedotmack/claude-mem"},installLocation
|
|
356
|
+
Use claude-mem's MCP search tools for manual memory queries.`;La={ideId:"copilot-cli",ideLabel:"Copilot CLI",configPath:W.join(ct(),".github","copilot","mcp.json"),configKey:"servers",contextFile:{path:W.join(process.cwd(),".github","copilot-instructions.md"),isWorkspaceRelative:!0}},Ba={ideId:"antigravity",ideLabel:"Antigravity",configPath:W.join(ct(),".gemini","antigravity","mcp_config.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),".agents","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},Na={ideId:"crush",ideLabel:"Crush",configPath:W.join(ct(),".config","crush","mcp.json"),configKey:"mcpServers"},ja={ideId:"roo-code",ideLabel:"Roo Code",configPath:W.join(process.cwd(),".roo","mcp.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),".roo","rules","claude-mem-context.md"),isWorkspaceRelative:!0}},Ua={ideId:"warp",ideLabel:"Warp",configPath:W.join(ct(),".warp","mcp.json"),configKey:"mcpServers",contextFile:{path:W.join(process.cwd(),"WARP.md"),isWorkspaceRelative:!0}};Ka={"copilot-cli":ut(La),antigravity:ut(Ba),goose:ds,crush:ut(Na),"roo-code":ut(ja),warp:ut(Ua)}});var Xt={};q(Xt,{runInstallCommand:()=>nc});import{execSync as Zr}from"child_process";import{cpSync as gs,existsSync as lt,readFileSync as Ja,rmSync as fs}from"fs";import{join as Pe}from"path";async function Ya(t){if(ce)await vt(t);else for(let e of t){let r=await e.task(o=>console.log(` ${o}`));console.log(` ${r}`)}}function Va(){let t=J(he(),{});t.thedotmack={source:{source:"github",repo:"thedotmack/claude-mem"},installLocation:R(),lastUpdated:new Date().toISOString(),autoUpdate:!0},Ne(De()),se(he(),t)}function Xa(t){let e=J(Fe(),{});e.version||(e.version=2),e.plugins||(e.plugins={});let r=tr(t),o=new Date().toISOString();e.plugins["claude-mem@thedotmack"]=[{scope:"user",installPath:r,version:t,installedAt:o,lastUpdated:o}],se(Fe(),e)}function za(){let t=J(Se(),{});t.enabledPlugins||(t.enabledPlugins={}),t.enabledPlugins["claude-mem@thedotmack"]=!0,se(Se(),t)}async function qa(t){let e=[];for(let r of t)switch(r){case"claude-code":{try{Zr("claude plugin marketplace add thedotmack/claude-mem && claude plugin install claude-mem",{stdio:"inherit"}),E.success("Claude Code: plugin installed via CLI.")}catch(o){console.error("[install] Claude Code plugin install error:",o instanceof Error?o.message:String(o)),E.error("Claude Code: plugin install failed. Is `claude` CLI on your PATH?"),e.push(r)}break}case"cursor":{let{installCursorHooks:o,configureCursorMcp:s}=await Promise.resolve().then(()=>(qe(),Ao));await o("user")===0?s("user")===0?E.success("Cursor: hooks + MCP installed."):E.success("Cursor: hooks installed (MCP setup failed \u2014 run `npx claude-mem cursor mcp` to retry)."):(E.error("Cursor: hook installation failed."),e.push(r));break}case"gemini-cli":{let{installGeminiCliHooks:o}=await Promise.resolve().then(()=>(Rr(),Ir));await o()===0?E.success("Gemini CLI: hooks installed."):(E.error("Gemini CLI: hook installation failed."),e.push(r));break}case"opencode":{let{installOpenCodeIntegration:o}=await Promise.resolve().then(()=>(Br(),Lr));await o()===0?E.success("OpenCode: plugin installed."):(E.error("OpenCode: plugin installation failed."),e.push(r));break}case"windsurf":{let{installWindsurfHooks:o}=await Promise.resolve().then(()=>(Wr(),Ur));await o()===0?E.success("Windsurf: hooks installed."):(E.error("Windsurf: hook installation failed."),e.push(r));break}case"openclaw":{let{installOpenClawIntegration:o}=await Promise.resolve().then(()=>(Jr(),Kr));await o()===0?E.success("OpenClaw: plugin installed."):(E.error("OpenClaw: plugin installation failed."),e.push(r));break}case"codex-cli":{let{installCodexCli:o}=await Promise.resolve().then(()=>(qr(),zr));await o()===0?E.success("Codex CLI: transcript watching configured."):(E.error("Codex CLI: integration setup failed."),e.push(r));break}case"copilot-cli":case"antigravity":case"goose":case"crush":case"roo-code":case"warp":{let{MCP_IDE_INSTALLERS:o}=await Promise.resolve().then(()=>(ms(),ps)),s=o[r];if(s){let i=await s(),c=Je().find(D=>D.id===r)?.label??r;i===0?E.success(`${c}: MCP integration installed.`):(E.error(`${c}: MCP integration failed.`),e.push(r))}break}default:{let s=Je().find(i=>i.id===r);s&&!s.supported&&E.warn(`Support for ${s.label} coming soon.`);break}}return e}async function Za(){let e=Je().filter(s=>s.detected);if(e.length===0)return E.warn("No supported IDEs detected. Installing for Claude Code by default."),["claude-code"];let r=e.map(s=>({value:s.id,label:s.label,hint:s.supported?s.hint:"coming soon"})),o=await Ln({message:"Which IDEs do you use?",options:r,initialValues:[],required:!0});return ue(o)&&(He("Installation cancelled."),process.exit(0)),o}function Qa(){let t=R(),e=mt();Ne(t);let r=["plugin","package.json","package-lock.json","node_modules","openclaw","dist","LICENSE","README.md","CHANGELOG.md"];for(let o of r){let s=Pe(e,o),i=Pe(t,o);lt(s)&&(lt(i)&&fs(i,{recursive:!0,force:!0}),gs(s,i,{recursive:!0,force:!0}))}}function ec(t){let e=rr(),r=tr(t);fs(r,{recursive:!0,force:!0}),Ne(r),gs(e,r,{recursive:!0,force:!0})}function tc(){let t=R(),e=Pe(t,"package.json");lt(e)&&Zr("npm install --production",{cwd:t,stdio:"pipe",encoding:"utf8",...te?{shell:process.env.ComSpec??"cmd.exe"}:{}})}function rc(){let t=Pe(R(),"plugin","scripts","smart-install.js");if(!lt(t))return E.warn("smart-install.js not found \u2014 skipping Bun/uv auto-install."),!1;try{return Zr(`node "${t}"`,{stdio:"inherit",encoding:"utf8",...te?{shell:process.env.ComSpec??"cmd.exe"}:{}}),!0}catch(e){return console.warn("[install] smart-install error:",e instanceof Error?e.message:String(e)),E.warn("smart-install encountered an issue. You may need to install Bun/uv manually."),!1}}async function nc(t={}){let e=Be();ce?wt(C.default.bgCyan(C.default.black(" claude-mem install "))):console.log("claude-mem install"),E.info(`Version: ${C.default.cyan(e)}`),E.info(`Platform: ${process.platform} (${process.arch})`);let r=R();if(lt(Pe(r,"plugin",".claude-plugin","plugin.json"))){try{let g=JSON.parse(Ja(Pe(r,"plugin",".claude-plugin","plugin.json"),"utf-8"));E.warn(`Existing installation detected (v${g.version??"unknown"}).`)}catch(g){console.warn("[install] Failed to read existing plugin version:",g instanceof Error?g.message:String(g)),E.warn("Existing installation detected.")}if(process.stdin.isTTY){let g=await We({message:"Overwrite existing installation?",initialValue:!0});(ue(g)||!g)&&(He("Installation cancelled."),process.exit(0))}}let s;if(t.ide){s=[t.ide];let g=Je(),h=g.find(N=>N.id===t.ide);h&&!h.supported&&(E.error(`Support for ${h.label} coming soon.`),process.exit(1)),h||(E.error(`Unknown IDE: ${t.ide}`),E.info(`Available IDEs: ${g.map(N=>N.id).join(", ")}`),process.exit(1))}else process.stdin.isTTY?s=await Za():s=["claude-code"];if(s.some(g=>g!=="claude-code")){let g=x.get("CLAUDE_MEM_WORKER_PORT");try{(await _t(g,1e4)).workerWasRunning&&E.info("Stopped running worker before overwrite.")}catch(h){console.warn("[install] Pre-overwrite worker shutdown failed:",h instanceof Error?h.message:String(h))}await Ya([{title:"Copying plugin files",task:async h=>(h("Copying to marketplace directory..."),Qa(),`Plugin files copied ${C.default.green("OK")}`)},{title:"Caching plugin version",task:async h=>(h(`Caching v${e}...`),ec(e),`Plugin cached (v${e}) ${C.default.green("OK")}`)},{title:"Registering marketplace",task:async()=>(Va(),`Marketplace registered ${C.default.green("OK")}`)},{title:"Registering plugin",task:async()=>(Xa(e),`Plugin registered ${C.default.green("OK")}`)},{title:"Enabling plugin in Claude settings",task:async()=>(za(),`Plugin enabled ${C.default.green("OK")}`)},{title:"Installing dependencies",task:async h=>{h("Running npm install...");try{return tc(),`Dependencies installed ${C.default.green("OK")}`}catch(N){return console.warn("[install] npm install error:",N instanceof Error?N.message:String(N)),`Dependencies may need manual install ${C.default.yellow("!")}`}}},{title:"Setting up Bun and uv",task:async h=>(h("Running smart-install..."),rc()?`Runtime dependencies ready ${C.default.green("OK")}`:`Runtime setup may need attention ${C.default.yellow("!")}`)}])}let n=await qa(s),u=n.length>0?"Installation Partial":"Installation Complete",c=[`Version: ${C.default.cyan(e)}`,`Plugin dir: ${C.default.cyan(r)}`,`IDEs: ${C.default.cyan(s.join(", "))}`];n.length>0&&c.push(`Failed: ${C.default.red(n.join(", "))}`),ce?Ge(c.join(`
|
|
357
357
|
`),u):(console.log(`
|
|
358
|
-
${u}`),c.forEach(g=>console.log(` ${g}`)));let D=x.get("CLAUDE_MEM_WORKER_PORT"),d=D,p=!1;try{let g=await fetch(`http://127.0.0.1:${D}/api/health`,{signal:AbortSignal.timeout(3e3)});if(g.ok){p=!0;try{let h=await g.json();h&&(typeof h.port=="number"||typeof h.port=="string")&&(d=h.port)}catch{}}}catch{}let _=["Open Claude Code and start a conversation -- memory is automatic!",p?`Worker port: ${
|
|
359
|
-
`),"Next Steps"),n.length>0?pe(
|
|
358
|
+
${u}`),c.forEach(g=>console.log(` ${g}`)));let D=x.get("CLAUDE_MEM_WORKER_PORT"),d=D,p=!1;try{let g=await fetch(`http://127.0.0.1:${D}/api/health`,{signal:AbortSignal.timeout(3e3)});if(g.ok){p=!0;try{let h=await g.json();h&&(typeof h.port=="number"||typeof h.port=="string")&&(d=h.port)}catch{}}}catch{}let _=["Open Claude Code and start a conversation -- memory is automatic!",p?`Worker port: ${C.default.cyan(String(d))}`:`Worker port: ${C.default.cyan(String(D))} (worker not yet ready -- still starting up; check ${C.default.bold("claude-mem status")} later)`,`View your memories: ${C.default.underline(`http://localhost:${d}`)}`,`Search past work: use ${C.default.bold("/mem-search")} in Claude Code`,`Start worker: ${C.default.bold("npx claude-mem start")}`,`Note: Close all Claude Code sessions before uninstalling, or ${C.default.cyan("~/.claude-mem")} will be recreated by active hooks.`];ce?(Ge(_.join(`
|
|
359
|
+
`),"Next Steps"),n.length>0?pe(C.default.yellow("claude-mem installed with some IDE setup failures.")):pe(C.default.green("claude-mem installed successfully!"))):(console.log(`
|
|
360
360
|
Next Steps`),_.forEach(g=>console.log(` ${g}`)),n.length>0?(console.log(`
|
|
361
361
|
claude-mem installed with some IDE setup failures.`),process.exitCode=1):console.log(`
|
|
362
|
-
claude-mem installed successfully!`))}var
|
|
362
|
+
claude-mem installed successfully!`))}var C,ce,E,zt=m(()=>{"use strict";mr();C=le(Ce(),1);de();Oe();me();gr();Hn();ce=process.stdin.isTTY===!0;E={info:t=>ce?$.info(t):console.log(` ${t}`),success:t=>ce?$.success(t):console.log(` ${t}`),warn:t=>ce?$.warn(t):console.warn(` ${t}`),error:t=>ce?$.error(t):console.error(` ${t}`)}});var Cs={};q(Cs,{runUninstallCommand:()=>pc});import{existsSync as fe,readFileSync as oc,readdirSync as Qr,rmSync as Dt,writeFileSync as sc}from"fs";import{homedir as Es}from"os";import{join as ee}from"path";function ic(){let t=R();return fe(t)?(Dt(t,{recursive:!0,force:!0}),!0):!1}function uc(){let t=ee(De(),"cache","thedotmack","claude-mem");return fe(t)?(Dt(t,{recursive:!0,force:!0}),!0):!1}function ac(){let t=J(he(),{});t.thedotmack&&(delete t.thedotmack,se(he(),t))}function cc(){let t=J(Fe(),{});t.plugins?.["claude-mem@thedotmack"]&&(delete t.plugins["claude-mem@thedotmack"],se(Fe(),t))}function lc(){let t=Es(),e=[ee(t,".bashrc"),ee(t,".zshrc"),ee(t,"Documents","PowerShell","Microsoft.PowerShell_profile.ps1")],r=/^\s*alias\s+claude-mem\s*=/;for(let o of e){if(!fe(o))continue;let s;try{s=oc(o,"utf-8")}catch(u){console.warn(`[uninstall] Could not read ${o}:`,u instanceof Error?u.message:String(u));continue}let i=s.split(`
|
|
363
363
|
`),n=i.filter(u=>!r.test(u));if(n.length!==i.length)try{sc(o,n.join(`
|
|
364
|
-
`)),console.error(`Removed legacy claude-mem alias from ${o}`)}catch(u){console.warn(`[uninstall] Could not rewrite ${o}:`,u instanceof Error?u.message:String(u))}}}function Dc(){let t=J(Se(),{});t.enabledPlugins?.["claude-mem@thedotmack"]!==void 0&&(delete t.enabledPlugins["claude-mem@thedotmack"],se(Se(),t))}function dc(){let t=
|
|
365
|
-
`),"Note"),pe(T.default.green("claude-mem has been uninstalled."))}var T,hs=m(()=>{"use strict";mr();T=le(
|
|
364
|
+
`)),console.error(`Removed legacy claude-mem alias from ${o}`)}catch(u){console.warn(`[uninstall] Could not rewrite ${o}:`,u instanceof Error?u.message:String(u))}}}function Dc(){let t=J(Se(),{});t.enabledPlugins?.["claude-mem@thedotmack"]!==void 0&&(delete t.enabledPlugins["claude-mem@thedotmack"],se(Se(),t))}function dc(){let t=Es(),e=0,r=ee(t,".npm","_npx");if(fe(r)){let i=[];try{i=Qr(r)}catch(n){console.warn(`[uninstall] Could not read ${r}:`,n instanceof Error?n.message:String(n))}for(let n of i){let u=ee(r,n,"node_modules","claude-mem");if(fe(u))try{Dt(u,{recursive:!0,force:!0}),e++}catch(c){console.warn(`[uninstall] Could not remove ${u}:`,c instanceof Error?c.message:String(c))}}}let o=ee(t,".cache","claude-cli-nodejs");if(fe(o)){let i=[];try{i=Qr(o)}catch(n){console.warn(`[uninstall] Could not read ${o}:`,n instanceof Error?n.message:String(n))}for(let n of i){let u=ee(o,n),c=[];try{c=Qr(u)}catch(D){console.warn(`[uninstall] Could not read ${u}:`,D instanceof Error?D.message:String(D));continue}for(let D of c){if(!D.startsWith("mcp-logs-plugin-claude-mem-"))continue;let d=ee(u,D);try{Dt(d,{recursive:!0,force:!0}),e++}catch(p){console.warn(`[uninstall] Could not remove ${d}:`,p instanceof Error?p.message:String(p))}}}}let s=ee(t,".claude","plugins","data","claude-mem-thedotmack");if(fe(s))try{Dt(s,{recursive:!0,force:!0}),e++}catch(i){console.warn(`[uninstall] Could not remove ${s}:`,i instanceof Error?i.message:String(i))}return e}async function pc(){if(wt(T.default.bgRed(T.default.white(" claude-mem uninstall "))),gt()){if(process.stdin.isTTY){let r=await We({message:"Are you sure you want to uninstall claude-mem?",initialValue:!1});if(ue(r)||!r){He("Uninstall cancelled.");return}}}else if($.warn("claude-mem does not appear to be installed."),process.stdin.isTTY){let r=await We({message:"Clean up any remaining registration data anyway?",initialValue:!1});if(ue(r)||!r){pe("Nothing to do.");return}}else{pe("Nothing to do.");return}let t=x.get("CLAUDE_MEM_WORKER_PORT");try{(await _t(t,1e4)).workerWasRunning&&$.info("Worker service stopped.")}catch(r){console.warn("[uninstall] Worker shutdown attempt failed:",r instanceof Error?r.message:String(r))}await vt([{title:"Removing marketplace directory",task:async()=>ic()?`Marketplace directory removed ${T.default.green("OK")}`:`Marketplace directory not found ${T.default.dim("skipped")}`},{title:"Removing cache directory",task:async()=>uc()?`Cache directory removed ${T.default.green("OK")}`:`Cache directory not found ${T.default.dim("skipped")}`},{title:"Removing marketplace registration",task:async()=>(ac(),`Marketplace registration removed ${T.default.green("OK")}`)},{title:"Removing plugin registration",task:async()=>(cc(),`Plugin registration removed ${T.default.green("OK")}`)},{title:"Removing from Claude settings",task:async()=>(Dc(),`Claude settings updated ${T.default.green("OK")}`)},{title:"Removing legacy claude-mem shell alias",task:async()=>(lc(),`Legacy alias check complete ${T.default.green("OK")}`)},{title:"Removing stray claude-mem caches and logs",task:async()=>{let r=dc();return r>0?`Stray paths removed: ${r} ${T.default.green("OK")}`:`No stray paths found ${T.default.dim("skipped")}`}}]);let e=[{label:"Gemini CLI hooks",fn:async()=>{let{uninstallGeminiCliHooks:r}=await Promise.resolve().then(()=>(Rr(),Ir));return r()}},{label:"Windsurf hooks",fn:async()=>{let{uninstallWindsurfHooks:r}=await Promise.resolve().then(()=>(Wr(),Ur));return r()}},{label:"OpenCode plugin",fn:async()=>{let{uninstallOpenCodePlugin:r}=await Promise.resolve().then(()=>(Br(),Lr));return r()}},{label:"OpenClaw plugin",fn:async()=>{let{uninstallOpenClawPlugin:r}=await Promise.resolve().then(()=>(Jr(),Kr));return r()}},{label:"Codex CLI",fn:async()=>{let{uninstallCodexCli:r}=await Promise.resolve().then(()=>(qr(),zr));return r()}}];for(let{label:r,fn:o}of e)try{await o()===0&&$.info(`${r}: removed.`)}catch(s){console.warn(`[uninstall] ${r} cleanup failed:`,s instanceof Error?s.message:String(s))}Ge([`Your data directory at ${T.default.cyan("~/.claude-mem")} was preserved.`,"To remove it manually: rm -rf ~/.claude-mem"].join(`
|
|
365
|
+
`),"Note"),pe(T.default.green("claude-mem has been uninstalled."))}var T,hs=m(()=>{"use strict";mr();T=le(Ce(),1);de();Oe();me();gr()});import{spawnSync as mc}from"child_process";import{existsSync as gc}from"fs";import{homedir as en}from"os";import{join as tn}from"path";function fc(){return te?[tn(en(),".bun","bin","bun.exe"),tn(process.env.USERPROFILE||en(),".bun","bin","bun.exe")]:[tn(en(),".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun"]}function Fs(){let e=mc(te?"where":"which",["bun"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],shell:te});if(e.status===0&&e.stdout.trim())return"bun";for(let r of fc())if(gc(r))return r;return null}var Ss=m(()=>{"use strict";de()});var re={};q(re,{runAdoptCommand:()=>Sc,runCleanupCommand:()=>yc,runRestartCommand:()=>hc,runSearchCommand:()=>wc,runStartCommand:()=>Ec,runStatusCommand:()=>Fc,runStopCommand:()=>Cc,runTranscriptWatchCommand:()=>vc});import{spawn as rn}from"child_process";import{existsSync as nn}from"fs";import{join as ys}from"path";function qt(){gt()||(console.error(A.default.red("claude-mem is not installed.")),console.error(`Run: ${A.default.bold("npx claude-mem install")}`),process.exit(1))}function on(){let t=Fs();return t||(console.error(A.default.red("Bun not found.")),console.error("Install Bun: https://bun.sh"),console.error("After installation, restart your terminal."),process.exit(1)),t}function ws(){return ys(R(),"plugin","scripts","worker-service.cjs")}function Te(t,e=[]){qt();let r=on(),o=ws();nn(o)||(console.error(A.default.red(`Worker script not found at: ${o}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let s=[o,t,...e],i=rn(r,s,{stdio:"inherit",cwd:R(),env:process.env});i.on("error",n=>{console.error(A.default.red(`Failed to start Bun: ${n.message}`)),process.exit(1)}),i.on("close",n=>{process.exit(n??0)})}function Ec(){Te("start")}function Cc(){Te("stop")}function hc(){Te("restart")}function Fc(){Te("status")}function Sc(t=[]){qt();let e=on(),r=ws();nn(r)||(console.error(A.default.red(`Worker script not found at: ${r}`)),console.error("The installation may be corrupted. Try: npx claude-mem install"),process.exit(1));let o=process.cwd(),s=[r,"adopt","--cwd",o,...t],i=rn(e,s,{stdio:"inherit",cwd:R(),env:process.env});i.on("error",n=>{console.error(A.default.red(`Failed to start Bun: ${n.message}`)),process.exit(1)}),i.on("close",n=>{process.exit(n??0)})}function yc(t=[]){Te("cleanup",t)}async function wc(t){qt();let e=t.join(" ").trim();e||(console.error(A.default.red("Usage: npx claude-mem search <query>")),process.exit(1));let o=`http://127.0.0.1:${x.get("CLAUDE_MEM_WORKER_PORT")}/api/search?query=${encodeURIComponent(e)}`,s;try{s=await fetch(o)}catch(n){let u=n instanceof Error?n.message:String(n);((n instanceof Error?n.cause:void 0)?.code==="ECONNREFUSED"||u.includes("ECONNREFUSED"))&&(console.error(A.default.red("Worker is not running.")),console.error(`Start it with: ${A.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(A.default.red(`Search failed: ${u}`)),process.exit(1)}s.ok||(s.status===404&&(console.error(A.default.red("Search endpoint not found. Is the worker running?")),console.error(`Try: ${A.default.bold("npx claude-mem start")}`),process.exit(1)),console.error(A.default.red(`Search failed: HTTP ${s.status}`)),process.exit(1));let i;try{i=await s.json()}catch(n){let u=n instanceof Error?n.message:String(n);console.error(A.default.red(`Search failed: invalid JSON response (${u})`)),process.exit(1)}console.log(typeof i=="object"&&i!==null?JSON.stringify(i,null,2):i)}function vc(){qt();let t=on(),e=ys(R(),"plugin","scripts","transcript-watcher.cjs");if(!nn(e)){Te("transcript",["watch"]);return}let r=rn(t,[e,"watch"],{stdio:"inherit",cwd:R(),env:process.env});r.on("error",o=>{console.error(A.default.red(`Failed to start transcript watcher: ${o.message}`)),process.exit(1)}),r.on("close",o=>{process.exit(o??0)})}var A,ne=m(()=>{"use strict";A=le(Ce(),1);Ss();de();me()});var S=le(Ce(),1);de();var Ee=process.argv.slice(2),vs=Ee[0]?.toLowerCase()??"";function _c(){let t=Be();console.log(`
|
|
366
366
|
${S.default.bold("claude-mem")} v${t} \u2014 persistent memory for AI coding assistants
|
|
367
367
|
|
|
368
368
|
${S.default.bold("Install Commands")} (no Bun required):
|
|
@@ -387,4 +387,4 @@ ${S.default.bold("IDE Identifiers")}:
|
|
|
387
387
|
claude-code, cursor, gemini-cli, opencode, openclaw,
|
|
388
388
|
windsurf, codex-cli, copilot-cli, antigravity, goose,
|
|
389
389
|
crush, roo-code, warp
|
|
390
|
-
`)}async function xc(){switch(vs){case"":{let{runInstallCommand:t}=await Promise.resolve().then(()=>(zt(),Xt));await t();break}case"install":{let t=
|
|
390
|
+
`)}async function xc(){switch(vs){case"":{let{runInstallCommand:t}=await Promise.resolve().then(()=>(zt(),Xt));await t();break}case"install":{let t=Ee.indexOf("--ide"),e=t!==-1?Ee[t+1]:void 0,{runInstallCommand:r}=await Promise.resolve().then(()=>(zt(),Xt));await r({ide:e});break}case"update":case"upgrade":{let{runInstallCommand:t}=await Promise.resolve().then(()=>(zt(),Xt));await t();break}case"uninstall":case"remove":{let{runUninstallCommand:t}=await Promise.resolve().then(()=>(hs(),Cs));await t();break}case"version":case"--version":case"-v":{console.log(Be());break}case"help":case"--help":case"-h":{_c();break}case"start":{let{runStartCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"stop":{let{runStopCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"restart":{let{runRestartCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"status":{let{runStatusCommand:t}=await Promise.resolve().then(()=>(ne(),re));t();break}case"search":{let{runSearchCommand:t}=await Promise.resolve().then(()=>(ne(),re));await t(Ee.slice(1));break}case"adopt":{let{runAdoptCommand:t}=await Promise.resolve().then(()=>(ne(),re));t(Ee.slice(1));break}case"cleanup":{let{runCleanupCommand:t}=await Promise.resolve().then(()=>(ne(),re));t(Ee.slice(1));break}case"transcript":{let t=Ee[1]?.toLowerCase();if(t==="watch"){let{runTranscriptWatchCommand:e}=await Promise.resolve().then(()=>(ne(),re));e()}else console.error(S.default.red(`Unknown transcript subcommand: ${t??"(none)"}`)),console.error("Usage: npx claude-mem transcript watch"),process.exit(1);break}default:console.error(S.default.red(`Unknown command: ${vs}`)),console.error(`Run ${S.default.bold("npx claude-mem --help")} for usage information.`),process.exit(1)}}xc().catch(t=>{console.error(S.default.red("Fatal error:"),t.message||t),process.exit(1)});
|