keepmind 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keepmind",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions (node-only fork of claude-mem)",
5
5
  "author": {
6
6
  "name": "Manuel Staggl",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keepmind",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions (node-only fork of claude-mem)",
5
5
  "keywords": [
6
6
  "claude",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keepmind",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions (node-only fork of claude-mem)",
5
5
  "author": {
6
6
  "name": "Manuel Staggl"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keepmind",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions (node-only fork of claude-mem)",
5
5
  "author": {
6
6
  "name": "Manuel Staggl",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "keepmind-plugin",
3
- "version": "1.1.1",
3
+ "version": "1.1.2",
4
4
  "private": true,
5
5
  "description": "Runtime dependencies for keepmind bundled hooks",
6
6
  "type": "module",
@@ -1,4 +1,4 @@
1
- "use strict";var ps=Object.create;var q=Object.defineProperty;var ms=Object.getOwnPropertyDescriptor;var Es=Object.getOwnPropertyNames;var gs=Object.getPrototypeOf,Ts=Object.prototype.hasOwnProperty;var fs=(r,e)=>{for(var t in e)q(r,t,{get:e[t],enumerable:!0})},Ge=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Es(e))!Ts.call(r,n)&&n!==t&&q(r,n,{get:()=>e[n],enumerable:!(s=ms(e,n))||s.enumerable});return r};var G=(r,e,t)=>(t=r!=null?ps(gs(r)):{},Ge(e||!r||!r.__esModule?q(t,"default",{value:r,enumerable:!0}):t,r)),bs=r=>Ge(q({},"__esModule",{value:!0}),r);var Sr={};fs(Sr,{generateContext:()=>_s,generateContextWithStats:()=>$e});module.exports=bs(Sr);var us=G(require("path"),1),cs=require("os"),ls=require("fs");var Xe=require("node:sqlite");function He(r){return typeof r=="bigint"?Number(r):r}function Ss(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof Uint8Array)&&!(typeof Buffer<"u"&&Buffer.isBuffer(r))}function Be(r){return r===void 0?null:typeof r=="boolean"?r?1:0:r}function J(r){let e=r;if(e.length===1&&Array.isArray(e[0])&&(e=e[0]),e.length===1&&Ss(e[0])){let t=e[0],s={};for(let n of Object.keys(t))s[n]=Be(t[n]);return[s]}return e.map(Be)}var ge=class{constructor(e){this.stmt=e}stmt;all(...e){return this.stmt.all(...J(e))}get(...e){return this.stmt.get(...J(e))??null}run(...e){let t=this.stmt.run(...J(e));return{changes:He(t.changes),lastInsertRowid:He(t.lastInsertRowid)}}values(...e){return this.stmt.all(...J(e)).map(s=>Object.values(s))}finalize(){}},H=class{db;queryCache=new Map;safeIntegers;txDepth=0;filename;constructor(e,t={}){let s=t.readonly===!0;this.safeIntegers=t.safeIntegers===!0;let n=e&&e.length>0?e:":memory:";if(this.filename=n,this.db=new Xe.DatabaseSync(n,{readOnly:s,allowExtension:!0}),!s&&n!==":memory:")try{this.db.exec("PRAGMA journal_mode=WAL")}catch{}}wrap(e){return this.safeIntegers&&e.setReadBigInts(!0),new ge(e)}prepare(e){return this.wrap(this.db.prepare(e))}query(e){let t=this.queryCache.get(e);if(t)return t;let s=this.prepare(e);return this.queryCache.set(e,s),s}run(e,...t){return t.length===0?(this.db.exec(e),{changes:0,lastInsertRowid:0}):this.prepare(e).run(...t)}exec(e){this.db.exec(e)}loadExtension(e,t){this.db.loadExtension(e)}transaction(e){return(...t)=>{let s=this.txDepth===0,n=`__cm_sp_${this.txDepth}`;s?this.db.exec("BEGIN"):this.db.exec(`SAVEPOINT ${n}`),this.txDepth++;try{let o=e(...t);return this.txDepth--,s?this.db.exec("COMMIT"):this.db.exec(`RELEASE ${n}`),o}catch(o){throw this.txDepth--,s?this.db.exec("ROLLBACK"):(this.db.exec(`ROLLBACK TO ${n}`),this.db.exec(`RELEASE ${n}`)),o}}}close(){this.db.close()}};var T=require("path"),he=require("os"),v=require("fs");var We=require("url");var w=require("fs"),je=require("path");var hs=null;function Rs(r){return(hs??process.stderr.write.bind(process.stderr))(r)}function Te(r){Rs(r)}var be=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(be||{}),fe=null,Se=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=P.logsDir();(0,w.existsSync)(e)||(0,w.mkdirSync)(e,{recursive:!0});let t=new Date().toISOString().split("T")[0];this.logFilePath=(0,je.join)(e,`keepmind-${t}.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=P.settings();if((0,w.existsSync)(e)){let t=(0,w.readFileSync)(e,"utf-8"),n=(JSON.parse(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=be[n]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
1
+ "use strict";var ps=Object.create;var q=Object.defineProperty;var ms=Object.getOwnPropertyDescriptor;var Es=Object.getOwnPropertyNames;var gs=Object.getPrototypeOf,Ts=Object.prototype.hasOwnProperty;var fs=(r,e)=>{for(var t in e)q(r,t,{get:e[t],enumerable:!0})},Ge=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Es(e))!Ts.call(r,n)&&n!==t&&q(r,n,{get:()=>e[n],enumerable:!(s=ms(e,n))||s.enumerable});return r};var G=(r,e,t)=>(t=r!=null?ps(gs(r)):{},Ge(e||!r||!r.__esModule?q(t,"default",{value:r,enumerable:!0}):t,r)),bs=r=>Ge(q({},"__esModule",{value:!0}),r);var Sr={};fs(Sr,{generateContext:()=>_s,generateContextWithStats:()=>$e});module.exports=bs(Sr);var us=G(require("path"),1),cs=require("os"),ls=require("fs");var Xe=require("node:sqlite");function He(r){return typeof r=="bigint"?Number(r):r}function Ss(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)&&!(r instanceof Uint8Array)&&!(typeof Buffer<"u"&&Buffer.isBuffer(r))}function Be(r){return r===void 0?null:typeof r=="boolean"?r?1:0:r}function J(r){let e=r;if(e.length===1&&Array.isArray(e[0])&&(e=e[0]),e.length===1&&Ss(e[0])){let t=e[0],s={};for(let n of Object.keys(t))s[n]=Be(t[n]);return[s]}return e.map(Be)}var ge=class{constructor(e){this.stmt=e}stmt;all(...e){return this.stmt.all(...J(e))}get(...e){return this.stmt.get(...J(e))??null}run(...e){let t=this.stmt.run(...J(e));return{changes:He(t.changes),lastInsertRowid:He(t.lastInsertRowid)}}values(...e){return this.stmt.all(...J(e)).map(s=>Object.values(s))}finalize(){}},H=class{db;queryCache=new Map;safeIntegers;txDepth=0;filename;constructor(e,t={}){let s=t.readonly===!0;this.safeIntegers=t.safeIntegers===!0;let n=e&&e.length>0?e:":memory:";if(this.filename=n,this.db=new Xe.DatabaseSync(n,{readOnly:s,allowExtension:!0}),!s&&n!==":memory:")try{this.db.exec("PRAGMA journal_mode=WAL")}catch{}}wrap(e){return this.safeIntegers&&e.setReadBigInts(!0),new ge(e)}prepare(e){return this.wrap(this.db.prepare(e))}query(e){let t=this.queryCache.get(e);if(t)return t;let s=this.prepare(e);return this.queryCache.set(e,s),s}run(e,...t){return t.length===0?(this.db.exec(e),{changes:0,lastInsertRowid:0}):this.prepare(e).run(...t)}exec(e){this.db.exec(e)}loadExtension(e,t){this.db.loadExtension(e)}transaction(e){return(...t)=>{let s=this.txDepth===0,n=`__cm_sp_${this.txDepth}`;s?this.db.exec("BEGIN"):this.db.exec(`SAVEPOINT ${n}`),this.txDepth++;try{let o=e(...t);return this.txDepth--,s?this.db.exec("COMMIT"):this.db.exec(`RELEASE ${n}`),o}catch(o){throw this.txDepth--,s?this.db.exec("ROLLBACK"):(this.db.exec(`ROLLBACK TO ${n}`),this.db.exec(`RELEASE ${n}`)),o}}}close(){this.db.close()}};var T=require("path"),he=require("os"),v=require("fs");var We=require("url");var w=require("fs"),je=require("path");var hs=null;function Rs(r){return(hs??process.stderr.write.bind(process.stderr))(r)}function Te(r){Rs(r)}var be=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(be||{}),fe=null,Se=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=F.logsDir();(0,w.existsSync)(e)||(0,w.mkdirSync)(e,{recursive:!0});let t=new Date().toISOString().split("T")[0];this.logFilePath=(0,je.join)(e,`keepmind-${t}.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=F.settings();if((0,w.existsSync)(e)){let t=(0,w.readFileSync)(e,"utf-8"),n=(JSON.parse(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=be[n]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
2
2
  ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?JSON.stringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let s=t;if(typeof t=="string")try{s=JSON.parse(t)}catch{s=t}if(e==="Bash"&&s.command)return`${e}(${s.command})`;if(s.file_path)return`${e}(${s.file_path})`;if(s.notebook_path)return`${e}(${s.notebook_path})`;if(e==="Glob"&&s.pattern)return`${e}(${s.pattern})`;if(e==="Grep"&&s.pattern)return`${e}(${s.pattern})`;if(s.url)return`${e}(${s.url})`;if(s.query)return`${e}(${s.query})`;if(e==="Task"){if(s.subagent_type)return`${e}(${s.subagent_type})`;if(s.description)return`${e}(${s.description})`}return e==="Skill"&&s.skill?`${e}(${s.skill})`:e==="LSP"&&s.operation?`${e}(${s.operation})`:e}formatTimestamp(e){let t=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),o=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),d=String(e.getMilliseconds()).padStart(3,"0");return`${t}-${s}-${n} ${o}:${i}:${a}.${d}`}log(e,t,s,n,o){if(e<this.getLevel())return;this.ensureLogFileInitialized();let i=this.formatTimestamp(new Date),a=be[e].padEnd(5),d=t.padEnd(6),u="";n?.correlationId?u=`[${n.correlationId}] `:n?.sessionId&&(u=`[session-${n.sessionId}] `);let c="";if(o!=null)if(o instanceof Error)c=this.getLevel()===0?`
3
3
  ${o.message}
4
4
  ${o.stack}`:` ${o.message}`;else if(this.getLevel()===0&&typeof o=="object")try{c=`
@@ -6,7 +6,7 @@ ${o.stack}`:` ${o.message}`;else if(this.getLevel()===0&&typeof o=="object")try{
6
6
  `,"utf8")}catch(g){Te(`[LOGGER] Failed to write to log file: ${g instanceof Error?g.message:String(g)}
7
7
  `)}else Te(p+`
8
8
  `)}debug(e,t,s,n){this.log(0,e,t,s,n)}info(e,t,s,n){this.log(1,e,t,s,n)}warn(e,t,s,n){this.log(2,e,t,s,n)}setErrorSink(e){fe=e}error(e,t,s,n){this.log(3,e,t,s,n),this.routeErrorToSink(t,s,n)}routeErrorToSink(e,t,s){try{if(!fe||!(s instanceof Error))return;fe(s)}catch{}}dataIn(e,t,s,n){this.info(e,`\u2192 ${t}`,s,n)}dataOut(e,t,s,n){this.info(e,`\u2190 ${t}`,s,n)}success(e,t,s,n){this.info(e,`\u2713 ${t}`,s,n)}failure(e,t,s,n){this.error(e,`\u2717 ${t}`,s,n)}happyPathError(e,t,s,n,o=""){let u=((new Error().stack||"").split(`
9
- `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),c=u?`${u[1].split("/").pop()}:${u[2]}`:"unknown",m={...s,location:c};return this.warn(e,`[HAPPY-PATH] ${t}`,m,n),o}},l=new Se;var Us={};function Os(){return typeof __dirname<"u"?__dirname:(0,T.dirname)((0,We.fileURLToPath)(Us.url))}var As=Os();function Is(){let r=process.env.KEEPMIND_DATA_DIR??process.env.CLAUDE_MEM_DATA_DIR;if(r)return r;let e=(0,T.join)((0,he.homedir)(),".keepmind"),t=(0,T.join)(e,"settings.json");try{if((0,v.existsSync)(t)){let s=JSON.parse((0,v.readFileSync)(t,"utf-8")),n=s.env??s,o=n.KEEPMIND_DATA_DIR??n.CLAUDE_MEM_DATA_DIR;if(o)return o}}catch{}return e}var N=Is(),$=process.env.CLAUDE_CONFIG_DIR||(0,T.join)((0,he.homedir)(),".claude"),yr=(0,T.join)($,"plugins","marketplaces","keepmind"),Ns=(0,T.join)(N,"archives"),Cs=(0,T.join)(N,"logs"),Ls=(0,T.join)(N,"trash"),ys=(0,T.join)(N,"backups"),Ds=(0,T.join)(N,"modes"),Dr=(0,T.join)(N,"settings.json"),k=(0,T.join)(N,"keepmind.db"),B=(0,T.join)(N,"claude-mem.db"),vs=(0,T.join)(N,"vector-db"),Ve=(0,T.join)(N,"observer-sessions"),Re=(0,T.basename)(Ve),vr=(0,T.join)($,"settings.json"),Mr=(0,T.join)($,"commands"),Ur=(0,T.join)($,"CLAUDE.md");function Ke(r){(0,v.mkdirSync)(r,{recursive:!0})}function Ms(){try{if((0,v.existsSync)(k)||!(0,v.existsSync)(B))return(0,v.existsSync)(k);for(let r of["","-wal","-shm"]){let e=B+r,t=k+r;(0,v.existsSync)(e)&&!(0,v.existsSync)(t)&&(0,v.renameSync)(e,t)}return l.info("DB","Migrated legacy claude-mem.db to keepmind.db",{from:B,to:k}),!0}catch(r){return l.warn("DB","Could not rename legacy claude-mem.db to keepmind.db (file may be locked) \u2014 falling back to legacy path",{},r instanceof Error?r:new Error(String(r))),!1}}function Oe(){return Ms(),!(0,v.existsSync)(k)&&(0,v.existsSync)(B)?B:k}function Ye(){return(0,T.join)(As,"..")}var P={dataDir:()=>N,workerPid:()=>(0,T.join)(N,"worker.pid"),workerPort:()=>(0,T.join)(N,"worker.port"),serverPid:()=>(0,T.join)(N,".server-beta.pid"),serverPort:()=>(0,T.join)(N,".server-beta.port"),serverRuntime:()=>(0,T.join)(N,".server-beta.runtime.json"),settings:()=>(0,T.join)(N,"settings.json"),database:()=>Oe(),chroma:()=>(0,T.join)(N,"chroma"),combinedCerts:()=>(0,T.join)(N,"combined_certs.pem"),transcriptsConfig:()=>(0,T.join)(N,"transcript-watch.json"),transcriptsState:()=>(0,T.join)(N,"transcript-watch-state.json"),corpora:()=>(0,T.join)(N,"corpora"),supervisorRegistry:()=>(0,T.join)(N,"supervisor.json"),envFile:()=>(0,T.join)(N,".env"),logsDir:()=>Cs,archives:()=>Ns,trash:()=>Ls,backups:()=>ys,modes:()=>Ds,vectorDb:()=>vs,observerSessions:()=>Ve};var qe=require("crypto");function Ae(r,e,t){return(0,qe.createHash)("sha256").update([r||"",e||"",t||""].join("\0")).digest("hex").slice(0,16)}function Ie(r){if(!r)return[];try{let e=JSON.parse(r);return Array.isArray(e)?e:[String(e)]}catch{return[r]}}var Ne=r=>`\xABredacted:${r}\xBB`,xs=[{type:"PRIVATE_KEY",re:/-----BEGIN[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----[\s\S]{0,4000}?-----END[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----/g},{type:"CONNECTION_STRING",re:/\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqp|https?):\/\/[^\s/@]+:[^\s/@]+@[^\s]{1,200}/gi},{type:"AWS_KEY",re:/\b((?:A3T[A-Z0-9]|AKIA|ASIA|ABIA|ACCA)[A-Z2-7]{16})\b/g},{type:"GITHUB_FINE_PAT",re:/\bgithub_pat_\w{82}\b/g},{type:"GITHUB_PAT",re:/\bghp_[0-9A-Za-z]{36}\b/g},{type:"GITLAB_PAT",re:/\bglpat-[\w-]{20}\b/g},{type:"SLACK_TOKEN",re:/\bxox[baprs]-[0-9A-Za-z-]{10,200}\b/g},{type:"GOOGLE_API_KEY",re:/\bAIza[\w-]{35}\b/g},{type:"STRIPE_KEY",re:/\b(?:sk|rk|pk)_(?:test|live|prod)_[A-Za-z0-9]{10,99}\b/g},{type:"JWT",re:/\bey[A-Za-z0-9_-]{17,500}\.ey[A-Za-z0-9_/\\-]{17,500}\.[A-Za-z0-9_/\\-]{10,500}={0,2}/g},{type:"BEARER",re:/\b[Bb]earer\s+[A-Za-z0-9._~+/=-]{12,500}/g},{type:"BCRYPT",re:/\$2[aby]\$\d{2}\$[./A-Za-z0-9]{53}/g},{type:"GENERIC_SECRET",re:/(?:pass(?:word)?|secret|token|api[_-]?key|client[_-]?secret|auth)\b['"\s]{0,3}[:=>]{1,2}['"\s]{0,3}([\w./+=-]{10,150})/gi,group:1}];function ws(r,e){if(e.re.lastIndex=0,e.group===void 0)return r.replace(e.re,Ne(e.type));let t=e.group;return r.replace(e.re,(s,...n)=>{let o=n[t-1];return typeof o!="string"||o.length===0?s:s.replace(o,Ne(e.type))})}function ks(r){if(r.length===0)return 0;let e=new Map;for(let s of r)e.set(s,(e.get(s)??0)+1);let t=0;for(let s of e.values()){let n=s/r.length;t-=n*Math.log2(n)}return t}var Fs=/^[0-9a-f]+$/i;function Ps(r,e){return r.length<20||r.length>200||/[\s]/.test(r)||!/\d/.test(r)||!/[A-Za-z]/.test(r)||r.includes("/")||r.includes("\\")||r.length<=64&&Fs.test(r)||r.includes("redacted:")?!1:ks(r)>=e}var $s=/([\s"'`,;(){}\[\]<>]+)/;function Gs(r,e){let t=r.split($s);for(let s=0;s<t.length;s++){let n=t[s];n&&Ps(n,e)&&(t[s]=Ne("HIGH_ENTROPY"))}return t.join("")}function Ce(r,e={}){if(typeof r!="string"||r.length===0)return r;try{let t=r;for(let s of xs)t=ws(t,s);return e.entropySweep!==!1&&(t=Gs(t,e.entropyThreshold??4)),t}catch{return r}}function Q(r,e={}){if(typeof r=="string")return Ce(r,e);if(Array.isArray(r))return r.map(t=>Q(t,e));if(r&&typeof r=="object"){let t={};for(let[s,n]of Object.entries(r))t[s]=Q(n,e);return t}return r}var Z=require("fs");var ye={redactSecrets:{enabled:!0,entropyThreshold:4,entropySweep:!0},scoping:{enabled:!0,includeGlobal:!0,defaultSearchScope:"project"},importance:{enabled:!0,halfLifeDays:14,llmRefine:!1},injection:{tokenBudget:4e3,candidateMultiplier:3},reconcile:{enabled:!1,noopThreshold:.92,updateBand:.75,llmAdjudicate:!1,allowHardDelete:!1},supersession:{enabled:!1},expiry:{enabled:!1,ttlDays:28,importanceFloor:7,hardDelete:!1},optimizer:{enabled:!0,tickMinutes:5,vacuumHours:24}};function z(r){return!!r&&typeof r=="object"&&!Array.isArray(r)}function F(r,e){if(!z(e))return{...r};let t={...r};for(let s of Object.keys(r))e[s]!==void 0&&typeof e[s]==typeof r[s]&&(t[s]=e[s]);return t}var Le=null;function ee(r=!1){if(Le&&!r)return Le;let e=ye,t;try{let o=P.settings();if((0,Z.existsSync)(o)){let i=JSON.parse((0,Z.readFileSync)(o,"utf-8").replace(/^/,"")),a=z(i)?i.memoryQuality??(z(i.env)?i.env.memoryQuality:void 0):void 0;z(a)&&(t=a)}}catch(o){l.debug("CONFIG","memoryQuality config load failed; using defaults",{},o instanceof Error?o:new Error(String(o)))}let s={redactSecrets:F(e.redactSecrets,t?.redactSecrets),scoping:F(e.scoping,t?.scoping),importance:F(e.importance,t?.importance),injection:F(e.injection,t?.injection),reconcile:F(e.reconcile,t?.reconcile),supersession:F(e.supersession,t?.supersession),expiry:F(e.expiry,t?.expiry),optimizer:F(e.optimizer,t?.optimizer)},n=process.env.CLAUDE_MEM_REDACT_SECRETS;return(n==="0"||n==="false")&&(s.redactSecrets.enabled=!1),Le=s,s}var Hs={decision:9,bugfix:8,refactor:6,discovery:5,global:7,other:3,trivial:1};function Bs(r){if(Array.isArray(r))return r.length;if(typeof r=="string")try{let e=JSON.parse(r);return Array.isArray(e)?e.length:0}catch{return 0}return 0}function De(r){let e=Hs[r.type??"other"]??4;return Bs(r.files_modified)>0&&(e+=1),(r.narrative?.length??0)<40&&(e-=1),/\b(TODO|FIXME|WIP)\b/i.test(r.narrative??"")&&(e-=1),Math.max(1,Math.min(10,e))}var Xs=14,js=864e5;function Je(r,e={}){let t=e.now??Date.now(),s=(e.halfLifeDays??Xs)*js,n=(r.importance??5)/10,o=Math.max(0,t-(r.created_at_epoch??t)),i=Math.pow(.5,o/s);return n*i}var Ws=new Set(["the","a","an","and","or","but","to","of","in","on","for","with","is","are","was","were","be","been","it","this","that","we","i","as","at","by","from","into","over","so","then","than","will"]);function te(r){return r?r.toLowerCase().replace(/[^a-z0-9\s]+/g," ").split(/\s+/).filter(e=>e.length>0&&!Ws.has(e)).join(" ").trim():""}function Qe(r){let e=new Set,t=r.replace(/\s+/g," ");for(let s=0;s+3<=t.length;s++)e.add(t.slice(s,s+3));return e}function Vs(r,e){let t=Qe(r),s=Qe(e);if(t.size===0&&s.size===0)return 1;if(t.size===0||s.size===0)return 0;let n=0;for(let o of t)s.has(o)&&n++;return n/(t.size+s.size-n)}function Ks(r,e){let t=new Map,s=new Map;for(let a of r.split(" "))a&&t.set(a,(t.get(a)??0)+1);for(let a of e.split(" "))a&&s.set(a,(s.get(a)??0)+1);if(t.size===0||s.size===0)return 0;let n=0;for(let[a,d]of t)n+=d*(s.get(a)??0);let o=0;for(let a of t.values())o+=a*a;let i=0;for(let a of s.values())i+=a*a;return n/(Math.sqrt(o)*Math.sqrt(i)||1)}function Ys(r,e){let t=te(`${r??""}`),s=te(`${e??""}`);return Math.max(Vs(t,s),Ks(t,s))}function ze(r,e,t){let s=`${r.title??""} ${r.narrative??""}`,n={action:"ADD"},o=-1;for(let i of e){let a=Ys(s,`${i.title??""} ${i.narrative??""}`);a<=o||(o=a,a>=t.noopThreshold?n={action:"NOOP",candidateId:i.id,score:a}:a>=t.updateBand&&t.supersessionEnabled?n={action:"UPDATE",candidateId:i.id,score:a}:n={action:"ADD",score:a})}return n}var Ze=require("crypto");function ve(r){let e=r.title??"";if(!e){if(Array.isArray(r.facts)&&r.facts.length>0)e=r.facts[0];else if(typeof r.facts=="string")try{let s=JSON.parse(r.facts);Array.isArray(s)&&s.length>0&&(e=String(s[0]))}catch{}}e||(e=(r.narrative??"").slice(0,80));let t=te(e);return(0,Ze.createHash)("sha1").update(t).digest("hex").slice(0,16)}var E="claude";function qs(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function L(r){if(!r)return E;let e=qs(r);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:E}function et(r){let e=["claude","codex","cursor"];return[...r].sort((t,s)=>{let n=e.indexOf(t),o=e.indexOf(s);return n!==-1||o!==-1?n===-1?1:o===-1?-1:n-o:t.localeCompare(s)})}function tt(r,e,t,s,n){let o=Date.now()-s,i=n!==void 0?"up.session_db_id = ?":"up.content_session_id = ?",a=n??e;return r.prepare(`
9
+ `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),c=u?`${u[1].split("/").pop()}:${u[2]}`:"unknown",m={...s,location:c};return this.warn(e,`[HAPPY-PATH] ${t}`,m,n),o}},l=new Se;var Us={};function Os(){return typeof __dirname<"u"?__dirname:(0,T.dirname)((0,We.fileURLToPath)(Us.url))}var As=Os();function Is(){let r=process.env.KEEPMIND_DATA_DIR??process.env.CLAUDE_MEM_DATA_DIR;if(r)return r;let e=(0,T.join)((0,he.homedir)(),".keepmind"),t=(0,T.join)(e,"settings.json");try{if((0,v.existsSync)(t)){let s=JSON.parse((0,v.readFileSync)(t,"utf-8")),n=s.env??s,o=n.KEEPMIND_DATA_DIR??n.CLAUDE_MEM_DATA_DIR;if(o)return o}}catch{}return e}var N=Is(),$=process.env.CLAUDE_CONFIG_DIR||(0,T.join)((0,he.homedir)(),".claude"),yr=(0,T.join)($,"plugins","marketplaces","keepmind"),Ns=(0,T.join)(N,"archives"),Cs=(0,T.join)(N,"logs"),Ls=(0,T.join)(N,"trash"),ys=(0,T.join)(N,"backups"),Ds=(0,T.join)(N,"modes"),Dr=(0,T.join)(N,"settings.json"),k=(0,T.join)(N,"keepmind.db"),B=(0,T.join)(N,"claude-mem.db"),vs=(0,T.join)(N,"vector-db"),Ve=(0,T.join)(N,"observer-sessions"),Re=(0,T.basename)(Ve),vr=(0,T.join)($,"settings.json"),Mr=(0,T.join)($,"commands"),Ur=(0,T.join)($,"CLAUDE.md");function Ke(r){(0,v.mkdirSync)(r,{recursive:!0})}function Ms(){try{if((0,v.existsSync)(k)||!(0,v.existsSync)(B))return(0,v.existsSync)(k);for(let r of["","-wal","-shm"]){let e=B+r,t=k+r;(0,v.existsSync)(e)&&!(0,v.existsSync)(t)&&(0,v.renameSync)(e,t)}return l.info("DB","Migrated legacy claude-mem.db to keepmind.db",{from:B,to:k}),!0}catch(r){return l.warn("DB","Could not rename legacy claude-mem.db to keepmind.db (file may be locked) \u2014 falling back to legacy path",{},r instanceof Error?r:new Error(String(r))),!1}}function Oe(){return Ms(),!(0,v.existsSync)(k)&&(0,v.existsSync)(B)?B:k}function Ye(){return(0,T.join)(As,"..")}var F={dataDir:()=>N,workerPid:()=>(0,T.join)(N,"worker.pid"),workerPort:()=>(0,T.join)(N,"worker.port"),serverPid:()=>(0,T.join)(N,".server-beta.pid"),serverPort:()=>(0,T.join)(N,".server-beta.port"),serverRuntime:()=>(0,T.join)(N,".server-beta.runtime.json"),settings:()=>(0,T.join)(N,"settings.json"),database:()=>Oe(),chroma:()=>(0,T.join)(N,"chroma"),combinedCerts:()=>(0,T.join)(N,"combined_certs.pem"),transcriptsConfig:()=>(0,T.join)(N,"transcript-watch.json"),transcriptsState:()=>(0,T.join)(N,"transcript-watch-state.json"),corpora:()=>(0,T.join)(N,"corpora"),supervisorRegistry:()=>(0,T.join)(N,"supervisor.json"),envFile:()=>(0,T.join)(N,".env"),logsDir:()=>Cs,archives:()=>Ns,trash:()=>Ls,backups:()=>ys,modes:()=>Ds,vectorDb:()=>vs,observerSessions:()=>Ve};var qe=require("crypto");function Ae(r,e,t){return(0,qe.createHash)("sha256").update([r||"",e||"",t||""].join("\0")).digest("hex").slice(0,16)}function Ie(r){if(!r)return[];try{let e=JSON.parse(r);return Array.isArray(e)?e:[String(e)]}catch{return[r]}}var Ne=r=>`\xABredacted:${r}\xBB`,xs=[{type:"PRIVATE_KEY",re:/-----BEGIN[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----[\s\S]{0,4000}?-----END[ A-Z0-9_-]{0,100}PRIVATE KEY(?: BLOCK)?-----/g},{type:"CONNECTION_STRING",re:/\b(?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqp|https?):\/\/[^\s/@]+:[^\s/@]+@[^\s]{1,200}/gi},{type:"AWS_KEY",re:/\b((?:A3T[A-Z0-9]|AKIA|ASIA|ABIA|ACCA)[A-Z2-7]{16})\b/g},{type:"GITHUB_FINE_PAT",re:/\bgithub_pat_\w{82}\b/g},{type:"GITHUB_PAT",re:/\bghp_[0-9A-Za-z]{36}\b/g},{type:"GITLAB_PAT",re:/\bglpat-[\w-]{20}\b/g},{type:"SLACK_TOKEN",re:/\bxox[baprs]-[0-9A-Za-z-]{10,200}\b/g},{type:"GOOGLE_API_KEY",re:/\bAIza[\w-]{35}\b/g},{type:"STRIPE_KEY",re:/\b(?:sk|rk|pk)_(?:test|live|prod)_[A-Za-z0-9]{10,99}\b/g},{type:"JWT",re:/\bey[A-Za-z0-9_-]{17,500}\.ey[A-Za-z0-9_/\\-]{17,500}\.[A-Za-z0-9_/\\-]{10,500}={0,2}/g},{type:"BEARER",re:/\b[Bb]earer\s+[A-Za-z0-9._~+/=-]{12,500}/g},{type:"BCRYPT",re:/\$2[aby]\$\d{2}\$[./A-Za-z0-9]{53}/g},{type:"GENERIC_SECRET",re:/(?:pass(?:word)?|secret|token|api[_-]?key|client[_-]?secret|auth)\b['"\s]{0,3}[:=>]{1,2}['"\s]{0,3}([\w./+=-]{10,150})/gi,group:1}];function ws(r,e){if(e.re.lastIndex=0,e.group===void 0)return r.replace(e.re,Ne(e.type));let t=e.group;return r.replace(e.re,(s,...n)=>{let o=n[t-1];return typeof o!="string"||o.length===0?s:s.replace(o,Ne(e.type))})}function ks(r){if(r.length===0)return 0;let e=new Map;for(let s of r)e.set(s,(e.get(s)??0)+1);let t=0;for(let s of e.values()){let n=s/r.length;t-=n*Math.log2(n)}return t}var Ps=/^[0-9a-f]+$/i;function Fs(r,e){return r.length<20||r.length>200||/[\s]/.test(r)||!/\d/.test(r)||!/[A-Za-z]/.test(r)||r.includes("/")||r.includes("\\")||r.length<=64&&Ps.test(r)||r.includes("redacted:")?!1:ks(r)>=e}var $s=/([\s"'`,;(){}\[\]<>]+)/;function Gs(r,e){let t=r.split($s);for(let s=0;s<t.length;s++){let n=t[s];n&&Fs(n,e)&&(t[s]=Ne("HIGH_ENTROPY"))}return t.join("")}function Ce(r,e={}){if(typeof r!="string"||r.length===0)return r;try{let t=r;for(let s of xs)t=ws(t,s);return e.entropySweep!==!1&&(t=Gs(t,e.entropyThreshold??4)),t}catch{return r}}function Q(r,e={}){if(typeof r=="string")return Ce(r,e);if(Array.isArray(r))return r.map(t=>Q(t,e));if(r&&typeof r=="object"){let t={};for(let[s,n]of Object.entries(r))t[s]=Q(n,e);return t}return r}var Z=require("fs");var ye={redactSecrets:{enabled:!0,entropyThreshold:4,entropySweep:!0},scoping:{enabled:!0,includeGlobal:!0,defaultSearchScope:"project"},importance:{enabled:!0,halfLifeDays:14,llmRefine:!1},injection:{tokenBudget:4e3,candidateMultiplier:3},reconcile:{enabled:!1,noopThreshold:.92,updateBand:.75,llmAdjudicate:!1,allowHardDelete:!1},supersession:{enabled:!1},expiry:{enabled:!1,ttlDays:28,importanceFloor:7,hardDelete:!1},optimizer:{enabled:!0,tickMinutes:5,vacuumHours:24}};function z(r){return!!r&&typeof r=="object"&&!Array.isArray(r)}function P(r,e){if(!z(e))return{...r};let t={...r};for(let s of Object.keys(r))e[s]!==void 0&&typeof e[s]==typeof r[s]&&(t[s]=e[s]);return t}var Le=null;function ee(r=!1){if(Le&&!r)return Le;let e=ye,t;try{let o=F.settings();if((0,Z.existsSync)(o)){let i=JSON.parse((0,Z.readFileSync)(o,"utf-8").replace(/^/,"")),a=z(i)?i.memoryQuality??(z(i.env)?i.env.memoryQuality:void 0):void 0;z(a)&&(t=a)}}catch(o){l.debug("CONFIG","memoryQuality config load failed; using defaults",{},o instanceof Error?o:new Error(String(o)))}let s={redactSecrets:P(e.redactSecrets,t?.redactSecrets),scoping:P(e.scoping,t?.scoping),importance:P(e.importance,t?.importance),injection:P(e.injection,t?.injection),reconcile:P(e.reconcile,t?.reconcile),supersession:P(e.supersession,t?.supersession),expiry:P(e.expiry,t?.expiry),optimizer:P(e.optimizer,t?.optimizer)},n=process.env.CLAUDE_MEM_REDACT_SECRETS;return(n==="0"||n==="false")&&(s.redactSecrets.enabled=!1),Le=s,s}var Hs={decision:9,bugfix:8,refactor:6,discovery:5,global:7,other:3,trivial:1};function Bs(r){if(Array.isArray(r))return r.length;if(typeof r=="string")try{let e=JSON.parse(r);return Array.isArray(e)?e.length:0}catch{return 0}return 0}function De(r){let e=Hs[r.type??"other"]??4;return Bs(r.files_modified)>0&&(e+=1),(r.narrative?.length??0)<40&&(e-=1),/\b(TODO|FIXME|WIP)\b/i.test(r.narrative??"")&&(e-=1),Math.max(1,Math.min(10,e))}var Xs=14,js=864e5;function Je(r,e={}){let t=e.now??Date.now(),s=(e.halfLifeDays??Xs)*js,n=(r.importance??5)/10,o=Math.max(0,t-(r.created_at_epoch??t)),i=Math.pow(.5,o/s);return n*i}var Ws=new Set(["the","a","an","and","or","but","to","of","in","on","for","with","is","are","was","were","be","been","it","this","that","we","i","as","at","by","from","into","over","so","then","than","will"]);function te(r){return r?r.toLowerCase().replace(/[^a-z0-9\s]+/g," ").split(/\s+/).filter(e=>e.length>0&&!Ws.has(e)).join(" ").trim():""}function Qe(r){let e=new Set,t=r.replace(/\s+/g," ");for(let s=0;s+3<=t.length;s++)e.add(t.slice(s,s+3));return e}function Vs(r,e){let t=Qe(r),s=Qe(e);if(t.size===0&&s.size===0)return 1;if(t.size===0||s.size===0)return 0;let n=0;for(let o of t)s.has(o)&&n++;return n/(t.size+s.size-n)}function Ks(r,e){let t=new Map,s=new Map;for(let a of r.split(" "))a&&t.set(a,(t.get(a)??0)+1);for(let a of e.split(" "))a&&s.set(a,(s.get(a)??0)+1);if(t.size===0||s.size===0)return 0;let n=0;for(let[a,d]of t)n+=d*(s.get(a)??0);let o=0;for(let a of t.values())o+=a*a;let i=0;for(let a of s.values())i+=a*a;return n/(Math.sqrt(o)*Math.sqrt(i)||1)}function Ys(r,e){let t=te(`${r??""}`),s=te(`${e??""}`);return Math.max(Vs(t,s),Ks(t,s))}function ze(r,e,t){let s=`${r.title??""} ${r.narrative??""}`,n={action:"ADD"},o=-1;for(let i of e){let a=Ys(s,`${i.title??""} ${i.narrative??""}`);a<=o||(o=a,a>=t.noopThreshold?n={action:"NOOP",candidateId:i.id,score:a}:a>=t.updateBand&&t.supersessionEnabled?n={action:"UPDATE",candidateId:i.id,score:a}:n={action:"ADD",score:a})}return n}var Ze=require("crypto");function ve(r){let e=r.title??"";if(!e){if(Array.isArray(r.facts)&&r.facts.length>0)e=r.facts[0];else if(typeof r.facts=="string")try{let s=JSON.parse(r.facts);Array.isArray(s)&&s.length>0&&(e=String(s[0]))}catch{}}e||(e=(r.narrative??"").slice(0,80));let t=te(e);return(0,Ze.createHash)("sha1").update(t).digest("hex").slice(0,16)}var E="claude";function qs(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function L(r){if(!r)return E;let e=qs(r);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:E}function et(r){let e=["claude","codex","cursor"];return[...r].sort((t,s)=>{let n=e.indexOf(t),o=e.indexOf(s);return n!==-1||o!==-1?n===-1?1:o===-1?-1:n-o:t.localeCompare(s)})}function tt(r,e,t,s,n){let o=Date.now()-s,i=n!==void 0?"up.session_db_id = ?":"up.content_session_id = ?",a=n??e;return r.prepare(`
10
10
  SELECT
11
11
  up.*,
12
12
  s.memory_session_id,
@@ -883,7 +883,7 @@ ${o.stack}`:` ${o.message}`;else if(this.getLevel()===0&&typeof o=="object")try{
883
883
  created_at, created_at_epoch
884
884
  ) VALUES (?, ?, ?, ?, ?, ?)
885
885
  `).run(t,e.content_session_id,e.prompt_number,e.prompt_text,e.created_at,e.created_at_epoch).lastInsertRowid}}};var dt=require("os"),ut=G(require("path"),1),ct=require("child_process");var oe=require("fs"),ne=G(require("path"),1);var X={isWorktree:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function at(r){let e=ne.default.join(r,".git"),t;try{t=(0,oe.statSync)(e)}catch(c){return c instanceof Error&&c.code!=="ENOENT"&&l.warn("GIT","Unexpected error checking .git",{error:c instanceof Error?c.message:String(c)}),X}if(!t.isFile())return X;let s;try{s=(0,oe.readFileSync)(e,"utf-8").trim()}catch(c){return l.warn("GIT","Failed to read .git file",{error:c instanceof Error?c.message:String(c)}),X}let n=s.match(/^gitdir:\s*(.+)$/);if(!n)return X;let i=n[1].match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(!i)return X;let a=i[1],d=ne.default.basename(r),u=ne.default.basename(a);return{isWorktree:!0,worktreeName:d,parentRepoPath:a,parentProjectName:u}}function lt(r){return r==="~"||r.startsWith("~/")?r.replace(/^~/,(0,dt.homedir)()):r}function Zs(r){try{return(0,ct.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"]}).trim()||null}catch{return null}}function er(r){if(!r||r.trim()==="")return l.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),"unknown-project";let e=lt(r),s=Zs(e)??e,n=ut.default.basename(s);if(n===""){if(process.platform==="win32"){let i=r.match(/^([A-Z]):\\/i);if(i){let d=`drive-${i[1].toUpperCase()}`;return l.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:d}),d}}return l.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),"unknown-project"}return n}function _t(r){let e=er(r);if(!r)return{primary:e,parent:null,isWorktree:!1,allProjects:[e]};let t=lt(r),s=at(t);if(s.isWorktree&&s.parentProjectName){let n=`${s.parentProjectName}/${e}`;return{primary:n,parent:s.parentProjectName,isWorktree:!0,allProjects:[s.parentProjectName,n]}}return{primary:e,parent:null,isWorktree:!1,allProjects:[e]}}var x=require("fs"),j=require("path"),xe=require("os");var Ue={DEFAULT:3e5,HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function pt(r){return process.platform==="win32"?Math.round(r*Ue.WINDOWS_MULTIPLIER):r}var O=require("fs");var U=require("path");var mt=require("crypto");var tr=process.platform==="win32";function sr(r){(0,O.existsSync)(r)||(0,O.mkdirSync)(r,{recursive:!0})}function ie(r,e){let t=r;try{if((0,O.lstatSync)(r).isSymbolicLink())try{t=(0,O.realpathSync)(r)}catch{let u=(0,O.readlinkSync)(r);t=(0,U.resolve)((0,U.dirname)(r),u)}}catch(u){let c=u.code;if(c!=="ENOENT"&&c!=="ENOTDIR")throw u}sr((0,U.dirname)(t));let s=(0,U.dirname)(t),n=(0,U.basename)(t),o=(0,U.join)(s,`.${n}.${process.pid}.${(0,mt.randomBytes)(6).toString("hex")}.tmp`),i=Buffer.from(JSON.stringify(e,null,2)+`
886
- `,"utf-8"),a;try{a=(0,O.statSync)(t).mode&511}catch{}let d;try{d=a!==void 0?(0,O.openSync)(o,"w",a):(0,O.openSync)(o,"w");let u=0;for(;u<i.length;){let c=(0,O.writeSync)(d,i,u,i.length-u);if(c===0)throw new Error(`writeSync stalled at ${u}/${i.length} bytes`);u+=c}if((0,O.fsyncSync)(d),(0,O.closeSync)(d),d=void 0,(0,O.renameSync)(o,t),!tr){let c;try{c=(0,O.openSync)(s,"r"),(0,O.fsyncSync)(c)}catch{}finally{if(c!==void 0)try{(0,O.closeSync)(c)}catch{}}}}catch(u){if(d!==void 0)try{(0,O.closeSync)(d)}catch{}try{(0,O.unlinkSync)(o)}catch{}throw u}}var ae=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(pt(Ue.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_GEMINI_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_GEMINI_MAX_TOKENS:"100000",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,j.join)((0,xe.homedir)(),".keepmind"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,j.join)((0,xe.homedir)(),".keepmind","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static envOverride(e){let t=e.replace(/^CLAUDE_MEM_/,"KEEPMIND_");return process.env[t]??process.env[e]}static get(e){return this.envOverride(e)??this.DEFAULTS[e]}static getInt(e){let t=this.get(e);return parseInt(t,10)}static getBool(e){let t=this.get(e);return t==="true"||t===!0}static applyEnvOverrides(e){let t={...e};for(let s of Object.keys(this.DEFAULTS)){let n=this.envOverride(s);n!==void 0&&(t[s]=n)}return t}static loadFromFile(e,t=!0){try{if(!(0,x.existsSync)(e)){let a=this.getAllDefaults();try{let d=(0,j.dirname)(e);(0,x.existsSync)(d)||(0,x.mkdirSync)(d,{recursive:!0}),ie(e,a),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(d){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,d instanceof Error?d.message:String(d))}return t?this.applyEnvOverrides(a):a}let s=(0,x.readFileSync)(e,"utf-8"),n=JSON.parse(s.replace(/^\uFEFF/,"")),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{ie(e,o),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a instanceof Error?a.message:String(a))}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return t?this.applyEnvOverrides(i):i}catch(s){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,s instanceof Error?s.message:String(s));let n=this.getAllDefaults();try{if((0,x.existsSync)(e)){let o=`${e}.corrupt-${Date.now()}`;(0,x.renameSync)(e,o),console.warn("[SETTINGS] Backed up corrupt settings file to:",o)}ie(e,n),console.warn("[SETTINGS] Recovered settings file with defaults:",e)}catch(o){console.warn("[SETTINGS] Failed to recover corrupt settings file:",e,o instanceof Error?o.message:String(o))}return t?this.applyEnvOverrides(n):n}}};var W=require("fs"),de=require("path");var M=class r{static instance=null;activeMode=null;modesDir;constructor(){let e=Ye(),t=[...process.env.CLAUDE_MEM_MODES_DIR?[process.env.CLAUDE_MEM_MODES_DIR]:[],(0,de.join)(e,"modes"),(0,de.join)(e,"..","plugin","modes")],s=t.find(n=>(0,W.existsSync)(n));this.modesDir=s||t[0]}static getInstance(){return r.instance||(r.instance=new r),r.instance}parseInheritance(e){let t=e.split("--");if(t.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(t.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:t[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,t){let s={...e};for(let n in t){let o=t[n],i=e[n];this.isPlainObject(o)&&this.isPlainObject(i)?s[n]=this.deepMerge(i,o):s[n]=o}return s}loadModeFile(e){let t=(0,de.join)(this.modesDir,`${e}.json`);if(!(0,W.existsSync)(t))throw new Error(`Mode file not found: ${t}`);let s=(0,W.readFileSync)(t,"utf-8");return JSON.parse(s)}loadMode(e){let t=this.parseInheritance(e);if(!t.hasParent)try{let d=this.loadModeFile(e);return this.activeMode=d,l.debug("SYSTEM",`Loaded mode: ${d.name} (${e})`,void 0,{types:d.observation_types.map(u=>u.id),concepts:d.observation_concepts.map(u=>u.id)}),d}catch(d){if(d instanceof Error?l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{message:d.message}):l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{error:String(d)}),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:s,overrideId:n}=t,o;try{o=this.loadMode(s)}catch(d){d instanceof Error?l.warn("WORKER",`Parent mode '${s}' not found for ${e}, falling back to 'code'`,{message:d.message}):l.warn("WORKER",`Parent mode '${s}' not found for ${e}, falling back to 'code'`,{error:String(d)}),o=this.loadMode("code")}let i;try{i=this.loadModeFile(n),l.debug("SYSTEM",`Loaded override file: ${n} for parent ${s}`)}catch(d){return d instanceof Error?l.warn("WORKER",`Override file '${n}' not found, using parent mode '${s}' only`,{message:d.message}):l.warn("WORKER",`Override file '${n}' not found, using parent mode '${s}' only`,{error:String(d)}),this.activeMode=o,o}if(!i)return l.warn("SYSTEM",`Invalid override file: ${n}, using parent mode '${s}' only`),this.activeMode=o,o;let a=this.deepMerge(o,i);return this.activeMode=a,l.debug("SYSTEM",`Loaded mode with inheritance: ${a.name} (${e} = ${s} + ${n})`,void 0,{parent:s,override:n,types:a.observation_types.map(d=>d.id),concepts:a.observation_concepts.map(d=>d.id)}),a}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getObservationTypes(){return this.getActiveMode().observation_types}getTypeIcon(e){return this.getObservationTypes().find(s=>s.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(s=>s.id===e)?.work_emoji||"\u{1F4DD}"}};function Et(){let r=P.settings(),e=ae.loadFromFile(r),t=M.getInstance().getActiveMode(),s=new Set(t.observation_types.map(o=>o.id)),n=new Set(t.observation_concepts.map(o=>o.id));return{totalObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10),fullObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_FULL_COUNT,10),sessionCount:parseInt(e.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10),showReadTokens:e.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",showWorkTokens:e.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",showSavingsAmount:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",showSavingsPercent:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT==="true",observationTypes:s,observationConcepts:n,fullObservationField:e.CLAUDE_MEM_CONTEXT_FULL_FIELD,showLastSummary:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",showLastMessage:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true"}}var _={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",cyan:"\x1B[36m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",gray:"\x1B[90m",red:"\x1B[31m"},gt=4,we=1;function ue(r){let e=(r.title?.length||0)+(r.subtitle?.length||0)+(r.narrative?.length||0)+JSON.stringify(r.facts||[]).length;return Math.ceil(e/gt)}function ke(r){let e=r.length,t=r.reduce((i,a)=>i+ue(a),0),s=r.reduce((i,a)=>i+(a.discovery_tokens||0),0),n=s-t,o=s>0?Math.round(n/s*100):0;return{totalObservations:e,totalReadTokens:t,totalDiscoveryTokens:s,savings:n,savingsPercent:o}}function rr(r){return M.getInstance().getWorkEmoji(r)}function V(r,e){let t=ue(r),s=r.discovery_tokens||0,n=rr(r.type),o=s>0?`${n} ${s.toLocaleString("en-US")}`:"-";return{readTokens:t,discoveryTokens:s,discoveryDisplay:o,workEmoji:n}}function ce(r){return r.showReadTokens||r.showWorkTokens||r.showSavingsAmount||r.showSavingsPercent}function nr(r){return ue(r)}function or(r,e){if(!Number.isFinite(e)||e<=0)return r;let t=[],s=0;for(let n of r){let o=nr(n);s+o>e||(t.push(n),s+=o)}return t}function Tt(r,e){let t=e.now??Date.now(),s=r.map(i=>({o:i,score:Je(i,{now:t,halfLifeDays:e.halfLifeDays})})).sort((i,a)=>a.score-i.score).map(i=>i.o),n=e.maxRows>0?s.slice(0,e.maxRows):s;return or(n,e.tokenBudget).sort((i,a)=>(a.created_at_epoch??0)-(i.created_at_epoch??0))}var ft=G(require("path"),1),le=require("fs");function bt(r,e,t,s){let n=Array.from(t.observationTypes),o=n.map(()=>"?").join(","),i=Array.from(t.observationConcepts),a=i.map(()=>"?").join(",");return r.db.prepare(`
886
+ `,"utf-8"),a;try{a=(0,O.statSync)(t).mode&511}catch{}let d;try{d=a!==void 0?(0,O.openSync)(o,"w",a):(0,O.openSync)(o,"w");let u=0;for(;u<i.length;){let c=(0,O.writeSync)(d,i,u,i.length-u);if(c===0)throw new Error(`writeSync stalled at ${u}/${i.length} bytes`);u+=c}if((0,O.fsyncSync)(d),(0,O.closeSync)(d),d=void 0,(0,O.renameSync)(o,t),!tr){let c;try{c=(0,O.openSync)(s,"r"),(0,O.fsyncSync)(c)}catch{}finally{if(c!==void 0)try{(0,O.closeSync)(c)}catch{}}}}catch(u){if(d!==void 0)try{(0,O.closeSync)(d)}catch{}try{(0,O.unlinkSync)(o)}catch{}throw u}}var ae=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(pt(Ue.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_GEMINI_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_GEMINI_MAX_TOKENS:"100000",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,j.join)((0,xe.homedir)(),".keepmind"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,j.join)((0,xe.homedir)(),".keepmind","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static envOverride(e){let t=e.replace(/^CLAUDE_MEM_/,"KEEPMIND_");return process.env[t]??process.env[e]}static get(e){return this.envOverride(e)??this.DEFAULTS[e]}static getInt(e){let t=this.get(e);return parseInt(t,10)}static getBool(e){let t=this.get(e);return t==="true"||t===!0}static applyEnvOverrides(e){let t={...e};for(let s of Object.keys(this.DEFAULTS)){let n=this.envOverride(s);n!==void 0&&(t[s]=n)}return t}static loadFromFile(e,t=!0){try{if(!(0,x.existsSync)(e)){let a=this.getAllDefaults();try{let d=(0,j.dirname)(e);(0,x.existsSync)(d)||(0,x.mkdirSync)(d,{recursive:!0}),ie(e,a),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(d){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,d instanceof Error?d.message:String(d))}return t?this.applyEnvOverrides(a):a}let s=(0,x.readFileSync)(e,"utf-8"),n=JSON.parse(s.replace(/^\uFEFF/,"")),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{ie(e,o),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a instanceof Error?a.message:String(a))}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return t?this.applyEnvOverrides(i):i}catch(s){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,s instanceof Error?s.message:String(s));let n=this.getAllDefaults();try{if((0,x.existsSync)(e)){let o=`${e}.corrupt-${Date.now()}`;(0,x.renameSync)(e,o),console.warn("[SETTINGS] Backed up corrupt settings file to:",o)}ie(e,n),console.warn("[SETTINGS] Recovered settings file with defaults:",e)}catch(o){console.warn("[SETTINGS] Failed to recover corrupt settings file:",e,o instanceof Error?o.message:String(o))}return t?this.applyEnvOverrides(n):n}}};var W=require("fs"),de=require("path");var M=class r{static instance=null;activeMode=null;modesDir;constructor(){let e=Ye(),t=[...process.env.CLAUDE_MEM_MODES_DIR?[process.env.CLAUDE_MEM_MODES_DIR]:[],(0,de.join)(e,"modes"),(0,de.join)(e,"..","plugin","modes")],s=t.find(n=>(0,W.existsSync)(n));this.modesDir=s||t[0]}static getInstance(){return r.instance||(r.instance=new r),r.instance}parseInheritance(e){let t=e.split("--");if(t.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(t.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:t[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,t){let s={...e};for(let n in t){let o=t[n],i=e[n];this.isPlainObject(o)&&this.isPlainObject(i)?s[n]=this.deepMerge(i,o):s[n]=o}return s}loadModeFile(e){let t=(0,de.join)(this.modesDir,`${e}.json`);if(!(0,W.existsSync)(t))throw new Error(`Mode file not found: ${t}`);let s=(0,W.readFileSync)(t,"utf-8");return JSON.parse(s)}loadMode(e){let t=this.parseInheritance(e);if(!t.hasParent)try{let d=this.loadModeFile(e);return this.activeMode=d,l.debug("SYSTEM",`Loaded mode: ${d.name} (${e})`,void 0,{types:d.observation_types.map(u=>u.id),concepts:d.observation_concepts.map(u=>u.id)}),d}catch(d){if(d instanceof Error?l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{message:d.message}):l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{error:String(d)}),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:s,overrideId:n}=t,o;try{o=this.loadMode(s)}catch(d){d instanceof Error?l.warn("WORKER",`Parent mode '${s}' not found for ${e}, falling back to 'code'`,{message:d.message}):l.warn("WORKER",`Parent mode '${s}' not found for ${e}, falling back to 'code'`,{error:String(d)}),o=this.loadMode("code")}let i;try{i=this.loadModeFile(n),l.debug("SYSTEM",`Loaded override file: ${n} for parent ${s}`)}catch(d){return d instanceof Error?l.warn("WORKER",`Override file '${n}' not found, using parent mode '${s}' only`,{message:d.message}):l.warn("WORKER",`Override file '${n}' not found, using parent mode '${s}' only`,{error:String(d)}),this.activeMode=o,o}if(!i)return l.warn("SYSTEM",`Invalid override file: ${n}, using parent mode '${s}' only`),this.activeMode=o,o;let a=this.deepMerge(o,i);return this.activeMode=a,l.debug("SYSTEM",`Loaded mode with inheritance: ${a.name} (${e} = ${s} + ${n})`,void 0,{parent:s,override:n,types:a.observation_types.map(d=>d.id),concepts:a.observation_concepts.map(d=>d.id)}),a}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getObservationTypes(){return this.getActiveMode().observation_types}getTypeIcon(e){return this.getObservationTypes().find(s=>s.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(s=>s.id===e)?.work_emoji||"\u{1F4DD}"}};function Et(){let r=F.settings(),e=ae.loadFromFile(r),t=M.getInstance().getActiveMode(),s=new Set(t.observation_types.map(o=>o.id)),n=new Set(t.observation_concepts.map(o=>o.id));return{totalObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10),fullObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_FULL_COUNT,10),sessionCount:parseInt(e.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10),showReadTokens:e.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",showWorkTokens:e.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",showSavingsAmount:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",showSavingsPercent:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT==="true",observationTypes:s,observationConcepts:n,fullObservationField:e.CLAUDE_MEM_CONTEXT_FULL_FIELD,showLastSummary:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",showLastMessage:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true"}}var _={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",cyan:"\x1B[36m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",gray:"\x1B[90m",red:"\x1B[31m"},gt=4,we=1;function ue(r){let e=(r.title?.length||0)+(r.subtitle?.length||0)+(r.narrative?.length||0)+JSON.stringify(r.facts||[]).length;return Math.ceil(e/gt)}function ke(r){let e=r.length,t=r.reduce((i,a)=>i+ue(a),0),s=r.reduce((i,a)=>i+(a.discovery_tokens||0),0),n=s-t,o=s>0?Math.round(n/s*100):0;return{totalObservations:e,totalReadTokens:t,totalDiscoveryTokens:s,savings:n,savingsPercent:o}}function rr(r){return M.getInstance().getWorkEmoji(r)}function V(r,e){let t=ue(r),s=r.discovery_tokens||0,n=rr(r.type),o=s>0?`${n} ${s.toLocaleString("en-US")}`:"-";return{readTokens:t,discoveryTokens:s,discoveryDisplay:o,workEmoji:n}}function ce(r){return r.showReadTokens||r.showWorkTokens||r.showSavingsAmount||r.showSavingsPercent}function nr(r){return ue(r)}function or(r,e){if(!Number.isFinite(e)||e<=0)return r;let t=[],s=0;for(let n of r){let o=nr(n);s+o>e||(t.push(n),s+=o)}return t}function Tt(r,e){let t=e.now??Date.now(),s=r.map(i=>({o:i,score:Je(i,{now:t,halfLifeDays:e.halfLifeDays})})).sort((i,a)=>a.score-i.score).map(i=>i.o),n=e.maxRows>0?s.slice(0,e.maxRows):s;return or(n,e.tokenBudget).sort((i,a)=>(a.created_at_epoch??0)-(i.created_at_epoch??0))}var ft=G(require("path"),1),le=require("fs");function bt(r,e,t,s){let n=Array.from(t.observationTypes),o=n.map(()=>"?").join(","),i=Array.from(t.observationConcepts),a=i.map(()=>"?").join(",");return r.db.prepare(`
887
887
  SELECT
888
888
  o.id,
889
889
  o.memory_session_id,
@@ -993,13 +993,13 @@ ${o.stack}`:` ${o.message}`;else if(this.getLevel()===0&&typeof o=="object")try{
993
993
  ORDER BY ss.created_at_epoch DESC
994
994
  LIMIT ?
995
995
  `).all(...e,...e,s??null,s??null,t.sessionCount+we)}function ir(r){return r.replace(/[/.]/g,"-")}function ar(r){if(!r.includes('"type":"assistant"'))return null;let e=JSON.parse(r);if(e.type==="assistant"&&e.message?.content&&Array.isArray(e.message.content)){let t="";for(let s of e.message.content)s.type==="text"&&(t+=s.text);if(t=t.replace(ot,"").trim(),t)return t}return null}function dr(r){for(let e=r.length-1;e>=0;e--)try{let t=ar(r[e]);if(t)return t}catch(t){t instanceof Error?l.debug("WORKER","Skipping malformed transcript line",{lineIndex:e},t):l.debug("WORKER","Skipping malformed transcript line",{lineIndex:e,error:String(t)});continue}return""}function ur(r){try{if(!(0,le.existsSync)(r))return{assistantMessage:""};let e=(0,le.readFileSync)(r,"utf-8").trim();if(!e)return{assistantMessage:""};let t=e.split(`
996
- `).filter(n=>n.trim());return{assistantMessage:dr(t)}}catch(e){return e instanceof Error?l.failure("WORKER","Failed to extract prior messages from transcript",{transcriptPath:r},e):l.warn("WORKER","Failed to extract prior messages from transcript",{transcriptPath:r,error:String(e)}),{assistantMessage:""}}}function Ot(r,e,t,s){if(!e.showLastMessage||r.length===0)return{assistantMessage:""};let n=r.find(d=>d.memory_session_id!==t);if(!n)return{assistantMessage:""};let o=n.memory_session_id,i=ir(s),a=ft.default.join($,"projects",i,`${o}.jsonl`);return ur(a)}function At(r,e){let t=e[0]?.id;return r.map((s,n)=>{let o=n===0?null:e[n+1];return{...s,displayEpoch:o?o.created_at_epoch:s.created_at_epoch,displayTime:o?o.created_at:s.created_at,shouldShowLink:s.id!==t}})}function It(r,e){let t=[...r.map(s=>({type:"observation",data:s})),...e.map(s=>({type:"summary",data:s}))];return t.sort((s,n)=>{let o=s.type==="observation"?s.data.created_at_epoch:s.data.displayEpoch,i=n.type==="observation"?n.data.created_at_epoch:n.data.displayEpoch;return o-i}),t}function Nt(r,e){return new Set(r.slice(0,e).map(t=>t.id))}function Ct(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Lt(r){return[`# [${r}] recent context, ${Ct()}`,""]}function yt(){return[`Legend: \u{1F3AF}session ${M.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji}${t.id}`).join(" ")}`,"Format: ID TIME TYPE TITLE","Fetch details: get_observations([IDs]) | Search: mem-search skill",""]}function Dt(r,e){let t=[],s=[`${r.totalObservations} obs (${r.totalReadTokens.toLocaleString("en-US")}t read)`,`${r.totalDiscoveryTokens.toLocaleString("en-US")}t work`];return r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)&&(e.showSavingsPercent?s.push(`${r.savingsPercent}% savings`):e.showSavingsAmount&&s.push(`${r.savings.toLocaleString("en-US")}t saved`)),t.push(`Stats: ${s.join(" | ")}`),t.push(""),t}function vt(r){return[`### ${r}`]}function Mt(r){return r.toLowerCase().replace(" am","a").replace(" pm","p")}function Ut(r,e,t){let s=r.title||"Untitled",n=M.getInstance().getTypeIcon(r.type),o=e?Mt(e):'"';return`${r.id} ${o} ${n} ${s}`}function xt(r,e,t,s){let n=[],o=r.title||"Untitled",i=M.getInstance().getTypeIcon(r.type),a=e?Mt(e):'"',{readTokens:d,discoveryDisplay:u}=V(r,s);n.push(`**${r.id}** ${a} ${i} **${o}**`),t&&n.push(t);let c=[];return s.showReadTokens&&c.push(`~${d}t`),s.showWorkTokens&&c.push(u),c.length>0&&n.push(c.join(" ")),n.push(""),n}function wt(r,e){return[`S${r.id} ${r.request||"Session started"} (${e})`]}function K(r,e){return e?[`**${r}**: ${e}`,""]:[]}function kt(r){return r.assistantMessage?["","---","","**Previously**","",`A: ${r.assistantMessage}`,""]:[]}function Ft(r,e){return["",`Access ${Math.round(r/1e3)}k tokens of past work via get_observations([IDs]) or mem-search skill.`]}function Pt(r){return`# [${r}] recent context, ${Ct()}
996
+ `).filter(n=>n.trim());return{assistantMessage:dr(t)}}catch(e){return e instanceof Error?l.failure("WORKER","Failed to extract prior messages from transcript",{transcriptPath:r},e):l.warn("WORKER","Failed to extract prior messages from transcript",{transcriptPath:r,error:String(e)}),{assistantMessage:""}}}function Ot(r,e,t,s){if(!e.showLastMessage||r.length===0)return{assistantMessage:""};let n=r.find(d=>d.memory_session_id!==t);if(!n)return{assistantMessage:""};let o=n.memory_session_id,i=ir(s),a=ft.default.join($,"projects",i,`${o}.jsonl`);return ur(a)}function At(r,e){let t=e[0]?.id;return r.map((s,n)=>{let o=n===0?null:e[n+1];return{...s,displayEpoch:o?o.created_at_epoch:s.created_at_epoch,displayTime:o?o.created_at:s.created_at,shouldShowLink:s.id!==t}})}function It(r,e){let t=[...r.map(s=>({type:"observation",data:s})),...e.map(s=>({type:"summary",data:s}))];return t.sort((s,n)=>{let o=s.type==="observation"?s.data.created_at_epoch:s.data.displayEpoch,i=n.type==="observation"?n.data.created_at_epoch:n.data.displayEpoch;return o-i}),t}function Nt(r,e){return new Set(r.slice(0,e).map(t=>t.id))}function Ct(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Lt(r){return[`# [${r}] recent context, ${Ct()}`,""]}function yt(){return[`Legend: \u{1F3AF}session ${M.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji}${t.id}`).join(" ")}`,"Format: ID TIME TYPE TITLE","Fetch details: get_observations([IDs]) | Search: mem-search skill",""]}function Dt(r,e){let t=[],s=[`${r.totalObservations} obs (${r.totalReadTokens.toLocaleString("en-US")}t read)`,`${r.totalDiscoveryTokens.toLocaleString("en-US")}t work`];return r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)&&(e.showSavingsPercent?s.push(`${r.savingsPercent}% savings`):e.showSavingsAmount&&s.push(`${r.savings.toLocaleString("en-US")}t saved`)),t.push(`Stats: ${s.join(" | ")}`),t.push(""),t}function vt(r){return[`### ${r}`]}function Mt(r){return r.toLowerCase().replace(" am","a").replace(" pm","p")}function Ut(r,e,t){let s=r.title||"Untitled",n=M.getInstance().getTypeIcon(r.type),o=e?Mt(e):'"';return`${r.id} ${o} ${n} ${s}`}function xt(r,e,t,s){let n=[],o=r.title||"Untitled",i=M.getInstance().getTypeIcon(r.type),a=e?Mt(e):'"',{readTokens:d,discoveryDisplay:u}=V(r,s);n.push(`**${r.id}** ${a} ${i} **${o}**`),t&&n.push(t);let c=[];return s.showReadTokens&&c.push(`~${d}t`),s.showWorkTokens&&c.push(u),c.length>0&&n.push(c.join(" ")),n.push(""),n}function wt(r,e){return[`S${r.id} ${r.request||"Session started"} (${e})`]}function K(r,e){return e?[`**${r}**: ${e}`,""]:[]}function kt(r){return r.assistantMessage?["","---","","**Previously**","",`A: ${r.assistantMessage}`,""]:[]}function Pt(r,e){return["",`Access ${Math.round(r/1e3)}k tokens of past work via get_observations([IDs]) or mem-search skill.`]}function Ft(r){return`# [${r}] recent context, ${Ct()}
997
997
 
998
998
  No previous sessions found.`}function $t(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Gt(r){return["",`${_.bright}${_.cyan}[${r}] recent context, ${$t()}${_.reset}`,`${_.gray}${"\u2500".repeat(60)}${_.reset}`,""]}function Ht(){let e=M.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji} ${t.id}`).join(" | ");return[`${_.dim}Legend: session-request | ${e}${_.reset}`,""]}function Bt(){return[`${_.bright}Column Key${_.reset}`,`${_.dim} Read: Tokens to read this observation (cost to learn it now)${_.reset}`,`${_.dim} Work: Tokens spent on work that produced this record ( research, building, deciding)${_.reset}`,""]}function Xt(){return[`${_.dim}Context Index: This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.${_.reset}`,"",`${_.dim}When you need implementation details, rationale, or debugging context:${_.reset}`,`${_.dim} - Fetch by ID: get_observations([IDs]) for observations visible in this index${_.reset}`,`${_.dim} - Search history: Use the mem-search skill for past decisions, bugs, and deeper research${_.reset}`,`${_.dim} - Trust this index over re-reading code for past decisions and learnings${_.reset}`,""]}function jt(r,e){let t=[];if(t.push(`${_.bright}${_.cyan}Context Economics${_.reset}`),t.push(`${_.dim} Loading: ${r.totalObservations} observations (${r.totalReadTokens.toLocaleString()} tokens to read)${_.reset}`),t.push(`${_.dim} Work investment: ${r.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions${_.reset}`),r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)){let s=" Your savings: ";e.showSavingsAmount&&e.showSavingsPercent?s+=`${r.savings.toLocaleString()} tokens (${r.savingsPercent}% reduction from reuse)`:e.showSavingsAmount?s+=`${r.savings.toLocaleString()} tokens`:s+=`${r.savingsPercent}% reduction from reuse`,t.push(`${_.green}${s}${_.reset}`)}return t.push(""),t}function Wt(r){return[`${_.bright}${_.cyan}${r}${_.reset}`,""]}function Vt(r){return[`${_.dim}${r}${_.reset}`]}function Kt(r,e,t,s){let n=r.title||"Untitled",o=M.getInstance().getTypeIcon(r.type),{readTokens:i,discoveryTokens:a,workEmoji:d}=V(r,s),u=t?`${_.dim}${e}${_.reset}`:" ".repeat(e.length),c=s.showReadTokens&&i>0?`${_.dim}(~${i}t)${_.reset}`:"",m=s.showWorkTokens&&a>0?`${_.dim}(${d} ${a.toLocaleString()}t)${_.reset}`:"";return` ${_.dim}#${r.id}${_.reset} ${u} ${o} ${n} ${c} ${m}`}function Yt(r,e,t,s,n){let o=[],i=r.title||"Untitled",a=M.getInstance().getTypeIcon(r.type),{readTokens:d,discoveryTokens:u,workEmoji:c}=V(r,n),m=t?`${_.dim}${e}${_.reset}`:" ".repeat(e.length),p=n.showReadTokens&&d>0?`${_.dim}(~${d}t)${_.reset}`:"",g=n.showWorkTokens&&u>0?`${_.dim}(${c} ${u.toLocaleString()}t)${_.reset}`:"";return o.push(` ${_.dim}#${r.id}${_.reset} ${m} ${a} ${_.bright}${i}${_.reset}`),s&&o.push(` ${_.dim}${s}${_.reset}`),(p||g)&&o.push(` ${p} ${g}`),o.push(""),o}function qt(r,e){let t=`${r.request||"Session started"} (${e})`;return[`${_.yellow}#S${r.id}${_.reset} ${t}`,""]}function Y(r,e,t){return e?[`${t}${r}:${_.reset} ${e}`,""]:[]}function Jt(r){return r.assistantMessage?["","---","",`${_.bright}${_.magenta}Previously${_.reset}`,"",`${_.dim}A: ${r.assistantMessage}${_.reset}`,""]:[]}function Qt(r,e){let t=Math.round(r/1e3);return["",`${_.dim}Access ${t}k tokens of past research & decisions for just ${e.toLocaleString()}t. Use the claude-mem skill to access memories by ID.${_.reset}`]}function zt(r){return`
999
999
  ${_.bright}${_.cyan}[${r}] recent context, ${$t()}${_.reset}
1000
1000
  ${_.gray}${"\u2500".repeat(60)}${_.reset}
1001
1001
 
1002
1002
  ${_.dim}No previous sessions found for this project yet.${_.reset}
1003
- `}function Zt(r,e,t,s){let n=[];return s?n.push(...Gt(r)):n.push(...Lt(r)),s?n.push(...Ht()):n.push(...yt()),s&&(n.push(...Bt()),n.push(...Xt())),ce(t)&&(s?n.push(...jt(e,t)):n.push(...Dt(e,t))),n}var me=G(require("path"),1);function Ee(r){if(!r)return[];try{let e=JSON.parse(r);return Array.isArray(e)?e:[]}catch(e){return l.debug("PARSER","Failed to parse JSON array, using empty fallback",{preview:r?.substring(0,50)},e instanceof Error?e:new Error(String(e))),[]}}function Fe(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}function Pe(r){return new Date(r).toLocaleString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0})}function ts(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric"})}function es(r,e){return me.default.isAbsolute(r)?me.default.relative(e,r).split(me.default.sep).join("/"):r}function ss(r,e,t){let s=Ee(r);if(s.length>0)return es(s[0],e);if(t){let n=Ee(t);if(n.length>0)return es(n[0],e)}return"General"}function cr(r){let e=new Map;for(let s of r){let n=s.type==="observation"?s.data.created_at:s.data.displayTime,o=ts(n);e.has(o)||e.set(o,[]),e.get(o).push(s)}let t=Array.from(e.entries()).sort((s,n)=>{let o=new Date(s[0]).getTime(),i=new Date(n[0]).getTime();return o-i});return new Map(t)}function rs(r,e){return e.fullObservationField==="narrative"?r.narrative:r.facts?Ee(r.facts).join(`
1004
- `):null}function lr(r,e,t,s){let n=[];n.push(...vt(r));let o="";for(let i of e)if(i.type==="summary"){let a=i.data,d=Fe(a.displayTime);n.push(...wt(a,d))}else{let a=i.data,d=Pe(a.created_at),c=d!==o?d:"";if(o=d,t.has(a.id)){let p=rs(a,s);n.push(...xt(a,c,p,s))}else n.push(Ut(a,c,s))}return n}function _r(r,e,t,s,n){let o=[];o.push(...Wt(r));let i=null,a="";for(let d of e)if(d.type==="summary"){i=null,a="";let u=d.data,c=Fe(u.displayTime);o.push(...qt(u,c))}else{let u=d.data,c=ss(u.files_modified,n,u.files_read),m=Pe(u.created_at),p=m!==a;a=m;let g=t.has(u.id);if(c!==i&&(o.push(...Vt(c)),i=c),g){let I=rs(u,s);o.push(...Yt(u,m,p,I,s))}else o.push(Kt(u,m,p,s))}return o.push(""),o}function pr(r,e,t,s,n,o){return o?_r(r,e,t,s,n):lr(r,e,t,s)}function ns(r,e,t,s,n){let o=[],i=cr(r);for(let[a,d]of i)o.push(...pr(a,d,e,t,s,n));return o}function os(r,e,t){return!(!r.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||t&&e.created_at_epoch<=t.created_at_epoch)}function is(r,e){let t=[];return e?(t.push(...Y("Investigated",r.investigated,_.blue)),t.push(...Y("Learned",r.learned,_.yellow)),t.push(...Y("Completed",r.completed,_.green)),t.push(...Y("Next Steps",r.next_steps,_.magenta))):(t.push(...K("Investigated",r.investigated)),t.push(...K("Learned",r.learned)),t.push(...K("Completed",r.completed)),t.push(...K("Next Steps",r.next_steps))),t}function as(r,e){return e?Jt(r):kt(r)}function ds(r,e,t){return!ce(e)||r.totalDiscoveryTokens<=0||r.savings<=0?[]:t?Qt(r.totalDiscoveryTokens,r.totalReadTokens):Ft(r.totalDiscoveryTokens,r.totalReadTokens)}var mr=us.default.join((0,cs.homedir)(),".claude","plugins","marketplaces","keepmind","plugin",".install-version");function Er(){try{return new re}catch(r){if(r instanceof Error&&r.code==="ERR_DLOPEN_FAILED"){try{(0,ls.unlinkSync)(mr)}catch(e){e instanceof Error?l.debug("WORKER","Marker file cleanup failed (may not exist)",{},e):l.debug("WORKER","Marker file cleanup failed (may not exist)",{error:String(e)})}return l.error("WORKER","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw r}}function gr(r,e){return e?zt(r):Pt(r)}function Tr(r,e,t,s,n,o,i){let a=[],d=ke(e);a.push(...Zt(r,d,s,i));let u=t.slice(0,s.sessionCount),c=At(u,t),m=It(e,c),p=Nt(e,s.fullObservationCount);a.push(...ns(m,p,s,n,i));let g=t[0],I=e[0];os(s,g,I)&&a.push(...is(g,i));let A=Ot(e,s,o,n);return a.push(...as(A,i)),a.push(...ds(d,s,i)),a.join(`
1003
+ `}function Zt(r,e,t,s){let n=[];return s?n.push(...Gt(r)):n.push(...Lt(r)),s?n.push(...Ht()):n.push(...yt()),s&&(n.push(...Bt()),n.push(...Xt())),ce(t)&&(s?n.push(...jt(e,t)):n.push(...Dt(e,t))),n}var me=G(require("path"),1);function Ee(r){if(!r)return[];try{let e=JSON.parse(r);return Array.isArray(e)?e:[]}catch(e){return l.debug("PARSER","Failed to parse JSON array, using empty fallback",{preview:r?.substring(0,50)},e instanceof Error?e:new Error(String(e))),[]}}function Pe(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}function Fe(r){return new Date(r).toLocaleString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0})}function ts(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric"})}function es(r,e){return me.default.isAbsolute(r)?me.default.relative(e,r).split(me.default.sep).join("/"):r}function ss(r,e,t){let s=Ee(r);if(s.length>0)return es(s[0],e);if(t){let n=Ee(t);if(n.length>0)return es(n[0],e)}return"General"}function cr(r){let e=new Map;for(let s of r){let n=s.type==="observation"?s.data.created_at:s.data.displayTime,o=ts(n);e.has(o)||e.set(o,[]),e.get(o).push(s)}let t=Array.from(e.entries()).sort((s,n)=>{let o=new Date(s[0]).getTime(),i=new Date(n[0]).getTime();return o-i});return new Map(t)}function rs(r,e){return e.fullObservationField==="narrative"?r.narrative:r.facts?Ee(r.facts).join(`
1004
+ `):null}function lr(r,e,t,s){let n=[];n.push(...vt(r));let o="";for(let i of e)if(i.type==="summary"){let a=i.data,d=Pe(a.displayTime);n.push(...wt(a,d))}else{let a=i.data,d=Fe(a.created_at),c=d!==o?d:"";if(o=d,t.has(a.id)){let p=rs(a,s);n.push(...xt(a,c,p,s))}else n.push(Ut(a,c,s))}return n}function _r(r,e,t,s,n){let o=[];o.push(...Wt(r));let i=null,a="";for(let d of e)if(d.type==="summary"){i=null,a="";let u=d.data,c=Pe(u.displayTime);o.push(...qt(u,c))}else{let u=d.data,c=ss(u.files_modified,n,u.files_read),m=Fe(u.created_at),p=m!==a;a=m;let g=t.has(u.id);if(c!==i&&(o.push(...Vt(c)),i=c),g){let I=rs(u,s);o.push(...Yt(u,m,p,I,s))}else o.push(Kt(u,m,p,s))}return o.push(""),o}function pr(r,e,t,s,n,o){return o?_r(r,e,t,s,n):lr(r,e,t,s)}function ns(r,e,t,s,n){let o=[],i=cr(r);for(let[a,d]of i)o.push(...pr(a,d,e,t,s,n));return o}function os(r,e,t){return!(!r.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||t&&e.created_at_epoch<=t.created_at_epoch)}function is(r,e){let t=[];return e?(t.push(...Y("Investigated",r.investigated,_.blue)),t.push(...Y("Learned",r.learned,_.yellow)),t.push(...Y("Completed",r.completed,_.green)),t.push(...Y("Next Steps",r.next_steps,_.magenta))):(t.push(...K("Investigated",r.investigated)),t.push(...K("Learned",r.learned)),t.push(...K("Completed",r.completed)),t.push(...K("Next Steps",r.next_steps))),t}function as(r,e){return e?Jt(r):kt(r)}function ds(r,e,t){return!ce(e)||r.totalDiscoveryTokens<=0||r.savings<=0?[]:t?Qt(r.totalDiscoveryTokens,r.totalReadTokens):Pt(r.totalDiscoveryTokens,r.totalReadTokens)}var mr=us.default.join((0,cs.homedir)(),".claude","plugins","marketplaces","keepmind","plugin",".install-version");function Er(){try{return new re}catch(r){if(r instanceof Error&&r.code==="ERR_DLOPEN_FAILED"){try{(0,ls.unlinkSync)(mr)}catch(e){e instanceof Error?l.debug("WORKER","Marker file cleanup failed (may not exist)",{},e):l.debug("WORKER","Marker file cleanup failed (may not exist)",{error:String(e)})}return l.error("WORKER","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw r}}function gr(r,e){return e?zt(r):Ft(r)}function Tr(r,e,t,s,n,o,i){let a=[],d=ke(e);a.push(...Zt(r,d,s,i));let u=t.slice(0,s.sessionCount),c=At(u,t),m=It(e,c),p=Nt(e,s.fullObservationCount);a.push(...ns(m,p,s,n,i));let g=t[0],I=e[0];os(s,g,I)&&a.push(...is(g,i));let A=Ot(e,s,o,n);return a.push(...as(A,i)),a.push(...ds(d,s,i)),a.join(`
1005
1005
  `).trimEnd()}var fr=new Set(["bugfix","discovery","decision","refactor"]);function br(r,e,t){let s=ke(r),n={bugfix:0,discovery:0,decision:0,refactor:0,other:0},o=new Set,i=Number.POSITIVE_INFINITY;for(let d of r){let u=fr.has(d.type)?d.type:"other";n[u]++,d.memory_session_id&&o.add(d.memory_session_id),d.created_at_epoch&&d.created_at_epoch<i&&(i=d.created_at_epoch)}let a=Number.isFinite(i)?Math.max(0,Math.floor((Date.now()-i)/864e5)):0;return{observation_count:r.length,session_count:o.size,timeline_depth_days:a,has_session_summary:e.length>0,obs_type_bugfix:n.bugfix,obs_type_discovery:n.discovery,obs_type_decision:n.decision,obs_type_refactor:n.refactor,obs_type_other:n.other,tokens_injected:s.totalReadTokens,tokens_saved_vs_naive:s.savings,search_strategy:t?"full":"timeline"}}async function $e(r,e=!1){let t=Et(),s=ee(),n=r?.cwd??process.cwd(),o=_t(n),i=r?.projects?.length?r.projects:o.allProjects,a=i[i.length-1]??o.primary,d=s.importance.enabled&&!r?.full,u=t.totalObservationCount;d&&(t.totalObservationCount=Math.max(u,u*Math.max(1,s.injection.candidateMultiplier))),r?.full&&(t.totalObservationCount=999999,t.sessionCount=999999);let c=Er();if(!c)return{text:"",stats:null};try{let m=r?.platformSource?L(r.platformSource):void 0,p=i.length>1?ht(c,i,t,m):bt(c,a,t,m),g=d?Tt(p,{tokenBudget:s.injection.tokenBudget,halfLifeDays:s.importance.halfLifeDays,maxRows:u}):p,I=i.length>1?Rt(c,i,t,m):St(c,a,t,m);return s.expiry.enabled&&g.length>0&&c.markObservationsUsed(g.map(h=>h.id)),g.length===0&&I.length===0?{text:gr(a,e),stats:null}:{text:Tr(a,g,I,t,n,r?.session_id,e),stats:br(g,I,!!r?.full)}}finally{c.close()}}async function _s(r,e=!1){return(await $e(r,e)).text}0&&(module.exports={generateContext,generateContextWithStats});
@@ -220,7 +220,7 @@ ${m}`}let c=i.lineStart;for(let l=i.lineStart-1;l>=0;l--){let d=a[l].trim();if(d
220
220
  ${u}`}var W_=new Set([".js",".jsx",".ts",".tsx",".mjs",".cjs",".py",".pyw",".go",".rs",".rb",".java",".cs",".cpp",".cc",".cxx",".c",".h",".hpp",".hh",".swift",".kt",".kts",".php",".vue",".svelte",".ex",".exs",".lua",".scala",".sc",".sh",".bash",".zsh",".hs",".zig",".css",".scss",".toml",".yml",".yaml",".sql",".md",".mdx"]),GP=new Set(["node_modules",".git","dist","build",".next","__pycache__",".venv","venv","env",".env","target","vendor",".cache",".turbo","coverage",".nyc_output",".claude",".smart-file-read"]),KP=512*1024;async function*V_(t,e,r=20,n){if(r<=0)return;let o;try{o=await(0,qr.readdir)(t,{withFileTypes:!0})}catch(s){y.debug("WORKER",`walkDir: failed to read directory ${t}`,void 0,s instanceof Error?s:void 0);return}for(let s of o){if(s.name.startsWith(".")&&s.name!=="."||GP.has(s.name))continue;let i=(0,ro.join)(t,s.name);if(s.isDirectory())yield*V_(i,e,r-1,n);else if(s.isFile()){let a=s.name.slice(s.name.lastIndexOf("."));(W_.has(a)||n&&n.has(a))&&(yield i)}}}async function JP(t){try{let e=await(0,qr.stat)(t);if(e.size>KP||e.size===0)return null;let r=await(0,qr.readFile)(t,"utf-8");return r.slice(0,1e3).includes("\0")?null:r}catch(e){return y.debug("WORKER",`safeReadFile: failed to read ${t}`,void 0,e instanceof Error?e:void 0),null}}async function G_(t,e,r={}){let n=r.maxResults||20,o=e.toLowerCase(),s=o.split(/[\s_\-./]+/).filter(w=>w.length>0),i=r.projectRoot||t,a=to(i),c=new Set;for(let w of Object.values(a.grammars))for(let v of w.extensions)W_.has(v)||c.add(v);let u=[];for await(let w of V_(t,t,20,c.size>0?c:void 0)){if(r.filePattern&&!(0,ro.relative)(t,w).toLowerCase().includes(r.filePattern.toLowerCase()))continue;let v=await JP(w);v&&u.push({absolutePath:w,relativePath:(0,ro.relative)(t,w),content:v})}let l=Z_(u,i),d=[],p=[],f=0;for(let[w,v]of l){f+=BP(v);let x=Ws(w.toLowerCase(),s)>0,ve=[],ke=(qt,sr)=>{for(let ce of qt){let Et=0,Je="",Zr=Ws(ce.name.toLowerCase(),s);Zr>0&&(Et+=Zr*3,Je="name match"),ce.signature.toLowerCase().includes(o)&&(Et+=2,Je=Je?`${Je} + signature`:"signature match"),ce.jsdoc&&ce.jsdoc.toLowerCase().includes(o)&&(Et+=1,Je=Je?`${Je} + jsdoc`:"jsdoc match"),Et>0&&(x=!0,ve.push({filePath:w,symbolName:sr?`${sr}.${ce.name}`:ce.name,kind:ce.kind,signature:ce.signature,jsdoc:ce.jsdoc,lineStart:ce.lineStart,lineEnd:ce.lineEnd,matchReason:Je})),ce.children&&ke(ce.children,ce.name)}};ke(v.symbols),x&&(d.push(v),p.push(...ve))}p.sort((w,v)=>{let $=Ws(w.symbolName.toLowerCase(),s);return Ws(v.symbolName.toLowerCase(),s)-$});let m=p.slice(0,n),_=new Set(m.map(w=>w.filePath)),S=d.filter(w=>_.has(w.filePath)).slice(0,n),b=S.reduce((w,v)=>w+v.foldedTokenEstimate,0);return{foldedFiles:S,matchingSymbols:m,totalFilesScanned:u.length,totalSymbolsFound:f,tokenEstimate:b}}function Ws(t,e){let r=0;for(let n of e)if(t===n)r+=10;else if(t.includes(n))r+=5;else{let o=0,s=0;for(let i of n){let a=t.indexOf(i,o);a!==-1&&(s++,o=a+1)}s===n.length&&(r+=1)}return r}function BP(t){let e=t.symbols.length;for(let r of t.symbols)r.children&&(e+=r.children.length);return e}function K_(t,e){let r=[];if(r.push(`\u{1F50D} Smart Search: "${e}"`),r.push(` Scanned ${t.totalFilesScanned} files, found ${t.totalSymbolsFound} symbols`),r.push(` ${t.matchingSymbols.length} matches across ${t.foldedFiles.length} files (~${t.tokenEstimate} tokens for folded view)`),r.push(""),t.matchingSymbols.length===0)return r.push(" No matching symbols found."),r.join(`
221
221
  `);r.push("\u2500\u2500 Matching Symbols \u2500\u2500"),r.push("");for(let n of t.matchingSymbols){if(r.push(` ${n.kind} ${n.symbolName} (${n.filePath}:${n.lineStart+1})`),r.push(` ${n.signature}`),n.jsdoc){let o=n.jsdoc.split(`
222
222
  `).find(s=>s.replace(/^[\s*/]+/,"").trim().length>0);o&&r.push(` \u{1F4AC} ${o.replace(/^[\s*/]+/,"").trim()}`)}r.push("")}r.push("\u2500\u2500 Folded File Views \u2500\u2500"),r.push("");for(let n of t.foldedFiles)r.push(Ur(n)),r.push("");return r.push("\u2500\u2500 Actions \u2500\u2500"),r.push(" To see full implementation: use smart_unfold with file path and symbol name"),r.join(`
223
- `)}var Du=require("node:fs/promises"),Ks=require("node:fs"),rt=require("node:path"),ny=require("node:os"),oy=require("node:url");var J_="claude";function YP(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Vs(t){if(!t)return J_;let e=YP(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:J_}var XP=bt(ue.API_REQUEST),Ke=class extends Error{kind;status;cause;constructor(e,r,n={}){super(r),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Gs=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=QP(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??XP}async startSession(e){let r=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",r)}async recordEvent(e){let r=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,r)}async endSession(e){if(!e.sessionId)throw new Ke("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e){return this.request("POST","/v1/context",this.buildSearchPayload(e))}async getJobStatus(e){if(!e)throw new Ke("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let r=e.content,n=e.kind??"manual",o=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,type:n,narrative:r,...o?{title:o}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,r,n){if(!this.apiKey||!this.apiKey.trim())throw new Ke("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let o=`${this.baseUrl}${r}`,s={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(s.body=JSON.stringify(n));let i;try{i=await Eu(o,s,this.timeoutMs)}catch(c){let u=c instanceof Error?c.message:String(c),l=/timed out|timeout/i.test(u);throw new Ke(l?"timeout":"transport",`Server ${e} ${r} failed: ${u}`,{cause:c})}if(!i.ok){let c=await i.text().catch(()=>"");throw new Ke("http_error",`Server ${e} ${r} returned ${i.status}: ${eT(c,200)}`,{status:i.status})}let a=await i.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){throw new Ke("invalid_response",`Server ${e} ${r} returned non-JSON response`,{cause:c})}}};function B_(t){return t instanceof Ke}function QP(t){return t.replace(/\/+$/,"")}function Au(t){return typeof t=="string"?Vs(t):null}function eT(t,e){return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Mu(){let e=(Ms().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function Y_(){let t=Ms(),e=(...i)=>{for(let a of i){let c=(a??"").trim();if(c.length>0)return c}return""},r=e(t.CLAUDE_MEM_SERVER_URL,t.CLAUDE_MEM_SERVER_BETA_URL),n=e(t.CLAUDE_MEM_SERVER_API_KEY,t.CLAUDE_MEM_SERVER_BETA_API_KEY),o=e(t.CLAUDE_MEM_SERVER_PROJECT_ID,t.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!r)return y.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return y.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!o)return y.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let s={serverBaseUrl:r,apiKey:n};return{runtime:"server",client:new Gs(s),projectId:o,serverBaseUrl:r}}var yT={},tT="1.1.1";console.log=(...t)=>{y.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var sy=!1,iy=(()=>{if(typeof __dirname<"u")return __dirname;try{return(0,rt.dirname)((0,oy.fileURLToPath)(yT.url))}catch{return sy=!0,process.cwd()}})(),Nu=P_()??(0,rt.resolve)(iy,"worker-service.cjs");function rT(){sy&&((0,Ks.existsSync)(Nu)||y.error("SYSTEM","mcp-server: dirname resolution failed (both __dirname and import.meta.url are unavailable). Fell back to process.cwd() and the resolved WORKER_SCRIPT_PATH does not exist. This is the actual problem \u2014 the worker bundle is fine, but mcp-server cannot locate it. Worker auto-start will fail until the dirname-resolution path is fixed.",{workerScriptPath:Nu,mcpServerDir:iy}))}var X_={search:"/api/search",timeline:"/api/timeline"};async function Cu(t,e){y.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.json();return y.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),s}catch(o){return y.error("SYSTEM","\u2190 Worker API error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function nT(t,e){y.debug("SYSTEM","\u2192 Worker API text",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.text();return y.debug("SYSTEM","\u2190 Worker API text success",void 0,{endpoint:t}),{content:[{type:"text",text:s}]}}catch(o){return y.error("SYSTEM","\u2190 Worker API text error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function oT(t,e){let r=await Xn(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok){let o=await r.text();throw new Error(`Worker API error (${r.status}): ${o}`)}let n=await r.json();return y.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(n,null,2)}]}}async function or(t,e){y.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{return await oT(t,e)}catch(r){return y.error("HTTP","Worker API error (POST)",{endpoint:t},r instanceof Error?r:new Error(String(r))),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function sT(){try{return(await Xn("/api/health")).ok}catch(t){return y.debug("SYSTEM","Worker health check failed",{},t instanceof Error?t:new Error(String(t))),!1}}function iT(){if(Mu()!=="server")return null;let e=Y_();return e?{...e,available:!0}:{runtime:"server",available:!1,reason:"server runtime is selected but configuration is incomplete (missing url, api key, or project id)"}}function oo(t){return B_(t)?{content:[{type:"text",text:`Server error (${t.kind}${t.status?` ${t.status}`:""}): ${t.message}`}],isError:!0}:{content:[{type:"text",text:`Tool error: ${t instanceof Error?t.message:String(t)}`}],isError:!0}}function so(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}function io(t){let e=iT();if(!e)throw new Ke("transport",`${t} requires CLAUDE_MEM_RUNTIME=server. Current runtime is "worker"; use the existing search/timeline/get_observations tools for worker-mode memory access.`);if(!e.available)throw new Ke("missing_api_key",`${t}: ${e.reason}`);return e}async function Q_(t){try{let e=io("observation_add");if(typeof t?.content!="string"||t.content.trim().length===0)throw new Error('observation_add: "content" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,content:t.content,...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.kind!==void 0?{kind:t.kind}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}},o=await e.client.addObservation(n);return so(o)}catch(e){return oo(e)}}function Bs(t){return typeof t=="string"?Vs(t):null}async function aT(t){try{let e=io("observation_record_event");if(typeof t?.eventType!="string"||t.eventType.trim().length===0)throw new Error('observation_record_event: "eventType" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,sourceType:t.sourceType??"api",eventType:t.eventType,occurredAtEpoch:typeof t.occurredAtEpoch=="number"?t.occurredAtEpoch:Date.now(),...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.memorySessionId!==void 0?{memorySessionId:t.memorySessionId}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.payload!==void 0?{payload:t.payload}:{},...t.generate!==void 0?{generate:t.generate}:{}},o=await e.client.recordEvent(n);return so(o)}catch(e){return oo(e)}}async function ey(t){try{let e=io("observation_search");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_search: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.searchObservations(n);return so(o)}catch(e){return oo(e)}}async function ty(t){try{let e=io("observation_context");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_context: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.contextObservations(n);return so(o)}catch(e){return oo(e)}}function cT(t){return Array.isArray(t.projects)?t.projects.map(e=>typeof e=="string"?e.trim():"").filter(Boolean):typeof t.projects=="string"?t.projects.split(",").map(e=>e.trim()).filter(Boolean):typeof t.project=="string"&&t.project.trim().length>0?[t.project.trim()]:[]}async function uT(t){let e=cT(t);return e.length===0?{content:[{type:"text",text:'session_start_context: "project" or "projects" is required'}],isError:!0}:nT("/api/context/inject",{projects:e.join(","),...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.full!==void 0?{full:t.full}:{},...t.colors!==void 0?{colors:t.colors}:{}})}async function lT(t){try{let e=io("observation_generation_status"),r=(t?.jobId??t?.job_id??"").trim();if(!r)throw new Error('observation_generation_status: "jobId" is required');let n=await e.client.getJobStatus(r);return so(n)}catch(e){return oo(e)}}async function dT(){if(await sT())return!0;y.warn("SYSTEM","Worker not available, attempting auto-start for MCP client"),rT();try{let t=xu(),e=await z_(t,Nu);return e==="dead"&&y.error("SYSTEM","Worker auto-start failed \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running. Check earlier log lines for the specific failure reason (Bun not found, missing worker bundle, port conflict, etc.)."),e!=="dead"}catch(t){return y.error("SYSTEM","Worker auto-start threw \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running.",void 0,t instanceof Error?t:new Error(String(t))),!1}}var ay=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW):
223
+ `)}var Du=require("node:fs/promises"),Ks=require("node:fs"),rt=require("node:path"),ny=require("node:os"),oy=require("node:url");var J_="claude";function YP(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Vs(t){if(!t)return J_;let e=YP(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:J_}var XP=bt(ue.API_REQUEST),Ke=class extends Error{kind;status;cause;constructor(e,r,n={}){super(r),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Gs=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=QP(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??XP}async startSession(e){let r=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",r)}async recordEvent(e){let r=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,r)}async endSession(e){if(!e.sessionId)throw new Ke("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e){return this.request("POST","/v1/context",this.buildSearchPayload(e))}async getJobStatus(e){if(!e)throw new Ke("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let r=e.content,n=e.kind??"manual",o=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,type:n,narrative:r,...o?{title:o}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Au(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,r,n){if(!this.apiKey||!this.apiKey.trim())throw new Ke("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let o=`${this.baseUrl}${r}`,s={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(s.body=JSON.stringify(n));let i;try{i=await Eu(o,s,this.timeoutMs)}catch(c){let u=c instanceof Error?c.message:String(c),l=/timed out|timeout/i.test(u);throw new Ke(l?"timeout":"transport",`Server ${e} ${r} failed: ${u}`,{cause:c})}if(!i.ok){let c=await i.text().catch(()=>"");throw new Ke("http_error",`Server ${e} ${r} returned ${i.status}: ${eT(c,200)}`,{status:i.status})}let a=await i.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){throw new Ke("invalid_response",`Server ${e} ${r} returned non-JSON response`,{cause:c})}}};function B_(t){return t instanceof Ke}function QP(t){return t.replace(/\/+$/,"")}function Au(t){return typeof t=="string"?Vs(t):null}function eT(t,e){return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Mu(){let e=(Ms().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function Y_(){let t=Ms(),e=(...i)=>{for(let a of i){let c=(a??"").trim();if(c.length>0)return c}return""},r=e(t.CLAUDE_MEM_SERVER_URL,t.CLAUDE_MEM_SERVER_BETA_URL),n=e(t.CLAUDE_MEM_SERVER_API_KEY,t.CLAUDE_MEM_SERVER_BETA_API_KEY),o=e(t.CLAUDE_MEM_SERVER_PROJECT_ID,t.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!r)return y.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return y.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!o)return y.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let s={serverBaseUrl:r,apiKey:n};return{runtime:"server",client:new Gs(s),projectId:o,serverBaseUrl:r}}var yT={},tT="1.1.2";console.log=(...t)=>{y.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var sy=!1,iy=(()=>{if(typeof __dirname<"u")return __dirname;try{return(0,rt.dirname)((0,oy.fileURLToPath)(yT.url))}catch{return sy=!0,process.cwd()}})(),Nu=P_()??(0,rt.resolve)(iy,"worker-service.cjs");function rT(){sy&&((0,Ks.existsSync)(Nu)||y.error("SYSTEM","mcp-server: dirname resolution failed (both __dirname and import.meta.url are unavailable). Fell back to process.cwd() and the resolved WORKER_SCRIPT_PATH does not exist. This is the actual problem \u2014 the worker bundle is fine, but mcp-server cannot locate it. Worker auto-start will fail until the dirname-resolution path is fixed.",{workerScriptPath:Nu,mcpServerDir:iy}))}var X_={search:"/api/search",timeline:"/api/timeline"};async function Cu(t,e){y.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.json();return y.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),s}catch(o){return y.error("SYSTEM","\u2190 Worker API error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function nT(t,e){y.debug("SYSTEM","\u2192 Worker API text",void 0,{endpoint:t,params:e});let r=new URLSearchParams;for(let[o,s]of Object.entries(e))s!=null&&r.append(o,String(s));let n=`${t}?${r}`;try{let o=await Xn(n);if(!o.ok){let i=await o.text();throw new Error(`Worker API error (${o.status}): ${i}`)}let s=await o.text();return y.debug("SYSTEM","\u2190 Worker API text success",void 0,{endpoint:t}),{content:[{type:"text",text:s}]}}catch(o){return y.error("SYSTEM","\u2190 Worker API text error",{endpoint:t},o instanceof Error?o:new Error(String(o))),{content:[{type:"text",text:`Error calling Worker API: ${o instanceof Error?o.message:String(o)}`}],isError:!0}}}async function oT(t,e){let r=await Xn(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!r.ok){let o=await r.text();throw new Error(`Worker API error (${r.status}): ${o}`)}let n=await r.json();return y.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(n,null,2)}]}}async function or(t,e){y.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{return await oT(t,e)}catch(r){return y.error("HTTP","Worker API error (POST)",{endpoint:t},r instanceof Error?r:new Error(String(r))),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function sT(){try{return(await Xn("/api/health")).ok}catch(t){return y.debug("SYSTEM","Worker health check failed",{},t instanceof Error?t:new Error(String(t))),!1}}function iT(){if(Mu()!=="server")return null;let e=Y_();return e?{...e,available:!0}:{runtime:"server",available:!1,reason:"server runtime is selected but configuration is incomplete (missing url, api key, or project id)"}}function oo(t){return B_(t)?{content:[{type:"text",text:`Server error (${t.kind}${t.status?` ${t.status}`:""}): ${t.message}`}],isError:!0}:{content:[{type:"text",text:`Tool error: ${t instanceof Error?t.message:String(t)}`}],isError:!0}}function so(t){return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}function io(t){let e=iT();if(!e)throw new Ke("transport",`${t} requires CLAUDE_MEM_RUNTIME=server. Current runtime is "worker"; use the existing search/timeline/get_observations tools for worker-mode memory access.`);if(!e.available)throw new Ke("missing_api_key",`${t}: ${e.reason}`);return e}async function Q_(t){try{let e=io("observation_add");if(typeof t?.content!="string"||t.content.trim().length===0)throw new Error('observation_add: "content" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,content:t.content,...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.kind!==void 0?{kind:t.kind}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}},o=await e.client.addObservation(n);return so(o)}catch(e){return oo(e)}}function Bs(t){return typeof t=="string"?Vs(t):null}async function aT(t){try{let e=io("observation_record_event");if(typeof t?.eventType!="string"||t.eventType.trim().length===0)throw new Error('observation_record_event: "eventType" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,sourceType:t.sourceType??"api",eventType:t.eventType,occurredAtEpoch:typeof t.occurredAtEpoch=="number"?t.occurredAtEpoch:Date.now(),...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.memorySessionId!==void 0?{memorySessionId:t.memorySessionId}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.payload!==void 0?{payload:t.payload}:{},...t.generate!==void 0?{generate:t.generate}:{}},o=await e.client.recordEvent(n);return so(o)}catch(e){return oo(e)}}async function ey(t){try{let e=io("observation_search");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_search: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.searchObservations(n);return so(o)}catch(e){return oo(e)}}async function ty(t){try{let e=io("observation_context");if(typeof t?.query!="string"||t.query.trim().length===0)throw new Error('observation_context: "query" is required');let n={projectId:t.projectId&&t.projectId.trim().length>0?t.projectId:e.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{}},o=await e.client.contextObservations(n);return so(o)}catch(e){return oo(e)}}function cT(t){return Array.isArray(t.projects)?t.projects.map(e=>typeof e=="string"?e.trim():"").filter(Boolean):typeof t.projects=="string"?t.projects.split(",").map(e=>e.trim()).filter(Boolean):typeof t.project=="string"&&t.project.trim().length>0?[t.project.trim()]:[]}async function uT(t){let e=cT(t);return e.length===0?{content:[{type:"text",text:'session_start_context: "project" or "projects" is required'}],isError:!0}:nT("/api/context/inject",{projects:e.join(","),...t.platformSource!==void 0?{platformSource:Bs(t.platformSource)}:{},...t.full!==void 0?{full:t.full}:{},...t.colors!==void 0?{colors:t.colors}:{}})}async function lT(t){try{let e=io("observation_generation_status"),r=(t?.jobId??t?.job_id??"").trim();if(!r)throw new Error('observation_generation_status: "jobId" is required');let n=await e.client.getJobStatus(r);return so(n)}catch(e){return oo(e)}}async function dT(){if(await sT())return!0;y.warn("SYSTEM","Worker not available, attempting auto-start for MCP client"),rT();try{let t=xu(),e=await z_(t,Nu);return e==="dead"&&y.error("SYSTEM","Worker auto-start failed \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running. Check earlier log lines for the specific failure reason (Bun not found, missing worker bundle, port conflict, etc.)."),e!=="dead"}catch(t){return y.error("SYSTEM","Worker auto-start threw \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running.",void 0,t instanceof Error?t:new Error(String(t))),!1}}var ay=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW):
224
224
  1. search(query) \u2192 Get index with IDs (~50-100 tokens/result)
225
225
  2. timeline(anchor=ID) \u2192 Get context around interesting results
226
226
  3. get_observations([IDs]) \u2192 Fetch full details ONLY for filtered IDs