claude-mem 13.36.1 → 13.37.0

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": "claude-mem",
3
- "version": "13.36.1",
3
+ "version": "13.37.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.36.1",
3
+ "version": "13.37.0",
4
4
  "description": "Persistent memory and context compression for Qoder sessions.",
5
5
  "author": {
6
6
  "name": "Alex Newman",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem-plugin",
3
- "version": "13.36.1",
3
+ "version": "13.37.0",
4
4
  "private": true,
5
5
  "description": "Runtime dependencies for claude-mem bundled hooks",
6
6
  "type": "module",
@@ -1,17 +1,17 @@
1
1
  var __CM_FILENAME__ = typeof __filename !== "undefined" ? __filename : require("node:path").resolve(process.argv[1] || "");
2
2
  var __CM_DIRNAME__ = typeof __dirname !== "undefined" ? __dirname : require("node:path").dirname(__CM_FILENAME__);
3
- "use strict";var ti=Object.create;var we=Object.defineProperty;var ri=Object.getOwnPropertyDescriptor;var ni=Object.getOwnPropertyNames;var oi=Object.getPrototypeOf,ii=Object.prototype.hasOwnProperty;var Z=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var si=(t,e)=>{for(var r in e)we(t,r,{get:e[r],enumerable:!0})},Qt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ni(e))!ii.call(t,o)&&o!==r&&we(t,o,{get:()=>e[o],enumerable:!(n=ri(e,o))||n.enumerable});return t};var ne=(t,e,r)=>(r=t!=null?ti(oi(t)):{},Qt(e||!t||!t.__esModule?we(r,"default",{value:t,enumerable:!0}):r,t)),ai=t=>Qt(we({},"__esModule",{value:!0}),t);function li(t){return(ci??process.stderr.write.bind(process.stderr))(t)}function Y(t){li(t)}var ci,oc,Re=Z(()=>{"use strict";ci=null;oc=Promise.resolve()});function ct(t){return t.replace(/^\uFEFF/,"")}function De(t){return JSON.parse(ct(t))}function Ee(t){return De((0,_.readFileSync)(t,"utf-8"))}function di(t){(0,_.existsSync)(t)||(0,_.mkdirSync)(t,{recursive:!0})}function P(t,e,r={}){let n=t,o=new Set;try{for(;(0,_.lstatSync)(n).isSymbolicLink();){let p=(0,N.resolve)(n);if(o.has(p))throw Object.assign(new Error(`Symlink loop at ${n}`),{code:"ELOOP"});o.add(p);try{n=(0,_.realpathSync)(n);break}catch(d){if(d.code!=="ENOENT")throw d;let E=d instanceof Error?d:new Error(String(d));Y(`claude-mem: realpathSync failed for ${n}, resolving symlink manually: ${E.message}
3
+ "use strict";var ti=Object.create;var we=Object.defineProperty;var ri=Object.getOwnPropertyDescriptor;var ni=Object.getOwnPropertyNames;var oi=Object.getPrototypeOf,ii=Object.prototype.hasOwnProperty;var Z=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var si=(t,e)=>{for(var r in e)we(t,r,{get:e[r],enumerable:!0})},Qt=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ni(e))!ii.call(t,o)&&o!==r&&we(t,o,{get:()=>e[o],enumerable:!(n=ri(e,o))||n.enumerable});return t};var ne=(t,e,r)=>(r=t!=null?ti(oi(t)):{},Qt(e||!t||!t.__esModule?we(r,"default",{value:t,enumerable:!0}):r,t)),ai=t=>Qt(we({},"__esModule",{value:!0}),t);function li(t){return(ci??process.stderr.write.bind(process.stderr))(t)}function G(t){li(t)}var ci,oc,Re=Z(()=>{"use strict";ci=null;oc=Promise.resolve()});function ct(t){return t.replace(/^\uFEFF/,"")}function De(t){return JSON.parse(ct(t))}function Ee(t){return De((0,_.readFileSync)(t,"utf-8"))}function di(t){(0,_.existsSync)(t)||(0,_.mkdirSync)(t,{recursive:!0})}function P(t,e,r={}){let n=t,o=new Set;try{for(;(0,_.lstatSync)(n).isSymbolicLink();){let p=(0,N.resolve)(n);if(o.has(p))throw Object.assign(new Error(`Symlink loop at ${n}`),{code:"ELOOP"});o.add(p);try{n=(0,_.realpathSync)(n);break}catch(d){if(d.code!=="ENOENT")throw d;let E=d instanceof Error?d:new Error(String(d));G(`claude-mem: realpathSync failed for ${n}, resolving symlink manually: ${E.message}
4
4
  `);let y=(0,_.readlinkSync)(n);n=(0,N.resolve)((0,N.dirname)(n),y)}}}catch(p){if(p.code!=="ENOENT")throw p}di((0,N.dirname)(n));let i=(0,N.dirname)(n),s=(0,N.basename)(n),c=(0,N.join)(i,`.${s}.${process.pid}.${(0,Zt.randomBytes)(6).toString("hex")}.tmp`),a=Buffer.from(JSON.stringify(e,null,2)+`
5
- `,"utf-8"),u=r.mode;if(u===void 0)try{u=(0,_.statSync)(n).mode&511}catch{}let m;try{m=u!==void 0?(0,_.openSync)(c,"w",u):(0,_.openSync)(c,"w");let p=0;for(;p<a.length;){let d=(0,_.writeSync)(m,a,p,a.length-p);if(d===0)throw new Error(`writeSync stalled at ${p}/${a.length} bytes`);p+=d}if((0,_.fsyncSync)(m),(0,_.closeSync)(m),m=void 0,(0,_.renameSync)(c,n),!ui){let d;try{d=(0,_.openSync)(i,"r"),(0,_.fsyncSync)(d)}catch(E){let y=E instanceof Error?E:new Error(String(E));Y(`claude-mem: directory fsync failed for ${i}: ${y.message}
6
- `)}finally{if(d!==void 0)try{(0,_.closeSync)(d)}catch{}}}}catch(p){if(m!==void 0)try{(0,_.closeSync)(m)}catch{}try{(0,_.unlinkSync)(c)}catch{}throw p}}var _,Zt,N,ui,U=Z(()=>{"use strict";_=require("fs"),Zt=require("crypto"),N=require("path");Re();ui=process.platform==="win32"});function er(t){let e=t.env;return fi(e)&&Object.keys(e).some(r=>r.startsWith("CLAUDE_MEM_"))?"nested":"flat"}function oe(t){return er(t)==="nested"?t.env:t}function tr(t){return er(t)!=="nested"?t:Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("CLAUDE_MEM_")))}var fi,ve=Z(()=>{"use strict";U();fi=t=>t!==null&&typeof t=="object"&&!Array.isArray(t)});function $(t,e=process.platform,r=(0,rr.homedir)()){return typeof t!="string"||t.length===0?t:t==="~"?r:t.startsWith("~/")||e==="win32"&&t.startsWith("~\\")?(0,nr.join)(r,t.slice(2)):t}var rr,nr,ge=Z(()=>{"use strict";rr=require("os"),nr=require("path")});function pi(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,S.dirname)((0,or.fileURLToPath)(_i.url))}function _e(){if(process.env.CLAUDE_MEM_DATA_DIR)return $(process.env.CLAUDE_MEM_DATA_DIR);let t=(0,S.join)((0,ke.homedir)(),".claude-mem"),e=(0,S.join)(t,"settings.json");try{if((0,lt.existsSync)(e)){let r=Ee(e);if(r===null||typeof r!="object"||Array.isArray(r))return t;let n=oe(r);if(typeof n.CLAUDE_MEM_DATA_DIR=="string"&&n.CLAUDE_MEM_DATA_DIR)return $(n.CLAUDE_MEM_DATA_DIR)}}catch{}return t}function ar(){return(0,S.join)(mi,"..")}function cr(t,e=(0,ke.homedir)(),r=process.platform){return $(t,r,e)}var S,ke,lt,or,_i,mi,C,ut,W,Ei,gi,G,ir,dt,sr,gc,A,T=Z(()=>{"use strict";S=require("path"),ke=require("os"),lt=require("fs"),or=require("url");U();ve();ge();ge();_i={};mi=pi();C=_e(),ut=(0,S.join)((0,ke.homedir)(),".claude"),W=process.env.CLAUDE_CONFIG_DIR||ut,Ei=(0,S.join)(W,"plugins","marketplaces","thedotmack"),gi=(0,S.join)(C,"logs"),G=(0,S.join)(C,"settings.json"),ir="claude-mem.db",dt=(0,S.join)(C,ir),sr=(0,S.join)(C,"observer-sessions"),gc=(0,S.basename)(sr);A={dataDir:()=>C,workerPid:()=>(0,S.join)(C,"worker.pid"),serverPid:()=>(0,S.join)(C,".server-beta.pid"),serverPort:()=>(0,S.join)(C,".server-beta.port"),serverRuntime:()=>(0,S.join)(C,".server-beta.runtime.json"),settings:()=>(0,S.join)(C,"settings.json"),database:()=>(0,S.join)(C,ir),chroma:()=>(0,S.join)(C,"chroma"),combinedCerts:()=>(0,S.join)(C,"combined_certs.pem"),transcriptsConfig:()=>(0,S.join)(C,"transcript-watch.json"),transcriptsState:()=>(0,S.join)(C,"transcript-watch-state.json"),corpora:()=>(0,S.join)(C,"corpora"),supervisorRegistry:()=>(0,S.join)(C,"supervisor.json"),envFile:()=>(0,S.join)(C,".env"),logsDir:()=>gi}});var ee,lr,pt,ft,mt,l,g=Z(()=>{"use strict";ee=require("fs"),lr=require("path");T();Re();U();ve();pt=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(pt||{}),ft=null,mt=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;logFileDate=null;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){let e=new Date().toISOString().split("T")[0];if(this.logFileInitialized&&this.logFileDate===e)return;let r=this.logFileDate!==e;this.logFileInitialized=!1,this.logFileDate=e;try{let n=A.logsDir();(0,ee.existsSync)(n)||(0,ee.mkdirSync)(n,{recursive:!0}),this.logFilePath=(0,lr.join)(n,`claude-mem-${e}.log`),this.logFileInitialized=!0}catch(n){r&&console.error("[LOGGER] Failed to initialize log file:",n instanceof Error?n.message:String(n)),this.logFilePath=null}}getLevel(){if(this.level===null)try{let e=A.settings();if((0,ee.existsSync)(e)){let n=(oe(Ee(e)).CLAUDE_MEM_LOG_LEVEL||"INFO").toString().toUpperCase();this.level=pt[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}safeStringify(e,r,n=6){let o=new WeakSet,i=(s,c)=>{if(typeof s=="bigint")return`${s}n`;if(s===null||typeof s!="object")return s;let a=s.toJSON,u=typeof a=="function"?a.call(s):s;if(typeof u=="bigint")return`${u}n`;if(u===null||typeof u!="object")return u;if(o.has(u))return"[Circular]";if(c>=n)return Array.isArray(u)?"[Array]":"[Object]";o.add(u);try{if(Array.isArray(u))return u.map(p=>i(p,c+1));let m={};for(let p of Object.keys(u))try{m[p]=i(u[p],c+1)}catch{m[p]="[unreadable]"}return m}finally{o.delete(u)}};try{return JSON.stringify(i(e,0),null,r)??String(e)}catch{return Array.isArray(e)?`[${e.length} items]`:"[unserializable]"}}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}
5
+ `,"utf-8"),u=r.mode;if(u===void 0)try{u=(0,_.statSync)(n).mode&511}catch{}let m;try{m=u!==void 0?(0,_.openSync)(c,"w",u):(0,_.openSync)(c,"w");let p=0;for(;p<a.length;){let d=(0,_.writeSync)(m,a,p,a.length-p);if(d===0)throw new Error(`writeSync stalled at ${p}/${a.length} bytes`);p+=d}if((0,_.fsyncSync)(m),(0,_.closeSync)(m),m=void 0,(0,_.renameSync)(c,n),!ui){let d;try{d=(0,_.openSync)(i,"r"),(0,_.fsyncSync)(d)}catch(E){let y=E instanceof Error?E:new Error(String(E));G(`claude-mem: directory fsync failed for ${i}: ${y.message}
6
+ `)}finally{if(d!==void 0)try{(0,_.closeSync)(d)}catch{}}}}catch(p){if(m!==void 0)try{(0,_.closeSync)(m)}catch{}try{(0,_.unlinkSync)(c)}catch{}throw p}}var _,Zt,N,ui,U=Z(()=>{"use strict";_=require("fs"),Zt=require("crypto"),N=require("path");Re();ui=process.platform==="win32"});function er(t){let e=t.env;return fi(e)&&Object.keys(e).some(r=>r.startsWith("CLAUDE_MEM_"))?"nested":"flat"}function oe(t){return er(t)==="nested"?t.env:t}function tr(t){return er(t)!=="nested"?t:Object.fromEntries(Object.entries(t).filter(([e])=>!e.startsWith("CLAUDE_MEM_")))}var fi,ve=Z(()=>{"use strict";U();fi=t=>t!==null&&typeof t=="object"&&!Array.isArray(t)});function $(t,e=process.platform,r=(0,rr.homedir)()){return typeof t!="string"||t.length===0?t:t==="~"?r:t.startsWith("~/")||e==="win32"&&t.startsWith("~\\")?(0,nr.join)(r,t.slice(2)):t}var rr,nr,ge=Z(()=>{"use strict";rr=require("os"),nr=require("path")});function pi(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,S.dirname)((0,or.fileURLToPath)(_i.url))}function _e(){if(process.env.CLAUDE_MEM_DATA_DIR)return $(process.env.CLAUDE_MEM_DATA_DIR);let t=(0,S.join)((0,ke.homedir)(),".claude-mem"),e=(0,S.join)(t,"settings.json");try{if((0,lt.existsSync)(e)){let r=Ee(e);if(r===null||typeof r!="object"||Array.isArray(r))return t;let n=oe(r);if(typeof n.CLAUDE_MEM_DATA_DIR=="string"&&n.CLAUDE_MEM_DATA_DIR)return $(n.CLAUDE_MEM_DATA_DIR)}}catch{}return t}function ar(){return(0,S.join)(mi,"..")}function cr(t,e=(0,ke.homedir)(),r=process.platform){return $(t,r,e)}var S,ke,lt,or,_i,mi,C,ut,W,Ei,gi,Y,ir,dt,sr,gc,A,T=Z(()=>{"use strict";S=require("path"),ke=require("os"),lt=require("fs"),or=require("url");U();ve();ge();ge();_i={};mi=pi();C=_e(),ut=(0,S.join)((0,ke.homedir)(),".claude"),W=process.env.CLAUDE_CONFIG_DIR||ut,Ei=(0,S.join)(W,"plugins","marketplaces","thedotmack"),gi=(0,S.join)(C,"logs"),Y=(0,S.join)(C,"settings.json"),ir="claude-mem.db",dt=(0,S.join)(C,ir),sr=(0,S.join)(C,"observer-sessions"),gc=(0,S.basename)(sr);A={dataDir:()=>C,workerPid:()=>(0,S.join)(C,"worker.pid"),serverPid:()=>(0,S.join)(C,".server-beta.pid"),serverPort:()=>(0,S.join)(C,".server-beta.port"),serverRuntime:()=>(0,S.join)(C,".server-beta.runtime.json"),settings:()=>(0,S.join)(C,"settings.json"),database:()=>(0,S.join)(C,ir),chroma:()=>(0,S.join)(C,"chroma"),combinedCerts:()=>(0,S.join)(C,"combined_certs.pem"),transcriptsConfig:()=>(0,S.join)(C,"transcript-watch.json"),transcriptsState:()=>(0,S.join)(C,"transcript-watch-state.json"),corpora:()=>(0,S.join)(C,"corpora"),supervisorRegistry:()=>(0,S.join)(C,"supervisor.json"),envFile:()=>(0,S.join)(C,".env"),logsDir:()=>gi}});var ee,lr,pt,ft,mt,l,g=Z(()=>{"use strict";ee=require("fs"),lr=require("path");T();Re();U();ve();pt=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(pt||{}),ft=null,mt=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;logFileDate=null;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){let e=new Date().toISOString().split("T")[0];if(this.logFileInitialized&&this.logFileDate===e)return;let r=this.logFileDate!==e;this.logFileInitialized=!1,this.logFileDate=e;try{let n=A.logsDir();(0,ee.existsSync)(n)||(0,ee.mkdirSync)(n,{recursive:!0}),this.logFilePath=(0,lr.join)(n,`claude-mem-${e}.log`),this.logFileInitialized=!0}catch(n){r&&console.error("[LOGGER] Failed to initialize log file:",n instanceof Error?n.message:String(n)),this.logFilePath=null}}getLevel(){if(this.level===null)try{let e=A.settings();if((0,ee.existsSync)(e)){let n=(oe(Ee(e)).CLAUDE_MEM_LOG_LEVEL||"INFO").toString().toUpperCase();this.level=pt[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}safeStringify(e,r,n=6){let o=new WeakSet,i=(s,c)=>{if(typeof s=="bigint")return`${s}n`;if(s===null||typeof s!="object")return s;let a=s.toJSON,u=typeof a=="function"?a.call(s):s;if(typeof u=="bigint")return`${u}n`;if(u===null||typeof u!="object")return u;if(o.has(u))return"[Circular]";if(c>=n)return Array.isArray(u)?"[Array]":"[Object]";o.add(u);try{if(Array.isArray(u))return u.map(p=>i(p,c+1));let m={};for(let p of Object.keys(u))try{m[p]=i(u[p],c+1)}catch{m[p]="[unreadable]"}return m}finally{o.delete(u)}};try{return JSON.stringify(i(e,0),null,r)??String(e)}catch{return Array.isArray(e)?`[${e.length} items]`:"[unserializable]"}}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}
7
7
  ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let r=Object.keys(e);return r.length===0?"{}":r.length<=3?this.safeStringify(e):`{${r.length} keys: ${r.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,r){if(!r)return e;let n=r;if(typeof r=="string")try{n=JSON.parse(r)}catch{n=r}if(n===null)return e;if(e==="Bash"&&n.command)return`${e}(${n.command})`;if(n.file_path)return`${e}(${n.file_path})`;if(n.notebook_path)return`${e}(${n.notebook_path})`;if(e==="Glob"&&n.pattern)return`${e}(${n.pattern})`;if(e==="Grep"&&n.pattern)return`${e}(${n.pattern})`;if(n.url)return`${e}(${n.url})`;if(n.query)return`${e}(${n.query})`;if(e==="Task"){if(n.subagent_type)return`${e}(${n.subagent_type})`;if(n.description)return`${e}(${n.description})`}return e==="Skill"&&n.skill?`${e}(${n.skill})`:e==="LSP"&&n.operation?`${e}(${n.operation})`:e}formatTimestamp(e){let r=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),o=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),s=String(e.getMinutes()).padStart(2,"0"),c=String(e.getSeconds()).padStart(2,"0"),a=String(e.getMilliseconds()).padStart(3,"0");return`${r}-${n}-${o} ${i}:${s}:${c}.${a}`}log(e,r,n,o,i){if(e<this.getLevel())return;this.ensureLogFileInitialized();let s=this.formatTimestamp(new Date),c=pt[e].padEnd(5),a=r.padEnd(6),u="";o?.correlationId?u=`[${o.correlationId}] `:o?.sessionId&&(u=`[session-${o.sessionId}] `);let m="";i!=null&&(i instanceof Error?m=this.getLevel()===0?`
8
8
  ${i.message}
9
9
  ${i.stack}`:` ${i.message}`:this.getLevel()===0&&typeof i=="object"?m=`
10
10
  `+this.safeStringify(i,2):m=" "+this.formatData(i));let p="";if(o){let{sessionId:E,memorySessionId:y,correlationId:k,...h}=o;Object.keys(h).length>0&&(p=` {${Object.entries(h).map(([L,v])=>typeof v!="object"||v===null||v instanceof Error||v instanceof Date?`${L}=${v}`:`${L}=${Array.isArray(v)?this.safeStringify(v):this.formatData(v)}`).join(", ")}}`)}let d=`[${s}] [${c}] [${a}] ${u}${n}${p}${m}`;if(this.logFilePath)try{(0,ee.appendFileSync)(this.logFilePath,d+`
11
- `,"utf8")}catch(E){let y=E instanceof Error?E:new Error(String(E));Y(`[LOGGER] Failed to write to log file: ${y.message}
11
+ `,"utf8")}catch(E){let y=E instanceof Error?E:new Error(String(E));G(`[LOGGER] Failed to write to log file: ${y.message}
12
12
  ${y.stack??""}
13
- `)}else Y(d+`
14
- `)}debug(e,r,n,o){this.log(0,e,r,n,o)}info(e,r,n,o){this.log(1,e,r,n,o)}warn(e,r,n,o){this.log(2,e,r,n,o)}setErrorSink(e){ft=e}error(e,r,n,o){this.log(3,e,r,n,o),this.routeErrorToSink(r,n,o)}routeErrorToSink(e,r,n){try{if(!ft||!(n instanceof Error))return;ft(n)}catch{}}dataIn(e,r,n,o){this.info(e,`\u2192 ${r}`,n,o)}dataOut(e,r,n,o){this.info(e,`\u2190 ${r}`,n,o)}success(e,r,n,o){this.info(e,`\u2713 ${r}`,n,o)}failure(e,r,n,o){this.error(e,`\u2717 ${r}`,n,o)}},l=new mt});var ji,vr,kr=Z(()=>{"use strict";ji=require("bun:sqlite");g();vr=5e3});var rc={};si(rc,{generateContext:()=>Zo,generateContextWithStats:()=>zt});module.exports=ai(rc);var Jo=ne(require("path"),1),Vo=require("os"),st=require("fs"),qo=require("bun:sqlite");T();g();var D=ne(require("path"),1),ie=require("fs"),xe=require("os"),yt=require("child_process");ge();T();var te=require("fs"),J=require("path"),Se=require("os");var x={HEALTH_CHECK:3e3,API_REQUEST:3e4,SESSION_INIT_HOOK_CAP:15e3,SESSION_INIT_REQUEST:1e4,SESSION_INIT_REQUEST_MAX:14e3,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Si(t=process.platform){return t==="win32"?8e3:5e3}function Et(t=process.platform){return x.SESSION_INIT_HOOK_CAP-Si(t)}function j(t){return process.platform==="win32"?Math.round(t*x.WINDOWS_MULTIPLIER):t}U();g();function ur(t){try{return new URL(t).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}ve();var hi="security_alert",yi="sync-hub.black-pond-afbb.workers.dev",Ai="ziczmqtpmaxbornfghye.supabase.co",Ti="https://sync.cmem.ai",Ci=new Set(["xiaomi/mimo-v2-flash:free"]);function Mi(t){return typeof t=="boolean"?String(t):t}function bi(t){let e=t.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!Ci.has(e.trim()))return!1;let r=typeof t.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?t.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||ur(r)}var dr=18e4,fr=[{key:"CLAUDE_MEM_LLM_TIMEOUT_MS",legacy:"30000",markerTag:"llm-timeout-migrated-v1"},{key:"CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS",legacy:"30000",markerTag:"field-optimize-timeout-migrated-v1"}];function mr(t,e){return(0,J.join)((0,J.dirname)(t),`.${(0,J.basename)(t)}.${e.markerTag}`)}function gt(t,e){try{(0,te.writeFileSync)(mr(t,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var pr=new Set;function Oi(t){if(typeof t!="string")return null;let e=t.trim();if(e.length===0)return null;try{let r=new URL(e).hostname;if(r===yi||r===Ai)return Ti}catch{return null}return null}var O=class{static DEFAULTS={CLAUDE_MEM_MEMORY_SEARCH_HOOK_ENABLED:"true",CLAUDE_MEM_MEMORY_INSTRUCTIONS_ENABLED:"true",CLAUDE_MEM_MEMORY_WATCH_ROOTS:"",CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_SESSION_START_INCLUDE_ALL_SOURCES:"false",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(j(x.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Et()),CLAUDE_MEM_IDLE_EXIT_SEC:"0",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_SKIP_BASH_PATTERNS:"",CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS:"false",CLAUDE_MEM_SKIP_AGENT_TYPES:"",CLAUDE_MEM_CAPTURE_ADVISOR_CALLS:"false",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CODEX_MODEL:"",CLAUDE_MEM_CODEX_PATH:"codex",CLAUDE_MEM_CODEX_REASONING_EFFORT:"low",CLAUDE_MEM_CODEX_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_SIZE:"8",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_MAX_CHARS:"32000",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_API_KEYS:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_API_KEYS:"",CLAUDE_MEM_OPENROUTER_MODEL:"cohere/north-mini-code:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_TEMPERATURE:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_EXTRA_BODY:"",CLAUDE_MEM_OPENROUTER_REASONING_EFFORT:"",CLAUDE_MEM_OPENAI_COMPAT_PRESET:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEY:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEYS:"",CLAUDE_MEM_OPENAI_COMPAT_BASE_URL:"",CLAUDE_MEM_OPENAI_COMPAT_MODEL:"",CLAUDE_MEM_QUOTA_FALLBACK_PROVIDER:"",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_QUOTA_THRESHOLD_FIVE_HOUR:"0.95",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_OPUS:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_SONNET:"0.92",CLAUDE_MEM_QUOTA_THRESHOLD_OVERAGE:"0.95",CLAUDE_MEM_DATA_DIR:(0,J.join)((0,Se.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_OBSERVER_CLAUDE_CONFIG_DIR:"",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_OBSERVATION_TYPES:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",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_MAIN_AGENT_ONLY:"true",CLAUDE_MEM_REINFORCE_ALPHA:"0",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_WORK_STATE_ENABLED:"true",CLAUDE_MEM_FILE_READ_GATE_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,Se.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_CODEX_SUBAGENT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_OBSERVER_CONTEXT_WINDOW:"",CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS:"4096",CLAUDE_MEM_OBSERVE_BARE_PROMPTS:"false",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_REDACT_ENABLED:"false",CLAUDE_MEM_REDACT_DISABLED_BUILTINS:"",CLAUDE_MEM_REDACT_CUSTOM_PATTERNS:"[]",CLAUDE_MEM_REDACT_LOG_MATCHES:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_PROJECT_ENVIRONMENTS:"[]",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_SEMANTIC_INJECT_FORMAT:"narrative",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_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MUTATION_TIMEOUT_MS:"600000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CHROMA_EMBEDDING_FUNCTION:"default",CLAUDE_MEM_CHROMA_UVX_PATH:"",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,Se.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:String(dr),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(dr),CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_FALLBACK_MESSAGE:"",CLAUDE_MEM_PRO_FALLBACK_ACTION:"",CLAUDE_MEM_PRO_FALLBACK_URL:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_URL:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_SECRET:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",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:"",CLAUDE_MEM_DEDUP_ENABLED:"false",CLAUDE_MEM_DEDUP_COSINE_THRESHOLD:"0.80",CLAUDE_MEM_DEDUP_IDF_VETO_DF:"10",CLAUDE_MEM_DEDUP_MIN_SHARED_TOKENS:"2",CLAUDE_MEM_DEDUP_MIN_PROJECT_DOCS:"10",CLAUDE_MEM_DEDUP_MAX_SCAN:"2000",CLAUDE_MEM_DEDUP_MAX_BACKFILL_ROWS:"50000",CLAUDE_MEM_TOOL_USES_RETENTION_DAYS:"0",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let r=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,r){let n=r?this.applyEnvOverrides(e):e;return n.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(n.CLAUDE_MEM_WORKER_HOST),n}static getInt(e){let r=this.get(e);return parseInt(r,10)}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e,r=!0,n={}){try{if(!(0,te.existsSync)(e)){let d=this.getAllDefaults();if(!n.readOnly)try{P(e,d,{mode:384});for(let E of fr)gt(e,E);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(E){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,E instanceof Error?E.message:String(E))}return this.finalizeSettings(d,r)}let o=(0,te.readFileSync)(e,"utf-8"),i=De(o),s=oe(i),c=s!==i,a=tr(i),u=c&&Object.keys(a).some(d=>d!=="env");if(c&&!u&&!n.readOnly)try{P(e,s,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,d instanceof Error?d.message:String(d))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===hi&&(s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!n.readOnly))try{P(e,u?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,d instanceof Error?d.message:String(d))}if(bi(s)){let d=String(s.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(s={...s,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!n.readOnly)try{P(e,u?{...a,env:s}:s,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${d} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(E){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,E instanceof Error?E.message:String(E))}}let m=Oi(s.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(m!==null&&(s={...s,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:m},!n.readOnly))try{P(e,u?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",m,"from a retired hub host:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,d instanceof Error?d.message:String(d))}for(let d of fr)if(!(0,te.existsSync)(mr(e,d))){if(s[d.key]!==d.legacy){n.readOnly||gt(e,d);continue}if(s={...s,[d.key]:this.DEFAULTS[d.key]},!n.readOnly)try{P(e,u?{...a,env:s}:s,{mode:384}),gt(e,d),console.warn(`[SETTINGS] Migrated ${d.key} off the old ${d.legacy}ms default to ${this.DEFAULTS[d.key]}ms:`,e)}catch(E){let y=`${d.key}\0${e}`;pr.has(y)||(pr.add(y),console.warn(`[SETTINGS] Failed to migrate ${d.key}; using the new default in memory (reported once per process):`,e,E instanceof Error?E.message:String(E)))}}let p={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))s[d]!==void 0&&(p[d]=Mi(s[d]));return this.finalizeSettings(p,r)}catch(o){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,o instanceof Error?o.message:String(o));let i=this.getAllDefaults();return this.finalizeSettings(i,r)}}};g();var Ie=require("fs"),V=ne(require("path"),1);g();var he={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function Er(t){let e=V.default.join(t,".git"),r;try{r=(0,Ie.statSync)(e)}catch(a){return a instanceof Error&&a.code!=="ENOENT"&&l.warn("GIT","Unexpected error checking .git",{error:a instanceof Error?a.message:String(a)}),he}if(!r.isFile())return he;let n;try{n=(0,Ie.readFileSync)(e,"utf-8").trim()}catch(a){return l.warn("GIT","Failed to read .git file",{error:a instanceof Error?a.message:String(a)}),he}let o=n.match(/^gitdir:\s*(.+)$/);if(!o)return he;let i=V.default.resolve(V.default.dirname(e),o[1]),s=i.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(s){let a=s[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:V.default.basename(t),parentRepoPath:a,parentProjectName:V.default.basename(a)}}let c=i.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(c){let a=c[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:V.default.basename(t),parentRepoPath:a,parentProjectName:V.default.basename(a)}}return he}var Sr=require("fs");var gr=require("path");ge();g();function wi(t){let e=$(t.replace(/\\/g,"/"));e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${r}$`)}function _r(t,e){if(!e.length)return!1;let r=t.replace(/\\/g,"/"),n=(0,gr.basename)(r);for(let o of e){let i=o.trim();if(i)try{let s=wi(i);if(s.test(r)||s.test(n))return!0}catch(s){l.warn("PROJECT_NAME","Invalid glob pattern",{pattern:i,error:s instanceof Error?s.message:String(s)});continue}}return!1}g();function hr(t){let e=t;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(n){return l.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:n instanceof Error?n.message:String(n)}),[]}}if(!Array.isArray(e))return e!=null&&l.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let r=[];for(let n of e){let o=typeof n?.name=="string"?n.name.trim():"",i=Array.isArray(n?.patterns)?n.patterns.filter(s=>typeof s=="string"&&s.trim()!==""):[];if(!o||i.length===0){l.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:o});continue}r.push({name:o,patterns:i})}return r}function Ri(t){try{return(0,Sr.realpathSync)(t)}catch{return t}}function _t(t,e){if(e.length===0)return null;let r=[...new Set([t,Ri(t)])].flatMap(n=>[n,`${n.replace(/[\\/]+$/,"")}/`]);for(let n of e)if(r.some(o=>_r(o,n.patterns)))return n.name;return null}var At="unknown-project";function Tr(t){try{return(0,yt.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch(e){let r=e instanceof Error?e:new Error(String(e));return l.debug("PROJECT_NAME","git rev-parse failed, falling back to non-git root",{dir:t},r),null}}var Di=[".claude-mem-project",".claude-mem.json"],vi=64;function Cr(t){try{return(0,ie.realpathSync)(t)}catch{return t}}function ki(t,e){let r=D.default.relative(e,t);return r===""||!r.startsWith("..")&&!D.default.isAbsolute(r)}function Ii(){return[(0,xe.homedir)(),(0,xe.tmpdir)(),W].flatMap(t=>{let e=D.default.resolve(t);return[e,Cr(e)]})}function Mr(t){let e=Ii(),r=D.default.resolve(t);if([D.default.resolve(W),Cr(D.default.resolve(W))].some(o=>ki(r,o)))return null;for(let o=0;o<vi;o++){if(e.includes(r))return null;let i=D.default.dirname(r);if(i===r)return null;if(Di.some(s=>(0,ie.existsSync)(D.default.join(r,s))))return r;r=i}return null}function ht(t,e){let r=D.default.basename(e);if(r===""){if(process.platform==="win32"){let o=t.match(/^([A-Z]):\\/i);if(o){let s=`drive-${o[1].toUpperCase()}`;return l.info("PROJECT_NAME","Drive root detected",{cwd:t,projectName:s}),s}}return l.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:t}),At}return r}var Li="CLAUDE_MEM_PROJECT_NAME_SOURCE",Le=null;function yr(){try{return(0,ie.statSync)(G).mtimeMs}catch{return-1}}function br(){let t=yr();if(t===-1)return O.getAllDefaults();if(Le&&Le.mtimeMs===t)return Le.settings;let e=O.loadFromFile(G);return Le={mtimeMs:yr(),settings:e},e}function Pi(){let t=process.env[Li]??br().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(t??"path").trim().toLowerCase()==="git-remote"}var xi="CLAUDE_MEM_PROJECT_ENVIRONMENTS",Pe=null;function Ne(){let t=process.env[xi]??br().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!Pe||Pe.raw!==t)&&(Pe={raw:t,environments:hr(t)}),Pe.environments}function Ni(t){let e=(t??"").trim();if(!e||/^file:/i.test(e)||e.startsWith("/")||e.startsWith(".")||e.startsWith("~")||e.startsWith("\\\\")||/^[a-z]:[\\/]/i.test(e))return null;let n=e.replace(/\/+$/,"").replace(/\.git$/i,""),o=n.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),i=o?null:n.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),s=o?.[1]??i?.[1];if(!s)return null;let c=s.split("/").filter(a=>a&&a!=="_git");return c.length>=2?c.slice(-2).join("/"):c.length===1?c[0]:null}function Ui(t){try{let e=(0,yt.execFileSync)("git",["remote","get-url","origin"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return Ni(e)}catch(e){let r=e instanceof Error?e:new Error(String(e));return l.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:t},r),null}}var St=new Map;function Or(t){return Pi()?(St.has(t)||St.set(t,Ui(t)),St.get(t)??null):null}function $i(t,e=process.platform){if(!t||t.trim()==="")return l.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:t}),At;let r=$(t,e),n=_t(r,Ne());if(n)return n;let o=Tr(r),i=o?Or(o):null;if(i)return i;let s=o??Mr(r)??r;return ht(t,s)}function wr(t,e){return e===t?t:`${t}/${e}`}function Fi(t,e){if(!t.isSubmodule||!t.parentRepoPath)return null;let r=D.default.relative(t.parentRepoPath,e);return!r||r.startsWith("..")||D.default.isAbsolute(r)?null:r.split(D.default.sep).join("/")}function Rr(t,e=process.platform){if(!t||t.trim()===""){let a=$i(t,e);return{primary:a,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a],keySource:"path"}}let r=$(t,e),n=Tr(r),o=Hi(t,r,n),i=n?Or(n):null,s=i?Ar(o,i,"git-remote"):o,c=_t(r,Ne());return c?Ar(s,c,"environment"):s}function Ar(t,e,r){return{primary:e,parent:null,isWorktree:t.isWorktree,isSubmodule:t.isSubmodule,allProjects:[...t.allProjects.filter(n=>n!==e),e],keySource:r}}function Hi(t,e,r){let n=r?null:Mr(e),o=ht(t,r??n??e),i=r??e,s=Er(i);if((s.isWorktree||s.isSubmodule)&&s.parentProjectName){let c=s.parentProjectName,a,u;return s.isSubmodule?(a=`${c}/${Fi(s,i)??o}`,u=o!==c?[o]:[]):(a=wr(c,o),u=a===c?[`${c}/${o}`]:[]),{primary:a,parent:c,isWorktree:s.isWorktree,isSubmodule:s.isSubmodule,allProjects:[...new Set([c,...u,a])].filter(m=>m!==a).concat(a),keySource:"path"}}if(n&&D.default.resolve(n)!==D.default.resolve(e)){let c=ht(t,e);if(c!==o&&c!==At)return{primary:o,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[c,o],keySource:"path"}}return{primary:o,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[o],keySource:"path"}}var Dr="claude";function Wi(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Ue(t){if(!t)return Dr;let e=Wi(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e.includes("kimi")?"kimi":e==="pi-mono"?"pi":e==="agy"||e==="antigravity"||e.startsWith("antigravity-")?"antigravity-cli":e:Dr}kr();function Bi(t){let e=t.projects?.length?t.projects:t.project?[t.project]:[];return[...new Set(e.map(r=>r.trim()).filter(Boolean))]}function Ir(t,e){let r=Bi({projects:e});if(r.length===0)return[];let n=r.map(()=>"?").join(","),o=[`SELECT project AS key FROM sdk_sessions WHERE project COLLATE NOCASE IN (${n})`,`SELECT project FROM observations WHERE project COLLATE NOCASE IN (${n})`,`SELECT merged_into_project FROM observations WHERE merged_into_project COLLATE NOCASE IN (${n})`,`SELECT project FROM session_summaries WHERE project COLLATE NOCASE IN (${n})`,`SELECT merged_into_project FROM session_summaries WHERE merged_into_project COLLATE NOCASE IN (${n})`,`SELECT project FROM observations WHERE merged_into_project COLLATE NOCASE IN (${n})`,`SELECT project FROM session_summaries WHERE merged_into_project COLLATE NOCASE IN (${n})`],i=t.prepare(o.join(" UNION "));try{let s=i.all(...o.flatMap(()=>r));return[...new Set([...r,...s.map(c=>c.key)])]}finally{i.finalize()}}var f={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"},Lr=4,se=1;T();var $e=require("fs"),ye=require("path");g();T();var Ki=/^[a-z0-9]+(?:-[a-z0-9]+)*(?:--[a-z0-9]+(?:-[a-z0-9]+)*)?$/,w=class t{static instance=null;activeMode=null;activeModeId=null;modeDirs;constructor(){let e=ar(),r=[...process.env.CLAUDE_MEM_MODES_DIR?[process.env.CLAUDE_MEM_MODES_DIR]:[],(0,ye.join)(A.dataDir(),"modes"),(0,ye.join)(e,"modes"),(0,ye.join)(e,"..","plugin","modes")];this.modeDirs=[...new Set(r)]}static getInstance(){return t.instance||(t.instance=new t),t.instance}parseInheritance(e){let r=e.split("--");if(r.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(r.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:r[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,r){let n={...e};for(let o in r){let i=r[o],s=e[o];this.isPlainObject(i)&&this.isPlainObject(s)?n[o]=this.deepMerge(s,i):n[o]=i}return n}loadModeFile(e){if(!Ki.test(e))throw new Error(`Invalid mode ID: ${e}`);let r=this.modeDirs.map(o=>(0,ye.join)(o,`${e}.json`)).find(o=>(0,$e.existsSync)(o));if(!r)throw new Error(`Mode file not found: ${e}.json (searched: ${this.modeDirs.join(", ")})`);let n=(0,$e.readFileSync)(r,"utf-8");return JSON.parse(n)}loadMode(e){let r=this.parseInheritance(e);if(!r.hasParent)try{let a=this.loadModeFile(e);return this.activeMode=a,this.activeModeId=e,l.debug("SYSTEM",`Loaded mode: ${a.name} (${e})`,void 0,{types:a.observation_types.map(u=>u.id),concepts:a.observation_concepts.map(u=>u.id)}),a}catch(a){if(a instanceof Error?l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{message:a.message}):l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{error:String(a)}),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:n,overrideId:o}=r,i;try{i=this.loadMode(n)}catch(a){a instanceof Error?l.warn("WORKER",`Parent mode '${n}' not found for ${e}, falling back to 'code'`,{message:a.message}):l.warn("WORKER",`Parent mode '${n}' not found for ${e}, falling back to 'code'`,{error:String(a)}),i=this.loadMode("code")}let s;try{s=this.loadModeFile(o),l.debug("SYSTEM",`Loaded override file: ${o} for parent ${n}`)}catch(a){return a instanceof Error?l.warn("WORKER",`Override file '${o}' not found, using parent mode '${n}' only`,{message:a.message}):l.warn("WORKER",`Override file '${o}' not found, using parent mode '${n}' only`,{error:String(a)}),this.activeMode=i,i}if(!s)return l.warn("SYSTEM",`Invalid override file: ${o}, using parent mode '${n}' only`),this.activeMode=i,i;let c=this.deepMerge(i,s);return this.activeMode=c,this.activeModeId=e,l.debug("SYSTEM",`Loaded mode with inheritance: ${c.name} (${e} = ${n} + ${o})`,void 0,{parent:n,override:o,types:c.observation_types.map(a=>a.id),concepts:c.observation_concepts.map(a=>a.id)}),c}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getActiveModeId(){if(!this.activeModeId)throw new Error("No mode loaded. Call loadMode() first.");return this.activeModeId}getObservationTypes(){return this.getActiveMode().observation_types}getTypeIcon(e){return this.getObservationTypes().find(n=>n.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(n=>n.id===e)?.work_emoji||"\u{1F4DD}"}};g();function Pr(t){let e;if(typeof t=="number")e=t;else if(typeof t=="string"&&/^\d+$/.test(t.trim()))e=Number(t.trim());else return;return Number.isSafeInteger(e)&&e>=0?e:void 0}function Yi(t){let e=Number(t);return Number.isFinite(e)&&e>0?e:0}function Gi(t,e,r){let n=Pr(e);return n!==void 0?n:(e!==void 0&&l.warn("CONFIG",`${t} must be a whole number >= 0; using the default`,{value:e,default:r}),Number(r))}function Ji(t){let e=(t??"").split(",").map(r=>r.trim()).filter(r=>r!=="");return e.length>0?e:null}function xr(t,e,r){let n=Ji(e);if(!n)return new Set(r);let o=n.filter(s=>r.includes(s)),i=n.filter(s=>!r.includes(s));return i.length>0&&l.warn("CONFIG",`${t} has ids not in the active mode; ignoring them`,{discardedIds:i.join(","),fallingBackToModeList:o.length===0}),new Set(o.length>0?o:r)}function Nr(){let t=A.settings(),e=O.loadFromFile(t),r=w.getInstance().getActiveMode(),n=xr("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",e.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES,r.observation_types.map(c=>c.id)),o=xr("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",e.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS,r.observation_concepts.map(c=>c.id)),i=O.getAllDefaults(),s=c=>Gi(c,e[c],i[c]);return{totalObservationCount:s("CLAUDE_MEM_CONTEXT_OBSERVATIONS"),fullObservationCount:s("CLAUDE_MEM_CONTEXT_FULL_COUNT"),sessionCount:s("CLAUDE_MEM_CONTEXT_SESSION_COUNT"),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:n,observationConcepts:o,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",mainAgentOnly:e.CLAUDE_MEM_CONTEXT_MAIN_AGENT_ONLY!=="false",reinforcementAlpha:Yi(e.CLAUDE_MEM_REINFORCE_ALPHA)}}function Vi(t,e){return t.fullObservationCount>0?{config:{...t,fullObservationCount:0},observationCount:e}:t.showLastSummary?{config:{...t,showLastSummary:!1},observationCount:e}:t.showLastMessage?{config:{...t,showLastMessage:!1},observationCount:e}:t.sessionCount>0?{config:{...t,sessionCount:Math.floor(t.sessionCount/2)},observationCount:e}:e>1?{config:t,observationCount:Math.floor(e/2)}:null}function Ur(t,e,r,n=1e4){let o=e,i=t.length,s=r(t,o),c=0;for(;s.length>n;){let a=Vi(o,i);if(!a)return{text:s,config:o,observationCount:i,reductions:c,overBudget:!0};o=a.config,i=a.observationCount,s=r(t.slice(0,i),o),c++}return{text:s,config:o,observationCount:i,reductions:c,overBudget:!1}}function $r(t){let e=(t.title?.length||0)+(t.subtitle?.length||0)+(t.narrative?.length||0)+JSON.stringify(t.facts||[]).length;return Math.ceil(e/Lr)}function Tt(t){let e=t.length,r=t.reduce((s,c)=>s+$r(c),0),n=t.reduce((s,c)=>s+(c.discovery_tokens||0),0),o=n-r,i=n>0?Math.round(o/n*100):0;return{totalObservations:e,totalReadTokens:r,totalDiscoveryTokens:n,savings:o,savingsPercent:i}}function qi(t){return w.getInstance().getWorkEmoji(t)}function Ae(t,e){let r=$r(t),n=t.discovery_tokens||0,o=qi(t.type),i=n>0?`${o} ${n.toLocaleString()}`:"-";return{readTokens:r,discoveryTokens:n,discoveryDisplay:i,workEmoji:o}}function Fe(t){return t.showReadTokens||t.showWorkTokens||t.showSavingsAmount||t.showSavingsPercent}var rn=ne(require("path"),1),We=require("fs");g();g();var He=require("fs");g();T();U();var Xi=[{name:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{name:"aws_secret_key",regex:/(?<=AWS_SECRET_ACCESS_KEY\s*[=:]\s*['"]?)[A-Za-z0-9/+=]{40}/g},{name:"github_pat",regex:/\bgh[oprs]_[A-Za-z0-9]{36}\b|\bgithub_pat_[A-Za-z0-9_]{82}\b/g},{name:"openai_key",regex:/\bsk-(?!ant-)[A-Za-z0-9_-]{20,}\b/g},{name:"anthropic_key",regex:/\bsk-ant-[A-Za-z0-9_-]{20,}\b/g},{name:"slack_token",regex:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g},{name:"jwt",regex:/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g},{name:"private_key_pem",regex:/-----BEGIN (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g},{name:"stripe_key",regex:/\b(?:sk|pk|rk)_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"google_api_key",regex:/\bAIza[0-9A-Za-z_-]{35}\b/g},{name:"claude_mem_key",regex:/\bcmem_[A-Za-z0-9_-]{32,}|\bcm_pro_[A-Za-z0-9_-]{8,}/g}],zi=1024*1024,Qi="<redacted type='oversize'/>";function Wr(t,e){if(!e.enabled||t.length===0)return{redacted:t,counts:{},oversize:!1};if(t.length>zi)return l.warn("REDACT","field exceeds the 1M-char redaction cap; replaced by an oversize marker",void 0,{inputLength:t.length}),{redacted:Qi,counts:{oversize:1},oversize:!0};let r=new Set(e.disabledBuiltinPatterns??[]),n={},o=t,i=[];for(let c of e.customPatterns??[]){if(!c.name||c.name.length===0){l.warn("REDACT","custom pattern skipped: missing name",void 0,{pattern:c});continue}try{i.push({name:c.name,regex:new RegExp(c.regex,"g")})}catch(a){l.warn("REDACT","custom pattern skipped: invalid regex",{name:c.name},a instanceof Error?a:new Error(String(a)))}}let s=[...i,...Xi];for(let c of s)r.has(c.name)||(c.regex.lastIndex=0,o=o.replace(c.regex,()=>(n[c.name]=(n[c.name]??0)+1,`<redacted type='${c.name}'/>`)));return e.logMatches&&Object.keys(n).length>0&&l.debug("REDACT","patterns matched",void 0,{counts:n}),{redacted:o,counts:n,oversize:!1}}function Zi(t){if(!t||t.trim()==="")return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(r=>r&&typeof r.name=="string"&&typeof r.regex=="string"):(l.warn("REDACT","CLAUDE_MEM_REDACT_CUSTOM_PATTERNS is not a JSON array, ignoring"),[])}catch(e){return l.warn("REDACT","failed to parse CLAUDE_MEM_REDACT_CUSTOM_PATTERNS as JSON",void 0,e instanceof Error?e:new Error(String(e))),[]}}function es(t){return{enabled:t.CLAUDE_MEM_REDACT_ENABLED==="true",disabledBuiltinPatterns:(t.CLAUDE_MEM_REDACT_DISABLED_BUILTINS??"").split(",").map(e=>e.trim()).filter(Boolean),customPatterns:Zi(t.CLAUDE_MEM_REDACT_CUSTOM_PATTERNS??"[]"),logMatches:t.CLAUDE_MEM_REDACT_LOG_MATCHES==="true"}}var Te=null,Fr=0,ts=5e3,Ce=null,Hr=!1,rs={enabled:!0,disabledBuiltinPatterns:[],customPatterns:[],logMatches:!1},ns=/"CLAUDE_MEM_REDACT_ENABLED"\s*:\s*"true"/;function os(t){if(!(0,He.existsSync)(t))return null;try{return(0,He.readFileSync)(t,"utf-8")}catch{return""}}function is(t){if(t===null)return!1;try{let e=JSON.parse(ct(t));return e===null||typeof e!="object"||Array.isArray(e)}catch{return!0}}function ss(t,e,r){return process.env.CLAUDE_MEM_REDACT_ENABLED==="false"||!(Ce?.enabled===!0||ns.test(e))?r:(Hr||(Hr=!0,l.warn("REDACT","settings.json could not be read; secret redaction stays on until it is repaired",{settingsPath:t,using:Ce?.enabled?"the last configuration that loaded":"the built-in patterns"})),Ce?.enabled?Ce:rs)}function jr(t=G){let e=Date.now();if(Te&&e-Fr<ts)return Te;let r=O.loadFromFile(t),n=es(r),o=n.enabled?null:os(t);return is(o)?Te=ss(t,o,n):(Te=n,Ce=n),Fr=e,Te}var Ct=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],Br=new RegExp(`<(${Ct.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g"),Yr=/<system-reminder>[\s\S]*?<\/system-reminder>/g,Kr=100;function as(t){let e=Object.fromEntries(Ct.map(i=>[i,0]));Br.lastIndex=0;let r=0,n=t.replace(Br,(i,s)=>(e[s]=(e[s]??0)+1,r+=1,""));return r>Kr&&l.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:r,maxAllowed:Kr,contentLength:t.length}),{stripped:Wr(n.trim(),jr()).redacted,counts:e}}function cs(t){return as(t).stripped}var ls=new RegExp(`<(${Ct.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`);function Mt(t){let e=r=>typeof r=="string"?ls.test(r)?cs(r):r:Array.isArray(r)?r.map(e):r!==null&&typeof r=="object"?Object.fromEntries(Object.entries(r).map(([n,o])=>[n,e(o)])):r;return e(t)}var us=["task-notification"],yl=new RegExp(`^\\s*<(${us.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),Al=256*1024;T();function Gr(t){return`(COALESCE(${t}.agent_id, '') = '' OR COALESCE(${t}.agent_type, '') = '')`}function Jr(t,e){let r=Date.parse(t);if(Number.isNaN(r))return 1;let n=Math.floor((e.getTime()-r)/864e5);return n<1?1:n}function Vr(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(r=>typeof r=="string"&&r.length>0):[]}catch{return[]}}function qr(t=new Date){return t.toISOString().slice(0,10)}var ds=864e5,fs=5,Xr=500;function Qr(t,e){return!(e>0)||t>=Xr?t:Math.min(Xr,Math.max(t,t*fs))}function ps(t,e){let r=Math.max(1,Math.floor((e.getTime()-t)/ds));return Math.pow(r,-.5)}function ms(t,e,r){let n=ps(t.created_at_epoch,e),o=Vr(t.reinforcement_dates),i=qr(new Date(t.created_at_epoch)),s=0;for(let c of o)c!==i&&(s+=Math.pow(Jr(c,e),-.5));return Math.log(1+n+r*s)}function Es(t){return Math.max(1,Math.ceil(t/4))}function Zr(t,e,r,n=new Date){if(t.length<=e)return t;if(!(r>0))return t.slice(0,e);let o=t.slice(0,Math.min(e,Es(e))),i=t.slice(o.length).map((c,a)=>({item:c,i:a,score:ms(c,n,r)}));return i.sort((c,a)=>a.score-c.score||a.item.created_at_epoch-c.item.created_at_epoch||c.i-a.i),[...o,...i.slice(0,e-o.length).map(c=>c.item)].sort((c,a)=>a.created_at_epoch-c.created_at_epoch)}var en=`
13
+ `)}else G(d+`
14
+ `)}debug(e,r,n,o){this.log(0,e,r,n,o)}info(e,r,n,o){this.log(1,e,r,n,o)}warn(e,r,n,o){this.log(2,e,r,n,o)}setErrorSink(e){ft=e}error(e,r,n,o){this.log(3,e,r,n,o),this.routeErrorToSink(r,n,o)}routeErrorToSink(e,r,n){try{if(!ft||!(n instanceof Error))return;ft(n)}catch{}}dataIn(e,r,n,o){this.info(e,`\u2192 ${r}`,n,o)}dataOut(e,r,n,o){this.info(e,`\u2190 ${r}`,n,o)}success(e,r,n,o){this.info(e,`\u2713 ${r}`,n,o)}failure(e,r,n,o){this.error(e,`\u2717 ${r}`,n,o)}},l=new mt});var ji,vr,kr=Z(()=>{"use strict";ji=require("bun:sqlite");g();vr=5e3});var rc={};si(rc,{generateContext:()=>Zo,generateContextWithStats:()=>zt});module.exports=ai(rc);var Jo=ne(require("path"),1),Vo=require("os"),st=require("fs"),qo=require("bun:sqlite");T();g();var D=ne(require("path"),1),ie=require("fs"),xe=require("os"),yt=require("child_process");ge();T();var te=require("fs"),J=require("path"),Se=require("os");var x={HEALTH_CHECK:3e3,API_REQUEST:3e4,SESSION_INIT_HOOK_CAP:15e3,SESSION_INIT_REQUEST:1e4,SESSION_INIT_REQUEST_MAX:14e3,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Si(t=process.platform){return t==="win32"?8e3:5e3}function Et(t=process.platform){return x.SESSION_INIT_HOOK_CAP-Si(t)}function j(t){return process.platform==="win32"?Math.round(t*x.WINDOWS_MULTIPLIER):t}U();g();function ur(t){try{return new URL(t).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}ve();var hi="security_alert",yi="sync-hub.black-pond-afbb.workers.dev",Ai="ziczmqtpmaxbornfghye.supabase.co",Ti="https://sync.cmem.ai",Ci=new Set(["xiaomi/mimo-v2-flash:free"]);function Mi(t){return typeof t=="boolean"?String(t):t}function bi(t){let e=t.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!Ci.has(e.trim()))return!1;let r=typeof t.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?t.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||ur(r)}var dr=18e4,fr=[{key:"CLAUDE_MEM_LLM_TIMEOUT_MS",legacy:"30000",markerTag:"llm-timeout-migrated-v1"},{key:"CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS",legacy:"30000",markerTag:"field-optimize-timeout-migrated-v1"}];function mr(t,e){return(0,J.join)((0,J.dirname)(t),`.${(0,J.basename)(t)}.${e.markerTag}`)}function gt(t,e){try{(0,te.writeFileSync)(mr(t,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var pr=new Set;function Oi(t){if(typeof t!="string")return null;let e=t.trim();if(e.length===0)return null;try{let r=new URL(e).hostname;if(r===yi||r===Ai)return Ti}catch{return null}return null}var O=class{static DEFAULTS={CLAUDE_MEM_MEMORY_SEARCH_HOOK_ENABLED:"true",CLAUDE_MEM_MEMORY_INSTRUCTIONS_ENABLED:"true",CLAUDE_MEM_MEMORY_WATCH_ROOTS:"",CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_SESSION_START_INCLUDE_ALL_SOURCES:"false",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(j(x.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Et()),CLAUDE_MEM_IDLE_EXIT_SEC:"0",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_SKIP_BASH_PATTERNS:"",CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS:"false",CLAUDE_MEM_SKIP_AGENT_TYPES:"",CLAUDE_MEM_CAPTURE_ADVISOR_CALLS:"false",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CODEX_MODEL:"",CLAUDE_MEM_CODEX_PATH:"codex",CLAUDE_MEM_CODEX_REASONING_EFFORT:"low",CLAUDE_MEM_CODEX_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_SIZE:"8",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_MAX_CHARS:"32000",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_API_KEYS:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_API_KEYS:"",CLAUDE_MEM_OPENROUTER_MODEL:"cohere/north-mini-code:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_TEMPERATURE:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_EXTRA_BODY:"",CLAUDE_MEM_OPENROUTER_REASONING_EFFORT:"",CLAUDE_MEM_OPENAI_COMPAT_PRESET:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEY:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEYS:"",CLAUDE_MEM_OPENAI_COMPAT_BASE_URL:"",CLAUDE_MEM_OPENAI_COMPAT_MODEL:"",CLAUDE_MEM_QUOTA_FALLBACK_PROVIDER:"claude",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_QUOTA_THRESHOLD_FIVE_HOUR:"0.95",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_OPUS:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_SONNET:"0.92",CLAUDE_MEM_QUOTA_THRESHOLD_OVERAGE:"0.95",CLAUDE_MEM_DATA_DIR:(0,J.join)((0,Se.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_OBSERVER_CLAUDE_CONFIG_DIR:"",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_OBSERVATION_TYPES:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",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_MAIN_AGENT_ONLY:"true",CLAUDE_MEM_REINFORCE_ALPHA:"0",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_WORK_STATE_ENABLED:"true",CLAUDE_MEM_FILE_READ_GATE_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,Se.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_CODEX_SUBAGENT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_OBSERVER_CONTEXT_WINDOW:"",CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS:"4096",CLAUDE_MEM_OBSERVE_BARE_PROMPTS:"false",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_REDACT_ENABLED:"false",CLAUDE_MEM_REDACT_DISABLED_BUILTINS:"",CLAUDE_MEM_REDACT_CUSTOM_PATTERNS:"[]",CLAUDE_MEM_REDACT_LOG_MATCHES:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_PROJECT_ENVIRONMENTS:"[]",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_SEMANTIC_INJECT_FORMAT:"narrative",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_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MUTATION_TIMEOUT_MS:"600000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CHROMA_EMBEDDING_FUNCTION:"default",CLAUDE_MEM_CHROMA_UVX_PATH:"",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,Se.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:String(dr),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(dr),CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_FALLBACK_MESSAGE:"",CLAUDE_MEM_PRO_FALLBACK_ACTION:"",CLAUDE_MEM_PRO_FALLBACK_URL:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_URL:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_SECRET:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",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:"",CLAUDE_MEM_DEDUP_ENABLED:"false",CLAUDE_MEM_DEDUP_COSINE_THRESHOLD:"0.80",CLAUDE_MEM_DEDUP_IDF_VETO_DF:"10",CLAUDE_MEM_DEDUP_MIN_SHARED_TOKENS:"2",CLAUDE_MEM_DEDUP_MIN_PROJECT_DOCS:"10",CLAUDE_MEM_DEDUP_MAX_SCAN:"2000",CLAUDE_MEM_DEDUP_MAX_BACKFILL_ROWS:"50000",CLAUDE_MEM_TOOL_USES_RETENTION_DAYS:"0",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let r=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,r){let n=r?this.applyEnvOverrides(e):e;return n.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(n.CLAUDE_MEM_WORKER_HOST),n}static getInt(e){let r=this.get(e);return parseInt(r,10)}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e,r=!0,n={}){try{if(!(0,te.existsSync)(e)){let d=this.getAllDefaults();if(!n.readOnly)try{P(e,d,{mode:384});for(let E of fr)gt(e,E);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(E){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,E instanceof Error?E.message:String(E))}return this.finalizeSettings(d,r)}let o=(0,te.readFileSync)(e,"utf-8"),i=De(o),s=oe(i),c=s!==i,a=tr(i),u=c&&Object.keys(a).some(d=>d!=="env");if(c&&!u&&!n.readOnly)try{P(e,s,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,d instanceof Error?d.message:String(d))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===hi&&(s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!n.readOnly))try{P(e,u?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,d instanceof Error?d.message:String(d))}if(bi(s)){let d=String(s.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(s={...s,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!n.readOnly)try{P(e,u?{...a,env:s}:s,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${d} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(E){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,E instanceof Error?E.message:String(E))}}let m=Oi(s.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(m!==null&&(s={...s,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:m},!n.readOnly))try{P(e,u?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",m,"from a retired hub host:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,d instanceof Error?d.message:String(d))}for(let d of fr)if(!(0,te.existsSync)(mr(e,d))){if(s[d.key]!==d.legacy){n.readOnly||gt(e,d);continue}if(s={...s,[d.key]:this.DEFAULTS[d.key]},!n.readOnly)try{P(e,u?{...a,env:s}:s,{mode:384}),gt(e,d),console.warn(`[SETTINGS] Migrated ${d.key} off the old ${d.legacy}ms default to ${this.DEFAULTS[d.key]}ms:`,e)}catch(E){let y=`${d.key}\0${e}`;pr.has(y)||(pr.add(y),console.warn(`[SETTINGS] Failed to migrate ${d.key}; using the new default in memory (reported once per process):`,e,E instanceof Error?E.message:String(E)))}}let p={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))s[d]!==void 0&&(p[d]=Mi(s[d]));return this.finalizeSettings(p,r)}catch(o){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,o instanceof Error?o.message:String(o));let i=this.getAllDefaults();return this.finalizeSettings(i,r)}}};g();var Ie=require("fs"),V=ne(require("path"),1);g();var he={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function Er(t){let e=V.default.join(t,".git"),r;try{r=(0,Ie.statSync)(e)}catch(a){return a instanceof Error&&a.code!=="ENOENT"&&l.warn("GIT","Unexpected error checking .git",{error:a instanceof Error?a.message:String(a)}),he}if(!r.isFile())return he;let n;try{n=(0,Ie.readFileSync)(e,"utf-8").trim()}catch(a){return l.warn("GIT","Failed to read .git file",{error:a instanceof Error?a.message:String(a)}),he}let o=n.match(/^gitdir:\s*(.+)$/);if(!o)return he;let i=V.default.resolve(V.default.dirname(e),o[1]),s=i.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(s){let a=s[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:V.default.basename(t),parentRepoPath:a,parentProjectName:V.default.basename(a)}}let c=i.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(c){let a=c[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:V.default.basename(t),parentRepoPath:a,parentProjectName:V.default.basename(a)}}return he}var Sr=require("fs");var gr=require("path");ge();g();function wi(t){let e=$(t.replace(/\\/g,"/"));e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${r}$`)}function _r(t,e){if(!e.length)return!1;let r=t.replace(/\\/g,"/"),n=(0,gr.basename)(r);for(let o of e){let i=o.trim();if(i)try{let s=wi(i);if(s.test(r)||s.test(n))return!0}catch(s){l.warn("PROJECT_NAME","Invalid glob pattern",{pattern:i,error:s instanceof Error?s.message:String(s)});continue}}return!1}g();function hr(t){let e=t;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(n){return l.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:n instanceof Error?n.message:String(n)}),[]}}if(!Array.isArray(e))return e!=null&&l.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let r=[];for(let n of e){let o=typeof n?.name=="string"?n.name.trim():"",i=Array.isArray(n?.patterns)?n.patterns.filter(s=>typeof s=="string"&&s.trim()!==""):[];if(!o||i.length===0){l.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:o});continue}r.push({name:o,patterns:i})}return r}function Ri(t){try{return(0,Sr.realpathSync)(t)}catch{return t}}function _t(t,e){if(e.length===0)return null;let r=[...new Set([t,Ri(t)])].flatMap(n=>[n,`${n.replace(/[\\/]+$/,"")}/`]);for(let n of e)if(r.some(o=>_r(o,n.patterns)))return n.name;return null}var At="unknown-project";function Tr(t){try{return(0,yt.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch(e){let r=e instanceof Error?e:new Error(String(e));return l.debug("PROJECT_NAME","git rev-parse failed, falling back to non-git root",{dir:t},r),null}}var Di=[".claude-mem-project",".claude-mem.json"],vi=64;function Cr(t){try{return(0,ie.realpathSync)(t)}catch{return t}}function ki(t,e){let r=D.default.relative(e,t);return r===""||!r.startsWith("..")&&!D.default.isAbsolute(r)}function Ii(){return[(0,xe.homedir)(),(0,xe.tmpdir)(),W].flatMap(t=>{let e=D.default.resolve(t);return[e,Cr(e)]})}function Mr(t){let e=Ii(),r=D.default.resolve(t);if([D.default.resolve(W),Cr(D.default.resolve(W))].some(o=>ki(r,o)))return null;for(let o=0;o<vi;o++){if(e.includes(r))return null;let i=D.default.dirname(r);if(i===r)return null;if(Di.some(s=>(0,ie.existsSync)(D.default.join(r,s))))return r;r=i}return null}function ht(t,e){let r=D.default.basename(e);if(r===""){if(process.platform==="win32"){let o=t.match(/^([A-Z]):\\/i);if(o){let s=`drive-${o[1].toUpperCase()}`;return l.info("PROJECT_NAME","Drive root detected",{cwd:t,projectName:s}),s}}return l.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:t}),At}return r}var Li="CLAUDE_MEM_PROJECT_NAME_SOURCE",Le=null;function yr(){try{return(0,ie.statSync)(Y).mtimeMs}catch{return-1}}function br(){let t=yr();if(t===-1)return O.getAllDefaults();if(Le&&Le.mtimeMs===t)return Le.settings;let e=O.loadFromFile(Y);return Le={mtimeMs:yr(),settings:e},e}function Pi(){let t=process.env[Li]??br().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(t??"path").trim().toLowerCase()==="git-remote"}var xi="CLAUDE_MEM_PROJECT_ENVIRONMENTS",Pe=null;function Ne(){let t=process.env[xi]??br().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!Pe||Pe.raw!==t)&&(Pe={raw:t,environments:hr(t)}),Pe.environments}function Ni(t){let e=(t??"").trim();if(!e||/^file:/i.test(e)||e.startsWith("/")||e.startsWith(".")||e.startsWith("~")||e.startsWith("\\\\")||/^[a-z]:[\\/]/i.test(e))return null;let n=e.replace(/\/+$/,"").replace(/\.git$/i,""),o=n.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),i=o?null:n.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),s=o?.[1]??i?.[1];if(!s)return null;let c=s.split("/").filter(a=>a&&a!=="_git");return c.length>=2?c.slice(-2).join("/"):c.length===1?c[0]:null}function Ui(t){try{let e=(0,yt.execFileSync)("git",["remote","get-url","origin"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return Ni(e)}catch(e){let r=e instanceof Error?e:new Error(String(e));return l.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:t},r),null}}var St=new Map;function Or(t){return Pi()?(St.has(t)||St.set(t,Ui(t)),St.get(t)??null):null}function $i(t,e=process.platform){if(!t||t.trim()==="")return l.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:t}),At;let r=$(t,e),n=_t(r,Ne());if(n)return n;let o=Tr(r),i=o?Or(o):null;if(i)return i;let s=o??Mr(r)??r;return ht(t,s)}function wr(t,e){return e===t?t:`${t}/${e}`}function Fi(t,e){if(!t.isSubmodule||!t.parentRepoPath)return null;let r=D.default.relative(t.parentRepoPath,e);return!r||r.startsWith("..")||D.default.isAbsolute(r)?null:r.split(D.default.sep).join("/")}function Rr(t,e=process.platform){if(!t||t.trim()===""){let a=$i(t,e);return{primary:a,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a],keySource:"path"}}let r=$(t,e),n=Tr(r),o=Hi(t,r,n),i=n?Or(n):null,s=i?Ar(o,i,"git-remote"):o,c=_t(r,Ne());return c?Ar(s,c,"environment"):s}function Ar(t,e,r){return{primary:e,parent:null,isWorktree:t.isWorktree,isSubmodule:t.isSubmodule,allProjects:[...t.allProjects.filter(n=>n!==e),e],keySource:r}}function Hi(t,e,r){let n=r?null:Mr(e),o=ht(t,r??n??e),i=r??e,s=Er(i);if((s.isWorktree||s.isSubmodule)&&s.parentProjectName){let c=s.parentProjectName,a,u;return s.isSubmodule?(a=`${c}/${Fi(s,i)??o}`,u=o!==c?[o]:[]):(a=wr(c,o),u=a===c?[`${c}/${o}`]:[]),{primary:a,parent:c,isWorktree:s.isWorktree,isSubmodule:s.isSubmodule,allProjects:[...new Set([c,...u,a])].filter(m=>m!==a).concat(a),keySource:"path"}}if(n&&D.default.resolve(n)!==D.default.resolve(e)){let c=ht(t,e);if(c!==o&&c!==At)return{primary:o,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[c,o],keySource:"path"}}return{primary:o,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[o],keySource:"path"}}var Dr="claude";function Wi(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Ue(t){if(!t)return Dr;let e=Wi(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e.includes("kimi")?"kimi":e==="pi-mono"?"pi":e==="agy"||e==="antigravity"||e.startsWith("antigravity-")?"antigravity-cli":e:Dr}kr();function Bi(t){let e=t.projects?.length?t.projects:t.project?[t.project]:[];return[...new Set(e.map(r=>r.trim()).filter(Boolean))]}function Ir(t,e){let r=Bi({projects:e});if(r.length===0)return[];let n=r.map(()=>"?").join(","),o=[`SELECT project AS key FROM sdk_sessions WHERE project COLLATE NOCASE IN (${n})`,`SELECT project FROM observations WHERE project COLLATE NOCASE IN (${n})`,`SELECT merged_into_project FROM observations WHERE merged_into_project COLLATE NOCASE IN (${n})`,`SELECT project FROM session_summaries WHERE project COLLATE NOCASE IN (${n})`,`SELECT merged_into_project FROM session_summaries WHERE merged_into_project COLLATE NOCASE IN (${n})`,`SELECT project FROM observations WHERE merged_into_project COLLATE NOCASE IN (${n})`,`SELECT project FROM session_summaries WHERE merged_into_project COLLATE NOCASE IN (${n})`],i=t.prepare(o.join(" UNION "));try{let s=i.all(...o.flatMap(()=>r));return[...new Set([...r,...s.map(c=>c.key)])]}finally{i.finalize()}}var f={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"},Lr=4,se=1;T();var $e=require("fs"),ye=require("path");g();T();var Ki=/^[a-z0-9]+(?:-[a-z0-9]+)*(?:--[a-z0-9]+(?:-[a-z0-9]+)*)?$/,w=class t{static instance=null;activeMode=null;activeModeId=null;modeDirs;constructor(){let e=ar(),r=[...process.env.CLAUDE_MEM_MODES_DIR?[process.env.CLAUDE_MEM_MODES_DIR]:[],(0,ye.join)(A.dataDir(),"modes"),(0,ye.join)(e,"modes"),(0,ye.join)(e,"..","plugin","modes")];this.modeDirs=[...new Set(r)]}static getInstance(){return t.instance||(t.instance=new t),t.instance}parseInheritance(e){let r=e.split("--");if(r.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(r.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:r[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,r){let n={...e};for(let o in r){let i=r[o],s=e[o];this.isPlainObject(i)&&this.isPlainObject(s)?n[o]=this.deepMerge(s,i):n[o]=i}return n}loadModeFile(e){if(!Ki.test(e))throw new Error(`Invalid mode ID: ${e}`);let r=this.modeDirs.map(o=>(0,ye.join)(o,`${e}.json`)).find(o=>(0,$e.existsSync)(o));if(!r)throw new Error(`Mode file not found: ${e}.json (searched: ${this.modeDirs.join(", ")})`);let n=(0,$e.readFileSync)(r,"utf-8");return JSON.parse(n)}loadMode(e){let r=this.parseInheritance(e);if(!r.hasParent)try{let a=this.loadModeFile(e);return this.activeMode=a,this.activeModeId=e,l.debug("SYSTEM",`Loaded mode: ${a.name} (${e})`,void 0,{types:a.observation_types.map(u=>u.id),concepts:a.observation_concepts.map(u=>u.id)}),a}catch(a){if(a instanceof Error?l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{message:a.message}):l.warn("WORKER",`Mode file not found: ${e}, falling back to 'code'`,{error:String(a)}),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:n,overrideId:o}=r,i;try{i=this.loadMode(n)}catch(a){a instanceof Error?l.warn("WORKER",`Parent mode '${n}' not found for ${e}, falling back to 'code'`,{message:a.message}):l.warn("WORKER",`Parent mode '${n}' not found for ${e}, falling back to 'code'`,{error:String(a)}),i=this.loadMode("code")}let s;try{s=this.loadModeFile(o),l.debug("SYSTEM",`Loaded override file: ${o} for parent ${n}`)}catch(a){return a instanceof Error?l.warn("WORKER",`Override file '${o}' not found, using parent mode '${n}' only`,{message:a.message}):l.warn("WORKER",`Override file '${o}' not found, using parent mode '${n}' only`,{error:String(a)}),this.activeMode=i,i}if(!s)return l.warn("SYSTEM",`Invalid override file: ${o}, using parent mode '${n}' only`),this.activeMode=i,i;let c=this.deepMerge(i,s);return this.activeMode=c,this.activeModeId=e,l.debug("SYSTEM",`Loaded mode with inheritance: ${c.name} (${e} = ${n} + ${o})`,void 0,{parent:n,override:o,types:c.observation_types.map(a=>a.id),concepts:c.observation_concepts.map(a=>a.id)}),c}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getActiveModeId(){if(!this.activeModeId)throw new Error("No mode loaded. Call loadMode() first.");return this.activeModeId}getObservationTypes(){return this.getActiveMode().observation_types}getTypeIcon(e){return this.getObservationTypes().find(n=>n.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(n=>n.id===e)?.work_emoji||"\u{1F4DD}"}};g();function Pr(t){let e;if(typeof t=="number")e=t;else if(typeof t=="string"&&/^\d+$/.test(t.trim()))e=Number(t.trim());else return;return Number.isSafeInteger(e)&&e>=0?e:void 0}function Gi(t){let e=Number(t);return Number.isFinite(e)&&e>0?e:0}function Yi(t,e,r){let n=Pr(e);return n!==void 0?n:(e!==void 0&&l.warn("CONFIG",`${t} must be a whole number >= 0; using the default`,{value:e,default:r}),Number(r))}function Ji(t){let e=(t??"").split(",").map(r=>r.trim()).filter(r=>r!=="");return e.length>0?e:null}function xr(t,e,r){let n=Ji(e);if(!n)return new Set(r);let o=n.filter(s=>r.includes(s)),i=n.filter(s=>!r.includes(s));return i.length>0&&l.warn("CONFIG",`${t} has ids not in the active mode; ignoring them`,{discardedIds:i.join(","),fallingBackToModeList:o.length===0}),new Set(o.length>0?o:r)}function Nr(){let t=A.settings(),e=O.loadFromFile(t),r=w.getInstance().getActiveMode(),n=xr("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",e.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES,r.observation_types.map(c=>c.id)),o=xr("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",e.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS,r.observation_concepts.map(c=>c.id)),i=O.getAllDefaults(),s=c=>Yi(c,e[c],i[c]);return{totalObservationCount:s("CLAUDE_MEM_CONTEXT_OBSERVATIONS"),fullObservationCount:s("CLAUDE_MEM_CONTEXT_FULL_COUNT"),sessionCount:s("CLAUDE_MEM_CONTEXT_SESSION_COUNT"),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:n,observationConcepts:o,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",mainAgentOnly:e.CLAUDE_MEM_CONTEXT_MAIN_AGENT_ONLY!=="false",reinforcementAlpha:Gi(e.CLAUDE_MEM_REINFORCE_ALPHA)}}function Vi(t,e){return t.fullObservationCount>0?{config:{...t,fullObservationCount:0},observationCount:e}:t.showLastSummary?{config:{...t,showLastSummary:!1},observationCount:e}:t.showLastMessage?{config:{...t,showLastMessage:!1},observationCount:e}:t.sessionCount>0?{config:{...t,sessionCount:Math.floor(t.sessionCount/2)},observationCount:e}:e>1?{config:t,observationCount:Math.floor(e/2)}:null}function Ur(t,e,r,n=1e4){let o=e,i=t.length,s=r(t,o),c=0;for(;s.length>n;){let a=Vi(o,i);if(!a)return{text:s,config:o,observationCount:i,reductions:c,overBudget:!0};o=a.config,i=a.observationCount,s=r(t.slice(0,i),o),c++}return{text:s,config:o,observationCount:i,reductions:c,overBudget:!1}}function $r(t){let e=(t.title?.length||0)+(t.subtitle?.length||0)+(t.narrative?.length||0)+JSON.stringify(t.facts||[]).length;return Math.ceil(e/Lr)}function Tt(t){let e=t.length,r=t.reduce((s,c)=>s+$r(c),0),n=t.reduce((s,c)=>s+(c.discovery_tokens||0),0),o=n-r,i=n>0?Math.round(o/n*100):0;return{totalObservations:e,totalReadTokens:r,totalDiscoveryTokens:n,savings:o,savingsPercent:i}}function qi(t){return w.getInstance().getWorkEmoji(t)}function Ae(t,e){let r=$r(t),n=t.discovery_tokens||0,o=qi(t.type),i=n>0?`${o} ${n.toLocaleString()}`:"-";return{readTokens:r,discoveryTokens:n,discoveryDisplay:i,workEmoji:o}}function Fe(t){return t.showReadTokens||t.showWorkTokens||t.showSavingsAmount||t.showSavingsPercent}var rn=ne(require("path"),1),We=require("fs");g();g();var He=require("fs");g();T();U();var Xi=[{name:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{name:"aws_secret_key",regex:/(?<=AWS_SECRET_ACCESS_KEY\s*[=:]\s*['"]?)[A-Za-z0-9/+=]{40}/g},{name:"github_pat",regex:/\bgh[oprs]_[A-Za-z0-9]{36}\b|\bgithub_pat_[A-Za-z0-9_]{82}\b/g},{name:"openai_key",regex:/\bsk-(?!ant-)[A-Za-z0-9_-]{20,}\b/g},{name:"anthropic_key",regex:/\bsk-ant-[A-Za-z0-9_-]{20,}\b/g},{name:"slack_token",regex:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g},{name:"jwt",regex:/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g},{name:"private_key_pem",regex:/-----BEGIN (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g},{name:"stripe_key",regex:/\b(?:sk|pk|rk)_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"google_api_key",regex:/\bAIza[0-9A-Za-z_-]{35}\b/g},{name:"claude_mem_key",regex:/\bcmem_[A-Za-z0-9_-]{32,}|\bcm_pro_[A-Za-z0-9_-]{8,}/g}],zi=1024*1024,Qi="<redacted type='oversize'/>";function Wr(t,e){if(!e.enabled||t.length===0)return{redacted:t,counts:{},oversize:!1};if(t.length>zi)return l.warn("REDACT","field exceeds the 1M-char redaction cap; replaced by an oversize marker",void 0,{inputLength:t.length}),{redacted:Qi,counts:{oversize:1},oversize:!0};let r=new Set(e.disabledBuiltinPatterns??[]),n={},o=t,i=[];for(let c of e.customPatterns??[]){if(!c.name||c.name.length===0){l.warn("REDACT","custom pattern skipped: missing name",void 0,{pattern:c});continue}try{i.push({name:c.name,regex:new RegExp(c.regex,"g")})}catch(a){l.warn("REDACT","custom pattern skipped: invalid regex",{name:c.name},a instanceof Error?a:new Error(String(a)))}}let s=[...i,...Xi];for(let c of s)r.has(c.name)||(c.regex.lastIndex=0,o=o.replace(c.regex,()=>(n[c.name]=(n[c.name]??0)+1,`<redacted type='${c.name}'/>`)));return e.logMatches&&Object.keys(n).length>0&&l.debug("REDACT","patterns matched",void 0,{counts:n}),{redacted:o,counts:n,oversize:!1}}function Zi(t){if(!t||t.trim()==="")return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(r=>r&&typeof r.name=="string"&&typeof r.regex=="string"):(l.warn("REDACT","CLAUDE_MEM_REDACT_CUSTOM_PATTERNS is not a JSON array, ignoring"),[])}catch(e){return l.warn("REDACT","failed to parse CLAUDE_MEM_REDACT_CUSTOM_PATTERNS as JSON",void 0,e instanceof Error?e:new Error(String(e))),[]}}function es(t){return{enabled:t.CLAUDE_MEM_REDACT_ENABLED==="true",disabledBuiltinPatterns:(t.CLAUDE_MEM_REDACT_DISABLED_BUILTINS??"").split(",").map(e=>e.trim()).filter(Boolean),customPatterns:Zi(t.CLAUDE_MEM_REDACT_CUSTOM_PATTERNS??"[]"),logMatches:t.CLAUDE_MEM_REDACT_LOG_MATCHES==="true"}}var Te=null,Fr=0,ts=5e3,Ce=null,Hr=!1,rs={enabled:!0,disabledBuiltinPatterns:[],customPatterns:[],logMatches:!1},ns=/"CLAUDE_MEM_REDACT_ENABLED"\s*:\s*"true"/;function os(t){if(!(0,He.existsSync)(t))return null;try{return(0,He.readFileSync)(t,"utf-8")}catch{return""}}function is(t){if(t===null)return!1;try{let e=JSON.parse(ct(t));return e===null||typeof e!="object"||Array.isArray(e)}catch{return!0}}function ss(t,e,r){return process.env.CLAUDE_MEM_REDACT_ENABLED==="false"||!(Ce?.enabled===!0||ns.test(e))?r:(Hr||(Hr=!0,l.warn("REDACT","settings.json could not be read; secret redaction stays on until it is repaired",{settingsPath:t,using:Ce?.enabled?"the last configuration that loaded":"the built-in patterns"})),Ce?.enabled?Ce:rs)}function jr(t=Y){let e=Date.now();if(Te&&e-Fr<ts)return Te;let r=O.loadFromFile(t),n=es(r),o=n.enabled?null:os(t);return is(o)?Te=ss(t,o,n):(Te=n,Ce=n),Fr=e,Te}var Ct=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],Br=new RegExp(`<(${Ct.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g"),Gr=/<system-reminder>[\s\S]*?<\/system-reminder>/g,Kr=100;function as(t){let e=Object.fromEntries(Ct.map(i=>[i,0]));Br.lastIndex=0;let r=0,n=t.replace(Br,(i,s)=>(e[s]=(e[s]??0)+1,r+=1,""));return r>Kr&&l.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:r,maxAllowed:Kr,contentLength:t.length}),{stripped:Wr(n.trim(),jr()).redacted,counts:e}}function cs(t){return as(t).stripped}var ls=new RegExp(`<(${Ct.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`);function Mt(t){let e=r=>typeof r=="string"?ls.test(r)?cs(r):r:Array.isArray(r)?r.map(e):r!==null&&typeof r=="object"?Object.fromEntries(Object.entries(r).map(([n,o])=>[n,e(o)])):r;return e(t)}var us=["task-notification"],yl=new RegExp(`^\\s*<(${us.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),Al=256*1024;T();function Yr(t){return`(COALESCE(${t}.agent_id, '') = '' OR COALESCE(${t}.agent_type, '') = '')`}function Jr(t,e){let r=Date.parse(t);if(Number.isNaN(r))return 1;let n=Math.floor((e.getTime()-r)/864e5);return n<1?1:n}function Vr(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(r=>typeof r=="string"&&r.length>0):[]}catch{return[]}}function qr(t=new Date){return t.toISOString().slice(0,10)}var ds=864e5,fs=5,Xr=500;function Qr(t,e){return!(e>0)||t>=Xr?t:Math.min(Xr,Math.max(t,t*fs))}function ps(t,e){let r=Math.max(1,Math.floor((e.getTime()-t)/ds));return Math.pow(r,-.5)}function ms(t,e,r){let n=ps(t.created_at_epoch,e),o=Vr(t.reinforcement_dates),i=qr(new Date(t.created_at_epoch)),s=0;for(let c of o)c!==i&&(s+=Math.pow(Jr(c,e),-.5));return Math.log(1+n+r*s)}function Es(t){return Math.max(1,Math.ceil(t/4))}function Zr(t,e,r,n=new Date){if(t.length<=e)return t;if(!(r>0))return t.slice(0,e);let o=t.slice(0,Math.min(e,Es(e))),i=t.slice(o.length).map((c,a)=>({item:c,i:a,score:ms(c,n,r)}));return i.sort((c,a)=>a.score-c.score||a.item.created_at_epoch-c.item.created_at_epoch||c.i-a.i),[...o,...i.slice(0,e-o.length).map(c=>c.item)].sort((c,a)=>a.created_at_epoch-c.created_at_epoch)}var en=`
15
15
  o.id,
16
16
  o.memory_session_id,
17
17
  s.content_session_id,
@@ -31,7 +31,7 @@ ${y.stack??""}
31
31
  `,bt=["project","merged_into_project"],ae=250;function nn(t,e){let r=new Map;for(let n of t)for(let o of n)r.set(o.id,o);return[...r.values()].sort((n,o)=>o.created_at_epoch-n.created_at_epoch).slice(0,e)}function on(t,e,r){let n=[];for(let o of bt)for(let i=0;i<e;i++)n.push(`SELECT * FROM (${r(`${t}.${o} COLLATE NOCASE = ?`)})`);return`
32
32
  SELECT id FROM (${n.join(" UNION ")})
33
33
  ORDER BY created_at_epoch DESC
34
- LIMIT ?`}function sn(t,e,r,n){let o=r.reinforcementAlpha??0,i=an(t,r,{limit:Qr(r.totalObservationCount,o),platformSource:n,projects:e,excludeSubagents:r.mainAgentOnly,withReinforcementDates:o>0});return Zr(i,r.totalObservationCount,o)}function an(t,e,r){let n=Array.from(e.observationTypes),o=n.map(()=>"?").join(","),i=Array.from(e.observationConcepts),s=i.map(()=>"?").join(","),c=(r.projects??[]).filter(h=>h.trim().length>0);if(c.length>ae){let h=[];for(let I=0;I<c.length;I+=ae)h.push(an(t,e,{...r,projects:c.slice(I,I+ae)}));return nn(h,r.limit)}let a=r.includeManualSaves?"substr(o.memory_session_id, 1, 7) = 'manual-' OR":"",u=r.excludeSubagents?`AND ${Gr("o")}`:"",m=r.withReinforcementDates?`,
34
+ LIMIT ?`}function sn(t,e,r,n){let o=r.reinforcementAlpha??0,i=an(t,r,{limit:Qr(r.totalObservationCount,o),platformSource:n,projects:e,excludeSubagents:r.mainAgentOnly,withReinforcementDates:o>0});return Zr(i,r.totalObservationCount,o)}function an(t,e,r){let n=Array.from(e.observationTypes),o=n.map(()=>"?").join(","),i=Array.from(e.observationConcepts),s=i.map(()=>"?").join(","),c=(r.projects??[]).filter(h=>h.trim().length>0);if(c.length>ae){let h=[];for(let I=0;I<c.length;I+=ae)h.push(an(t,e,{...r,projects:c.slice(I,I+ae)}));return nn(h,r.limit)}let a=r.includeManualSaves?"substr(o.memory_session_id, 1, 7) = 'manual-' OR":"",u=r.excludeSubagents?`AND ${Yr("o")}`:"",m=r.withReinforcementDates?`,
35
35
  o.reinforcement_dates`:"",p=`(? IS NULL OR s.platform_source = ?)
36
36
  ${u}
37
37
  AND (${a} (
@@ -85,7 +85,7 @@ ${y.stack??""}
85
85
  JOIN session_summaries ss ON ss.id = w.id
86
86
  LEFT JOIN sdk_sessions s ON ss.memory_session_id = s.memory_session_id
87
87
  ORDER BY ss.created_at_epoch DESC
88
- `);try{return a.all(...c,o)}finally{a.finalize()}}var tn=200;function gs(t){let e=0;for(let r=0;r<t.length;r++)e=(e<<5)-e+t.charCodeAt(r)|0;return Math.abs(e).toString(36)}function _s(t){let e=t.replace(/[^a-zA-Z0-9]/g,"-");return e.length<=tn?e:`${e.slice(0,tn)}-${gs(t)}`}function Ss(t){if(!/"type"\s*:\s*"assistant"/.test(t))return null;let e=JSON.parse(t);if(e.type==="assistant"&&e.message?.content&&Array.isArray(e.message.content)){let r="";for(let n of e.message.content)n.type==="text"&&(r+=n.text);if(r=r.replace(Yr,"").trim(),r)return r}return null}function hs(t){for(let e=t.length-1;e>=0;e--)try{let r=Ss(t[e]);if(r)return r}catch(r){r instanceof Error?l.debug("WORKER","Skipping malformed transcript line",{lineIndex:e},r):l.debug("WORKER","Skipping malformed transcript line",{lineIndex:e,error:String(r)});continue}return""}function ys(t){try{if(!(0,We.existsSync)(t))return{assistantMessage:""};let e=(0,We.readFileSync)(t,"utf-8").trim();if(!e)return{assistantMessage:""};let r=e.split(`
88
+ `);try{return a.all(...c,o)}finally{a.finalize()}}var tn=200;function gs(t){let e=0;for(let r=0;r<t.length;r++)e=(e<<5)-e+t.charCodeAt(r)|0;return Math.abs(e).toString(36)}function _s(t){let e=t.replace(/[^a-zA-Z0-9]/g,"-");return e.length<=tn?e:`${e.slice(0,tn)}-${gs(t)}`}function Ss(t){if(!/"type"\s*:\s*"assistant"/.test(t))return null;let e=JSON.parse(t);if(e.type==="assistant"&&e.message?.content&&Array.isArray(e.message.content)){let r="";for(let n of e.message.content)n.type==="text"&&(r+=n.text);if(r=r.replace(Gr,"").trim(),r)return r}return null}function hs(t){for(let e=t.length-1;e>=0;e--)try{let r=Ss(t[e]);if(r)return r}catch(r){r instanceof Error?l.debug("WORKER","Skipping malformed transcript line",{lineIndex:e},r):l.debug("WORKER","Skipping malformed transcript line",{lineIndex:e,error:String(r)});continue}return""}function ys(t){try{if(!(0,We.existsSync)(t))return{assistantMessage:""};let e=(0,We.readFileSync)(t,"utf-8").trim();if(!e)return{assistantMessage:""};let r=e.split(`
89
89
  `).filter(o=>o.trim());return{assistantMessage:hs(r)}}catch(e){return e instanceof Error?l.failure("WORKER","Failed to extract prior messages from transcript",{transcriptPath:t},e):l.warn("WORKER","Failed to extract prior messages from transcript",{transcriptPath:t,error:String(e)}),{assistantMessage:""}}}function cn(t,e,r,n){if(!e.showLastMessage||t.length===0)return{assistantMessage:""};let o=t.find(a=>a.memory_session_id!==r&&a.content_session_id!==r);if(!o)return{assistantMessage:""};let i=o.content_session_id??o.memory_session_id,s=_s(n),c=rn.default.join(W,"projects",s,`${i}.jsonl`);return ys(c)}function ln(t,e){let r=e[0]?.id;return t.map((n,o)=>{let i=o===0?null:e[o+1];return{...n,displayEpoch:i?i.created_at_epoch:n.created_at_epoch,displayTime:i?i.created_at:n.created_at,shouldShowLink:n.id!==r}})}function un(t,e){let r=[...t.map(n=>({type:"observation",data:n})),...e.map(n=>({type:"summary",data:n}))];return r.sort((n,o)=>{let i=n.type==="observation"?n.data.created_at_epoch:n.data.displayEpoch,s=o.type==="observation"?o.data.created_at_epoch:o.data.displayEpoch;return i-s}),r}function dn(t,e){return new Set(t.slice(0,e).map(r=>r.id))}var wt=ne(require("path"),1);g();function je(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(r=>typeof r=="string"):[]}catch(e){return l.debug("PARSER","Failed to parse JSON array, using empty fallback",{preview:t?.substring(0,50)},e instanceof Error?e:new Error(String(e))),[]}}function Be(t,e){return Number.isNaN(t.getTime())?"Invalid Date":e(t)}function Rt(t){let e=t.getUTCHours(),r=e<12?"AM":"PM",n=t.getUTCMinutes().toString().padStart(2,"0");return`${e%12||12}:${n} ${r}`}function Dt(t){return t.toISOString().slice(0,10)}function Ke(t,e){try{return t()}catch(r){return l.debug("PARSER","Locale date formatter unavailable, using ISO fallback",{},r instanceof Error?r:new Error(String(r))),e()}}function vt(t){let e=new Date(t);return Ke(()=>e.toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0}),()=>Be(e,r=>`${Dt(r)} ${Rt(r)}`))}function kt(t){let e=new Date(t);return Ke(()=>e.toLocaleString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}),()=>Be(e,Rt))}function pn(t){let e=new Date(t);return Ke(()=>e.toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric"}),()=>Be(e,Dt))}function B(t=new Date){return Ke(()=>{let e=t.toLocaleDateString("en-CA"),r=t.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),n=t.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${r} ${n}`},()=>Be(t,e=>`${Dt(e)} ${Rt(e)} UTC`))}function fn(t,e){return wt.default.isAbsolute(t)?wt.default.relative(e,t):t}function mn(t,e,r){let n=je(t);if(n.length>0)return fn(n[0],e);if(r){let o=je(r);if(o.length>0)return fn(o[0],e)}return"General"}var As=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function q(t,e){let r=String(t);return e.fetchByIdSupported===!1&&As.test(r)?r.slice(0,8):r}function En(){let t=w.getInstance();return`${t.getActiveMode().name} (${t.getActiveModeId()})`}function gn(t,e=B()){return[`# [${t}] recent context, ${e}`,`Mode: ${En()}`,""]}function _n(t=!0){let r=w.getInstance().getActiveMode().observation_types.map(o=>`${o.emoji}${o.id}`).join(" "),n=t?"Fetch details: get_observations([IDs]) | Search: mem-search skill":"Fetch details: observation_search by title (short refs are display-only)";return[`Legend: \u{1F3AF}session ${r}`,"Format: ID TIME TYPE TITLE",n,""]}function Sn(t,e){let r=[],n=[`${t.totalObservations} obs (${t.totalReadTokens.toLocaleString()}t read)`,`${t.totalDiscoveryTokens.toLocaleString()}t work`];return t.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)&&(e.showSavingsPercent?n.push(`${t.savingsPercent}% savings`):e.showSavingsAmount&&n.push(`${t.savings.toLocaleString()}t saved`)),r.push(`Stats: ${n.join(" | ")}`),r.push(""),r}function hn(t){return[`### ${t}`]}function yn(t){return t.toLowerCase().replace(" am","a").replace(" pm","p")}function An(t,e,r){let n=t.title||"Untitled",o=w.getInstance().getTypeIcon(t.type),i=e?yn(e):'"';return`${q(t.id,r)} ${i} ${o} ${n}`}function Tn(t,e,r,n){let o=[],i=t.title||"Untitled",s=w.getInstance().getTypeIcon(t.type),c=e?yn(e):'"',{readTokens:a,discoveryDisplay:u}=Ae(t,n),m=q(t.id,n);o.push(`**${m}** ${c} ${s} **${i}**`),r&&o.push(r);let p=[];return n.showReadTokens&&p.push(`~${a}t`),n.showWorkTokens&&p.push(u),p.length>0&&o.push(p.join(" ")),o.push(""),o}function Cn(t,e,r={}){return[`S${q(t.id,r)} ${t.request||"Session started"} (${e})`]}function ce(t,e){return e?[`**${t}**: ${e}`,""]:[]}function Mn(t){return t.assistantMessage?["","---","","**Previously**","",`A: ${t.assistantMessage}`,""]:[]}function bn(t,e,r=!0){return["",`Access ${Math.round(t/1e3)}k tokens of past work via ${r?"get_observations([IDs]) or mem-search skill":"observation_search"}.`]}function On(t,e=B()){return`# [${t}] recent context, ${e}
90
90
  Mode: ${En()}
91
91
 
@@ -96,7 +96,7 @@ ${f.gray}${"\u2500".repeat(60)}${f.reset}
96
96
 
97
97
  ${f.dim}No previous sessions found for this project yet.${f.reset}
98
98
  `}function Ts(t){return Ne().some(e=>e.name===t)?`${t} (environment)`:t}function Fn(t,e,r,n,o){let i=[],s=r.fetchByIdSupported!==!1,c=Ts(t);return n?i.push(...Rn(c,o)):i.push(...gn(c,o)),n?i.push(...Dn()):i.push(..._n(s)),n&&(i.push(...vn()),i.push(...kn(s))),Fe(r)&&(n?i.push(...In(e,r)):i.push(...Sn(e,r))),i}function Hn(t){let e=new Map;for(let n of t){let o=n.type==="observation"?n.data.created_at:n.data.displayTime,i=pn(o);e.has(i)||e.set(i,[]),e.get(i).push(n)}let r=Array.from(e.entries()).sort((n,o)=>{let i=new Date(n[0]).getTime(),s=new Date(o[0]).getTime();return i-s});return new Map(r)}function Wn(t,e){return e.fullObservationField==="narrative"?t.narrative:t.facts?je(t.facts).join(`
99
- `):null}function Cs(t,e,r,n){let o=[];o.push(...hn(t));let i="";for(let s of e)if(s.type==="summary"){let c=s.data,a=vt(c.displayTime);o.push(...Cn(c,a,n))}else{let c=s.data,a=kt(c.created_at),m=a!==i?a:"";if(i=a,r.has(c.id)){let d=Wn(c,n);o.push(...Tn(c,m,d,n))}else o.push(An(c,m,n))}return o}function jn(t,e,r){let n=[];for(let[o,i]of Hn(t))n.push(...Cs(o,i,e,r));return n}function Bn(t,e,r,n){let o=[];for(let[i,s]of Hn(t)){let c="";for(let a of s){if(a.type==="summary"){c="";let k=a.data;o.push({day:i,file:null,summary:!0,lines:xn(k,vt(k.displayTime),r)});continue}let u=a.data,m=kt(u.created_at),p=m!==c;c=m;let d=mn(u.files_modified,n,u.files_read),E=Wn(u,r),y=e.has(u.id);o.push({day:i,file:d,summary:!1,lines:y?Lt(u,m,p,E,r):[It(u,m,p,r)],linesWithTime:p?void 0:y?Lt(u,m,!0,E,r):[It(u,m,!0,r)]})}}return o}function Je(t){let e=[],r="",n=null,o=!1;for(let i of t)i.day!==r&&(r&&e.push(""),e.push(...Ln(i.day)),r=i.day,n=null,o=!1),i.summary?n=null:i.file!==n&&(e.push(...Pn(i.file)),n=i.file),e.push(...!i.summary&&!o?i.linesWithTime??i.lines:i.lines),i.summary||(o=!0);return r&&e.push(""),e}function Kn(t,e,r){return!(!t.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps||e.notes)||r&&e.created_at_epoch<r.created_at_epoch)}function Yn(t,e){let r=[];return e?(r.push(...le("Investigated",t.investigated,f.blue)),r.push(...le("Learned",t.learned,f.yellow)),r.push(...le("Completed",t.completed,f.green)),r.push(...le("Next Steps",t.next_steps,f.magenta)),r.push(...le("Notes",t.notes??null,f.cyan))):(r.push(...ce("Investigated",t.investigated)),r.push(...ce("Learned",t.learned)),r.push(...ce("Completed",t.completed)),r.push(...ce("Next Steps",t.next_steps)),r.push(...ce("Notes",t.notes??null))),r}function Gn(t,e){return e?Nn(t):Mn(t)}function Jn(t,e,r){return!Fe(e)||t.totalDiscoveryTokens<=0||t.savings<=0?[]:r?Un(t.totalDiscoveryTokens,t.totalReadTokens):bn(t.totalDiscoveryTokens,t.totalReadTokens,e.fetchByIdSupported!==!1)}var X=require("fs"),Ut=require("path");T();T();var Ve=null;function ue(){return Ve!==null||(Ve=O.loadFromFile(G)),Ve}function Pt(t,e){let r=(process.env.CLAUDE_MEM_PUBLIC_URL??e??"").trim();return r?r.replace(/\/+$/,""):`http://localhost:${t}`}function xt(t){let e=(t??"").replace(/\s+/g," ").replace(/[\p{Cc}\p{Cf}]/gu,"").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/ {2,}/g," ").trim(),r=Array.from(e);return r.length>300?`${r.slice(0,299).join("").trimEnd()}\u2026`:e}function Ms(t){return t.hostname==="cmem.ai"||t.hostname==="openrouter.ai"?!0:t.hostname==="github.com"&&/^\/thedotmack\/claude-mem\/issues(\/|$)/.test(t.pathname)}function Nt(t){try{let e=new URL((t??"").trim());if(e.protocol==="https:"&&!e.port&&!e.username&&!e.password&&Ms(e)&&e.href.length<=300)return e.href}catch{}return null}g();var Os="observer-health.json",ws=3,Rs=600,Ds={consecutiveFailures:0,failingSinceAt:null,lastErrorAt:null,lastErrorMessage:null,lastErrorProvider:null,lastSuccessAt:null,lastErrorCode:null,lastErrorAction:null,lastErrorUrl:null,lastErrorRequestId:null,quotaCooldown:null};function vs(){return(0,Ut.join)(A.dataDir(),Os)}var ks=/(["']?\b(?:api[_-]?key|apikey|access[_-]?token|auth[_-]?token|refresh[_-]?token|id[_-]?token|session[_-]?token|client[_-]?secret|secret[_-]?key|secret|password|passwd|pwd|authorization|auth|token|key)\b["']?\s*[=:]\s*)(["']?)([^\s"'&,;}\]]+)\2/gi;function $t(t){return t.replace(/\bsk-[A-Za-z0-9_-]{8,}/g,"sk-\u2026").replace(/\bcm_pro_[A-Za-z0-9_-]{8,}/g,"cm_pro_\u2026").replace(/\b(Bearer|Basic|Digest|Token)\s+[^\s"']+/gi,"$1 \u2026").replace(ks,(e,r,n,o)=>/^\d+$/.test(o)?e:`${r}${n}\u2026${n}`).slice(0,Rs)}function Xn(t=vs()){try{if(!(0,X.existsSync)(t))return null;let e=JSON.parse((0,X.readFileSync)(t,"utf-8"));return typeof e!="object"||e===null?null:{...Ds,...e}}catch(e){return l.warn("SESSION","Failed to read observer-health file",{filePath:t},e instanceof Error?e:new Error(String(e))),null}}function zn(t){return t!==null&&(t.consecutiveFailures>=ws||Qn(t)||Ps(t))&&(t.lastErrorAt??0)>(t.lastSuccessAt??0)}function de(t){let e=Math.max(1,Math.round(t/6e4));if(e<60)return`${e} minute${e===1?"":"s"}`;let r=Math.round(e/60);return r<48?`about ${r} hour${r===1?"":"s"}`:`about ${Math.round(r/24)} days`}function Is(){let t=ue();return`${Pt(t.CLAUDE_MEM_WORKER_PORT,t.CLAUDE_MEM_PUBLIC_URL)}/restart`}function Ft(t){return t.lastErrorKind==="quota_exhausted"}function Me(t){return t.lastErrorKind==="quota_guard"}var Ls="Provider reported the inference allowance exhausted";function Vn(t){return Ft(t)&&t.lastErrorMessage===Ls}function Qn(t){return t.lastErrorKind==="auth_invalid"}function Ps(t){return t.lastErrorKind==="setup_required"}var Zn=30*6e4;function eo(t,e){let r=t.lastErrorAt;return r!==null&&e-r>=Zn}function xs(t,e=Date.now()){return(Ft(t)||Me(t))&&eo(t,e)}function Ns(t,e=Date.now()){return t.lastErrorCode==="deadline_exceeded"&&eo(t,e)}function to(t,e=Date.now()){let r=t?.quotaCooldown;return r!=null&&typeof r.until=="number"&&r.until>e}function ro(t,e=Date.now()){let r=t.quotaCooldown,n=r?.provider??"unknown provider",o=r?.until,i=o?`${new Date(o).toISOString()} (${de(Math.max(0,o-e))} from now)`:"the next probe window",s=r?.window?` (${r.window})`:"";if(r?.servingProvider)return`\u2139\uFE0F claude-mem's ${n} provider is in a quota cooldown${s}; memory capture continues on ${r.servingProvider} until it clears at ${i}.`;let c=be(r?.message)||null,a=Me(t);return["\u26A0\uFE0F Heads up: claude-mem is paused while a provider quota cooldown is active.","",a?`Memory capture is paused on ${n}${s} to preserve your Claude allowance, until ${i}.`:`The memory observer is waiting out a quota cooldown on ${n}${s} until ${i}.`,"",...c?[`${a?"Reason":"Latest signal"}: ${c}`,""]:[],"This is not a failure. Incoming observations stay queued in memory and are written","when the cooldown clears \u2014 the worker is intentionally not starting the generator",a?"so interactive work keeps the remaining allowance.":"so it does not keep sending requests the provider is refusing.","","Restarting will NOT help here: it does not replenish the allowance or clear the","persisted cooldown \u2014 so please leave the worker alone.","","(Assistant: tell the user that memory capture is paused for a quota cooldown","at the very start of your first reply. Do NOT restart the worker and do NOT","suggest restarting it.)"].join(`
99
+ `):null}function Cs(t,e,r,n){let o=[];o.push(...hn(t));let i="";for(let s of e)if(s.type==="summary"){let c=s.data,a=vt(c.displayTime);o.push(...Cn(c,a,n))}else{let c=s.data,a=kt(c.created_at),m=a!==i?a:"";if(i=a,r.has(c.id)){let d=Wn(c,n);o.push(...Tn(c,m,d,n))}else o.push(An(c,m,n))}return o}function jn(t,e,r){let n=[];for(let[o,i]of Hn(t))n.push(...Cs(o,i,e,r));return n}function Bn(t,e,r,n){let o=[];for(let[i,s]of Hn(t)){let c="";for(let a of s){if(a.type==="summary"){c="";let k=a.data;o.push({day:i,file:null,summary:!0,lines:xn(k,vt(k.displayTime),r)});continue}let u=a.data,m=kt(u.created_at),p=m!==c;c=m;let d=mn(u.files_modified,n,u.files_read),E=Wn(u,r),y=e.has(u.id);o.push({day:i,file:d,summary:!1,lines:y?Lt(u,m,p,E,r):[It(u,m,p,r)],linesWithTime:p?void 0:y?Lt(u,m,!0,E,r):[It(u,m,!0,r)]})}}return o}function Je(t){let e=[],r="",n=null,o=!1;for(let i of t)i.day!==r&&(r&&e.push(""),e.push(...Ln(i.day)),r=i.day,n=null,o=!1),i.summary?n=null:i.file!==n&&(e.push(...Pn(i.file)),n=i.file),e.push(...!i.summary&&!o?i.linesWithTime??i.lines:i.lines),i.summary||(o=!0);return r&&e.push(""),e}function Kn(t,e,r){return!(!t.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps||e.notes)||r&&e.created_at_epoch<r.created_at_epoch)}function Gn(t,e){let r=[];return e?(r.push(...le("Investigated",t.investigated,f.blue)),r.push(...le("Learned",t.learned,f.yellow)),r.push(...le("Completed",t.completed,f.green)),r.push(...le("Next Steps",t.next_steps,f.magenta)),r.push(...le("Notes",t.notes??null,f.cyan))):(r.push(...ce("Investigated",t.investigated)),r.push(...ce("Learned",t.learned)),r.push(...ce("Completed",t.completed)),r.push(...ce("Next Steps",t.next_steps)),r.push(...ce("Notes",t.notes??null))),r}function Yn(t,e){return e?Nn(t):Mn(t)}function Jn(t,e,r){return!Fe(e)||t.totalDiscoveryTokens<=0||t.savings<=0?[]:r?Un(t.totalDiscoveryTokens,t.totalReadTokens):bn(t.totalDiscoveryTokens,t.totalReadTokens,e.fetchByIdSupported!==!1)}var X=require("fs"),Ut=require("path");T();T();var Ve=null;function ue(){return Ve!==null||(Ve=O.loadFromFile(Y)),Ve}function Pt(t,e){let r=(process.env.CLAUDE_MEM_PUBLIC_URL??e??"").trim();return r?r.replace(/\/+$/,""):`http://localhost:${t}`}function xt(t){let e=(t??"").replace(/\s+/g," ").replace(/[\p{Cc}\p{Cf}]/gu,"").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/ {2,}/g," ").trim(),r=Array.from(e);return r.length>300?`${r.slice(0,299).join("").trimEnd()}\u2026`:e}function Ms(t){return t.hostname==="cmem.ai"||t.hostname==="openrouter.ai"?!0:t.hostname==="github.com"&&/^\/thedotmack\/claude-mem\/issues(\/|$)/.test(t.pathname)}function Nt(t){try{let e=new URL((t??"").trim());if(e.protocol==="https:"&&!e.port&&!e.username&&!e.password&&Ms(e)&&e.href.length<=300)return e.href}catch{}return null}g();var Os="observer-health.json",ws=3,Rs=600,Ds={consecutiveFailures:0,failingSinceAt:null,lastErrorAt:null,lastErrorMessage:null,lastErrorProvider:null,lastSuccessAt:null,lastErrorCode:null,lastErrorAction:null,lastErrorUrl:null,lastErrorRequestId:null,quotaCooldown:null};function vs(){return(0,Ut.join)(A.dataDir(),Os)}var ks=/(["']?\b(?:api[_-]?key|apikey|access[_-]?token|auth[_-]?token|refresh[_-]?token|id[_-]?token|session[_-]?token|client[_-]?secret|secret[_-]?key|secret|password|passwd|pwd|authorization|auth|token|key)\b["']?\s*[=:]\s*)(["']?)([^\s"'&,;}\]]+)\2/gi;function $t(t){return t.replace(/\bsk-[A-Za-z0-9_-]{8,}/g,"sk-\u2026").replace(/\bcm_pro_[A-Za-z0-9_-]{8,}/g,"cm_pro_\u2026").replace(/\b(Bearer|Basic|Digest|Token)\s+[^\s"']+/gi,"$1 \u2026").replace(ks,(e,r,n,o)=>/^\d+$/.test(o)?e:`${r}${n}\u2026${n}`).slice(0,Rs)}function Xn(t=vs()){try{if(!(0,X.existsSync)(t))return null;let e=JSON.parse((0,X.readFileSync)(t,"utf-8"));return typeof e!="object"||e===null?null:{...Ds,...e}}catch(e){return l.warn("SESSION","Failed to read observer-health file",{filePath:t},e instanceof Error?e:new Error(String(e))),null}}function zn(t){return t!==null&&(t.consecutiveFailures>=ws||Qn(t)||Ps(t))&&(t.lastErrorAt??0)>(t.lastSuccessAt??0)}function de(t){let e=Math.max(1,Math.round(t/6e4));if(e<60)return`${e} minute${e===1?"":"s"}`;let r=Math.round(e/60);return r<48?`about ${r} hour${r===1?"":"s"}`:`about ${Math.round(r/24)} days`}function Is(){let t=ue();return`${Pt(t.CLAUDE_MEM_WORKER_PORT,t.CLAUDE_MEM_PUBLIC_URL)}/restart`}function Ft(t){return t.lastErrorKind==="quota_exhausted"}function Me(t){return t.lastErrorKind==="quota_guard"}var Ls="Provider reported the inference allowance exhausted";function Vn(t){return Ft(t)&&t.lastErrorMessage===Ls}function Qn(t){return t.lastErrorKind==="auth_invalid"}function Ps(t){return t.lastErrorKind==="setup_required"}var Zn=30*6e4;function eo(t,e){let r=t.lastErrorAt;return r!==null&&e-r>=Zn}function xs(t,e=Date.now()){return(Ft(t)||Me(t))&&eo(t,e)}function Ns(t,e=Date.now()){return t.lastErrorCode==="deadline_exceeded"&&eo(t,e)}function to(t,e=Date.now()){let r=t?.quotaCooldown;return r!=null&&typeof r.until=="number"&&r.until>e}function ro(t,e=Date.now()){let r=t.quotaCooldown,n=r?.provider??"unknown provider",o=r?.until,i=o?`${new Date(o).toISOString()} (${de(Math.max(0,o-e))} from now)`:"the next probe window",s=r?.window?` (${r.window})`:"";if(r?.servingProvider==="claude"){let u=r.window==="unavailable"?"is unavailable":r.window==="rate_limit"?"is rate limited or over capacity":`is in a quota cooldown${s}`;return`\u2139\uFE0F claude-mem's ${n} provider ${u}; memory is running on your Anthropic plan (Claude) meanwhile, and switches back after ${i}.`}if(r?.servingProvider)return`\u2139\uFE0F claude-mem's ${n} provider is in a quota cooldown${s}; memory capture continues on ${r.servingProvider} until it clears at ${i}.`;let c=be(r?.message)||null,a=Me(t);return["\u26A0\uFE0F Heads up: claude-mem is paused while a provider quota cooldown is active.","",a?`Memory capture is paused on ${n}${s} to preserve your Claude allowance, until ${i}.`:`The memory observer is waiting out a quota cooldown on ${n}${s} until ${i}.`,"",...c?[`${a?"Reason":"Latest signal"}: ${c}`,""]:[],"This is not a failure. Incoming observations stay queued in memory and are written","when the cooldown clears \u2014 the worker is intentionally not starting the generator",a?"so interactive work keeps the remaining allowance.":"so it does not keep sending requests the provider is refusing.","","Restarting will NOT help here: it does not replenish the allowance or clear the","persisted cooldown \u2014 so please leave the worker alone.","","(Assistant: tell the user that memory capture is paused for a quota cooldown","at the very start of your first reply. Do NOT restart the worker and do NOT","suggest restarting it.)"].join(`
100
100
  `)}function be(t){return t?xt($t(t)):""}function qe(t,e){let r=Nt(t.lastErrorUrl),n=xt(t.lastErrorRequestId);return[`Latest error: ${be(t.lastErrorMessage)||"unknown"}`,...e?[`What to do: ${e}`]:[],...r?[`Link: ${r}`]:[],...n?[`Request id: ${n}`]:[]]}function qn(t,e,r,n){let o=t.lastErrorProvider??"unknown provider",i=t.lastErrorAt?de(e-t.lastErrorAt):"an unknown time",s=Nt(t.lastErrorUrl);return[`\u2139\uFE0F claude-mem: the memory observer last failed with ${n.failedWith} on`,`${o}, ${i} ago. Nothing has re-tested it since \u2014 the health ledger only`,"updates on the next successful save, which happens after this message is written.","",`Last error: ${be(t.lastErrorMessage)||"unknown"}`,...r?[`${n.remedyLabel}: ${r}`]:[],...s?[`Link: ${s}`]:[],"",`${n.recovery}, so memory capture may already be working. If it is`,"not, the next failed save brings the full warning back.","","(Assistant: do not open your reply with this. Mention it only if the user asks why","something was not remembered, or if a later message reports a save failing.)"].join(`
101
101
  `)}function no(t,e=Date.now()){let r=t.failingSinceAt??t.lastErrorAt,n=r?`for ${de(e-r)} (since ${new Date(r).toISOString()})`:"for an unknown amount of time",o=t.lastErrorProvider??"unknown provider",i=t.consecutiveFailures,s=be(t.lastErrorAction)||null;if(xs(t,e)){let a=Me(t)||Vn(t);return qn(t,e,s,a?{failedWith:"a usage-related pause",remedyLabel:"If it is still paused",recovery:"Usage pauses release on their own"}:{failedWith:"a spent allowance",remedyLabel:"If it is still spent",recovery:"Allowances reset on their own"})}if(Ns(t,e))return qn(t,e,s,{failedWith:"requests running past their deadline",remedyLabel:"If it is still slow",recovery:"A slow backend usually recovers on its own"});if(Me(t)||Vn(t)){let a=Me(t);return["\u26A0\uFE0F Heads up: claude-mem memory capture is paused.","",a?`Memory capture is paused to preserve your Claude allowance (${n}).`:`The memory observer has a usage-related pause on ${o} (${n}).`,"",a?`Reason: ${be(t.lastErrorMessage)||"Precautionary usage guard"}`:"This record cannot tell a precautionary pause from a provider rejection.","","Existing memories remain available; new memory generation is paused.",`After the ${Zn/6e4}-minute cooldown, the next activity can trigger one retry.`,"Capture resumes when usage is below the guard thresholds and the provider accepts requests.",o==="claude"?"Check Claude Settings \u2192 Usage for the current usage and reset time.":`Check ${o} usage settings for the current allowance and reset time.`,"","Restarting does not replenish allowance or clear the persisted cooldown.","","(Assistant: tell the user about this pause at the start of your first reply.","Relay the reason accurately; do not call a precautionary pause provider exhaustion.","Do NOT restart the worker or change providers to bypass the pause.)"].join(`
102
102
  `)}return Ft(t)?["\u26A0\uFE0F Heads up: claude-mem can't save memories right now.","",`The memory observer's allowance on ${o} is used up (since ${n.replace(/^for .*?\(since /,"").replace(/\)$/,"")}).`,"",...qe(t,s),"","Until the allowance resets or you add capacity, nothing from this session \u2014 or any","other \u2014 will be remembered.","","Restarting will NOT help here: it does not replenish the allowance or clear the","persisted cooldown \u2014 so please leave the worker alone.",...s?[]:["Switch the observer to another provider in ~/.claude-mem/settings.json if you need","memory capture before the allowance resets."],"","(Assistant: tell the user about this outage at the very start of your first reply,","quoting the error above. Do NOT restart the worker and do NOT suggest restarting it.)"].join(`
@@ -104,14 +104,14 @@ ${f.dim}No previous sessions found for this project yet.${f.reset}
104
104
  `):Qn(t)?["\u26A0\uFE0F Heads up: claude-mem can't save memories right now.","",`The memory observer's credentials have been refused by ${o} ${n}.`,"",...qe(t,s),"","Until that's fixed, nothing from this session \u2014 or any other \u2014 will be remembered.","","Restarting will NOT help here: the provider refused the credentials, so nothing is broken to restart.",...s?[]:["Check the observer provider's API key in ~/.claude-mem/settings.json, or switch the","observer to another provider there."],"","(Assistant: tell the user about this outage at the very start of your first reply,","quoting the error above. Do NOT restart the worker and do NOT suggest restarting it.)"].join(`
105
105
  `):["\u26A0\uFE0F Heads up: claude-mem can't save memories right now.","",`The memory observer (provider: ${o}) has failed ${i} time${i===1?"":"s"} in a row ${n}.`,"",...qe(t,s),"","Until it's fixed, nothing from this session \u2014 or any other \u2014 will be remembered.","","Restarting the memory worker clears almost every outage. Do one of these:",` Click to restart: ${Is()}`," Or in a terminal: npx claude-mem restart","","Still failing after the restart? Run: npx claude-mem doctor",...s?[]:["If doctor comes back clean, check the observer provider's API key, spend limit, and base","URL in ~/.claude-mem/settings.json. The error above may include a management link."],"","(Assistant: tell the user about this outage at the very start of your first reply,","quoting the error above, and give them the restart link \u2014 let them press it rather","than restarting the worker yourself.)"].join(`
106
106
  `)}T();g();var lo=require("crypto");var uo=require("path");g();T();var io=require("child_process"),so=require("util");T();g();var _u=(0,so.promisify)(io.execFile);function ao(t){let e=t?.trim();return oo(e?cr(e):W)}function oo(t){let e=t.replace(/[/\\]+$/,"");return e.length>0?e:t}function co(t){let e=ao(t),r=t?.trim()?e!==ut:!!process.env.CLAUDE_CONFIG_DIR;return{configDir:e,explicitConfigDir:r}}function Us(t){if(!t.explicitConfigDir)return"default";let e=(0,lo.createHash)("sha256").update(t.configDir.normalize("NFC")).digest("hex").slice(0,8);return`${(0,uo.basename)(t.configDir)}#${e}`}function fo(){let t=O.loadFromFile(A.settings());return Us(co(t.CLAUDE_MEM_CLAUDE_CONFIG_DIR))}var $s=fo;function po(t){return t.provider!=="claude"||t.profile===$s()}var Lu=30*6e4;var Pu=5*6e4;var z=require("fs"),Eo=require("path");T();g();var Fs="sync-health.json",Hs=900*1e3,Ws=5,mo={invalid_token:"Cloud sync is paused: this device's sync token is no longer valid (connecting another machine can rotate it). Reconnect at https://cmem.ai (Connect), then restart claude-mem. Your local memories are safe.",subscription_inactive:"Cloud sync is paused: your CMEM Pro trial or subscription is not active. Renew at https://cmem.ai/pro and sync resumes on its own within the hour. Your local memories are safe."};function js(){return(0,Eo.join)(A.dataDir(),Fs)}function go(t=js()){try{if(!(0,z.existsSync)(t))return null;let e=JSON.parse((0,z.readFileSync)(t,"utf-8"));if(!e||typeof e!="object"||Array.isArray(e))return null;let r=e;return r.state!=="ok"&&r.state!=="auth_paused"&&r.state!=="failing"?null:{state:r.state,code:typeof r.code=="string"?r.code:null,message:typeof r.message=="string"?r.message:null,consecutiveFailures:typeof r.consecutiveFailures=="number"?r.consecutiveFailures:0,failingSinceAt:typeof r.failingSinceAt=="number"?r.failingSinceAt:null,lastErrorAt:typeof r.lastErrorAt=="number"?r.lastErrorAt:null,lastSuccessAt:typeof r.lastSuccessAt=="number"?r.lastSuccessAt:null,updatedAt:typeof r.updatedAt=="number"?r.updatedAt:0}}catch{return null}}function Bs(t,e=Date.now()){return t?t.state==="auth_paused"?!0:t.state!=="failing"?!1:t.consecutiveFailures>=Ws?!0:t.failingSinceAt!==null&&e-t.failingSinceAt>=Hs:!1}function _o(t,e=Date.now()){if(!Bs(t,e))return"";if(t.state==="auth_paused")return`\u26A0 ${t.code==="subscription_inactive"||t.code==="invalid_token"?mo[t.code]:t.message??mo.invalid_token}`;let r=t.failingSinceAt!==null?` for ${de(e-t.failingSinceAt)}`:"",n=t.message?` Last error: ${$t(t.message)}`:"";return[`\u26A0 Cloud sync has been failing${r} (${t.consecutiveFailures} attempt${t.consecutiveFailures===1?"":"s"}). New memories are saved locally and queued; they upload once the sync server accepts them.`+n,"Details: /api/sync/status on the claude-mem worker."].join(`
107
- `)}g();g();T();var re=require("fs");g();var Ks=new Set([".cmd",".bat"]),Ys=new Set([".exe",".com"]),Ku=new Set([...Ys,...Ks]);var Oe=require("fs"),Mo=ne(require("path"),1);g();U();var Gs=["CLAUDECODE_","CLAUDE_CODE_"],Js=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),Vs=new Set(["HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy","npm_config_noproxy"]),qs=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_TMPDIR","CLAUDE_CODE_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...Vs]);function fe(t=process.env){let e={};for(let[r,n]of Object.entries(t))if(n!==void 0){if(qs.has(r)){e[r]=n;continue}Js.has(r)||Gs.some(o=>r.startsWith(o))||(e[r]=n)}return e}T();var Wt=require("child_process"),ho=require("fs");g();var Xs=5e3,So=new Map,Ht=0;function yo(t,e,r){if(r.status!==0)return null;if(typeof r.stdout!="string")return l.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:t,status:r.status}),null;let n=r.stdout.trim();return n.length>0?n:null}function zs(t){Ht+=1;let e=(0,Wt.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...fe(process.env),LC_ALL:"C",LANG:"C"}});return yo("powershell-cim",t,e)}function Qs(t,e=!1){if(!e){let n=So.get(t);if(n&&(t===process.pid||Date.now()-n.capturedAtMs<Xs))return n.token}let r=null;try{r=zs(t)}catch(n){l.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:n instanceof Error?n.message:String(n)}),r=null}return(r!==null||t!==process.pid)&&So.set(t,{token:r,capturedAtMs:Date.now()}),r}function Ao(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){Ht+=1;try{let r=(0,ho.readFileSync)(`/proc/${t}/stat`,"utf-8"),n=r.lastIndexOf(") ");if(n<0)return null;let i=r.slice(n+2).split(" ")[19];return i&&/^\d+$/.test(i)?i:null}catch(r){return l.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}if(process.platform==="win32")return Qs(t,e);Ht+=1;try{let r=(0,Wt.spawnSync)("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...fe(process.env),LC_ALL:"C",LANG:"C"}});return yo("ps-lstart",t,r)}catch(r){return l.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}function K(t){return Ao(t,!1)}function F(t,e){if(e===null)return!0;let r=Ao(t,!0);return r===null?!0:r===e}var To=require("child_process"),Qe=require("fs"),Co=require("util");g();var jt=(0,Co.promisify)(To.execFile),Zs=128,ea=/not found|no running instance|no tasks/i,Xe=class extends Error{pid;constructor(e,r,n){super(r,n),this.name="ProcessTreeKillError",this.pid=e}};async function H(t,e={}){let r=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:K(t),o=()=>F(t,n);if(!o()){l.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:t});return}if(l.debug("PROCESS",`Killing process tree rooted at PID ${t}`,{immediate:r}),process.platform==="win32"){try{await jt("taskkill",["/PID",String(t),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(i){let s=i.code,c=String(i.stderr??""),a=i instanceof Error?i.message:String(i);if(s===Zs||ea.test(`${c} ${a}`)){l.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new Xe(t,`taskkill failed for PID ${t} (exit ${String(s)}): ${c.trim()||a}`,{cause:i})}return}try{let i=r?"SIGKILL":"SIGTERM",s=await ze(t);for(let u of s){if(!F(u.pid,u.startToken)){l.debug("PROCESS",`Skipping ${i}: descendant PID was reused since enumeration`,{pid:u.pid,rootPid:t});continue}try{process.kill(u.pid,i)}catch{}}if(o())try{process.kill(t,i)}catch(u){let m=u instanceof Error?u:new Error(String(u)),p=m.code;p!=="ESRCH"&&l.debug("PROCESS",`Failed to ${i} PID ${t}`,{code:p},m)}else l.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:t,signal:i});r||await new Promise(u=>setTimeout(u,500));let c=o()?await ze(t):[],a=new Map;for(let u of s)a.set(u.pid,u.startToken);for(let u of c)a.set(u.pid,u.startToken);for(let[u,m]of a){if(!F(u,m)){l.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:u,rootPid:t});continue}try{process.kill(u,"SIGKILL")}catch{}}if(!r&&o())try{process.kill(t,"SIGKILL")}catch{}}catch(i){throw new Xe(t,`tree-kill failed for PID ${t}: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}async function ta(){return process.platform==="win32"?oa():process.platform==="linux"?ra():na()}function ra(){let t=[],e;try{e=(0,Qe.readdirSync)("/proc")}catch(r){return l.warn("PROCESS","Cannot read /proc \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),t}for(let r of e){if(!/^\d+$/.test(r))continue;let n;try{n=(0,Qe.readFileSync)(`/proc/${r}/stat`,"utf-8")}catch{continue}let o=n.lastIndexOf(") ");if(o<0)continue;let i=n.slice(o+2).split(" "),s=Number.parseInt(i[1]??"",10),c=i[19];Number.isFinite(s)&&t.push({pid:Number.parseInt(r,10),ppid:s,startToken:c&&/^\d+$/.test(c)?c:null})}return t}async function na(){let t;try{t=(await jt("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(r){return l.warn("PROCESS","Cannot enumerate the process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(`
108
- `)){let n=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let o=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:o.length>0?o:null})}return e}async function oa(){let t;try{t=(await jt("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Csv -NoTypeInformation"],{timeout:3e4,windowsHide:!0,maxBuffer:33554432})).stdout}catch(r){return l.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(/\r?\n/).slice(1)){let n=r.match(/^"(\d+)","(\d+)","(.*)"$/);if(!n)continue;let o=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:o.length>0?o:null})}return e}async function ze(t){let e=await ta(),r=new Map;for(let s of e){let c=r.get(s.ppid);c?c.push(s):r.set(s.ppid,[s])}let n=new Set([t]),o=[],i=s=>{for(let c of r.get(s)??[])n.has(c.pid)||(n.add(c.pid),i(c.pid),o.push({pid:c.pid,startToken:c.startToken}))};return i(t),o}var aa=5e3,ca=1e3,la=A.supervisorRegistry(),ua=null;function R(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(l.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return l.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function Ze(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(n=>!R(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function bo(t){if(!t||!R(t.pid))return!1;if(!t.startToken)return!0;let e=K(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||l.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}var da={platform:process.platform,readCommandLine:t=>(0,Oe.readFileSync)(`/proc/${t}/cmdline`,"utf-8")};function Gt(t,e=da){if(!bo(t))return!1;if(t.startToken||e.platform!=="linux")return!0;let r;try{r=e.readCommandLine(t.pid)}catch(o){return l.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:t.pid,error:o instanceof Error?o.message:String(o)}),!0}let n=r.split("\0").some(o=>Mo.default.basename(o)==="worker-service.cjs");return n||l.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:t.pid}),n}var Yt=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=la){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!(0,Oe.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,Oe.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[o,i]of Object.entries(n))this.entries.set(o,i)}catch(r){r instanceof Error?l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&l.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}retainSupersededEntry(e,r){let n=this.entries.get(e);if(!n||n.pid===r||!R(n.pid))return;let o=`${e}#superseded:${n.pid}`;this.entries.set(o,n);let i=this.runtimeProcesses.get(e);i&&(this.runtimeProcesses.set(o,i),this.runtimeProcesses.delete(e)),l.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:o,supersededPid:n.pid,incomingPid:r})}register(e,r,n){this.initialize(),this.retainSupersededEntry(e,r.pid),this.entries.set(e,r),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e,r){this.initialize();let n=e,o=this.entries.get(n);r!==void 0&&o?.pid!==r&&(n=`${e}#superseded:${r}`,o=this.entries.get(n),o?.pid!==r)||o&&(this.entries.delete(n),this.runtimeProcesses.delete(n),this.persist(),o?.type==="sdk"&&Kt())}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let n=Date.parse(e.startedAt),o=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(o)?0:o)})}getBySession(e){let r=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,r=0;for(let[n,o]of this.entries)R(o.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,o.type==="sdk"&&(r+=1));e>0&&this.persist();for(let n=0;n<r;n+=1)Kt();return e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;l.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:n,pids:r.map(c=>c.pid)});let o=r.filter(c=>R(c.pid)),i=new Map(o.map(c=>[c.pid,K(c.pid)]));for(let c of o)try{process.platform==="win32"?await H(c.pid,{expectedStartToken:i.get(c.pid)??null}):typeof c.pgid=="number"?process.kill(-c.pgid,"SIGTERM"):process.kill(c.pid,"SIGTERM")}catch(a){a instanceof Error?a.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGTERM session process PID ${c.pid}`,{pid:c.pid,pgid:c.pgid},a):l.warn("SYSTEM",`Failed to SIGTERM session process PID ${c.pid} (non-Error)`,{pid:c.pid,pgid:c.pgid,error:String(a)})}await Ze(o,aa);let s=o.filter(c=>R(c.pid));for(let c of s){l.warn("SYSTEM",`Session process PID ${c.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:c.pid,pgid:c.pgid,sessionId:n});let a=i.get(c.pid)??null;if(!F(c.pid,a)){l.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:c.pid,sessionId:n});continue}try{process.platform==="win32"?await H(c.pid,{expectedStartToken:a}):typeof c.pgid=="number"?process.kill(-c.pgid,"SIGKILL"):process.kill(c.pid,"SIGKILL")}catch(u){u instanceof Error?u.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGKILL session process PID ${c.pid}`,{pid:c.pid,pgid:c.pgid},u):l.warn("SYSTEM",`Failed to SIGKILL session process PID ${c.pid} (non-Error)`,{pid:c.pid,pgid:c.pgid,error:String(u)})}}if(s.length>0){let c=Date.now()+ca;for(;Date.now()<c&&s.filter(u=>R(u.pid)).length!==0;)await new Promise(u=>setTimeout(u,100))}for(let c of r)this.entries.delete(c.id),this.runtimeProcesses.delete(c.id);this.persist();for(let c of r)c.type==="sdk"&&Kt();return l.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:n,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};try{P(this.registryPath,e),this.persistDegraded=!1}catch(r){this.reportPersistFailure(r)}}reportPersistFailure(e){if(this.persistDegraded)return;this.persistDegraded=!0;let r=e instanceof Error?e:new Error(String(e));l.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},r);try{ua?.({errorCategory:r.code??"unknown"})}catch{}}},Bt=null;function et(){return Bt||(Bt=new Yt),Bt}var ld=180*1e3,fa=[];function Kt(){let t=fa.shift();t&&t.notify()}var pe=require("fs");g();T();var pa=A.workerPid();async function wo(t){let e=t.currentPid??process.pid,r=t.pidFilePath??pa,n=t.registry.getAll(),o=[...n].filter(a=>a.pid!==e).sort((a,u)=>Date.parse(u.startedAt)-Date.parse(a.startedAt)),i=new Map,s=new Map;for(let a of o){if(!R(a.pid)){t.registry.unregister(a.id);continue}s.set(a.id,K(a.pid)),i.set(a.id,await ze(a.pid));try{await Oo(a,"SIGTERM")}catch(u){u instanceof Error?l.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:a.pid,pgid:a.pgid,type:a.type},u):l.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:a.pid,pgid:a.pgid,type:a.type,error:String(u)})}}await Ze(o,5e3);let c=o.filter(a=>R(a.pid)||(i.get(a.id)??[]).some(u=>R(u.pid)));for(let a of c){let u=F(a.pid,s.get(a.id)??null);u||l.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:a.pid,type:a.type});try{u&&await Oo(a,"SIGKILL")}catch(m){m instanceof Error?l.debug("SYSTEM","Failed to force kill child process",{pid:a.pid,pgid:a.pgid,type:a.type},m):l.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:a.pid,pgid:a.pgid,type:a.type,error:String(m)})}finally{ma(i.get(a.id)??[],a.pid)}}await Ze(c,1e3);for(let a of o)t.registry.unregister(a.id);for(let a of n.filter(u=>u.pid===e))t.registry.unregister(a.id);Ro(r,e),t.registry.pruneDeadEntries()}function Ro(t,e,r=!1){if(!(0,pe.existsSync)(t))return;let n=null;try{let s=JSON.parse((0,pe.readFileSync)(t,"utf-8"));n=typeof s.pid=="number"?s.pid:null}catch(s){l.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:t,error:s instanceof Error?s.message:String(s)});return}let o=e!==null&&n===e,i=n===null||!R(n);if(!o&&!(r&&i)){l.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:t,recordedPid:n,currentPid:e});return}try{(0,pe.rmSync)(t,{force:!0})}catch(s){s instanceof Error?l.debug("SYSTEM","Failed to remove PID file",{pidFilePath:t},s):l.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:t,error:String(s)})}}function ma(t,e){for(let{pid:r,startToken:n}of t)if(!(r===e||!R(r))){if(!F(r,n)){l.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:r,rootPid:e});continue}try{process.kill(r,"SIGKILL"),l.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:r,rootPid:e})}catch(o){let i=o instanceof Error?o.code:void 0;i!=="ESRCH"&&l.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:r,rootPid:e,errno:i})}}}async function Oo(t,e){let{pid:r,pgid:n}=t;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(o){if((o instanceof Error?o.code:void 0)!=="ESRCH")throw o}if(e==="SIGKILL"){await H(r,{signalMode:"immediate"});return}try{process.kill(r,e)}catch(o){if((o instanceof Error?o.code:void 0)!=="ESRCH")throw o}return}await H(r)}g();var Do=3e4,me=null;function Ea(){let e=et().pruneDeadEntries();e>0&&l.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function vo(){me===null&&(me=setInterval(Ea,Do),me.unref(),l.debug("SYSTEM","Health checker started",{intervalMs:Do}))}function ko(){me!==null&&(clearInterval(me),me=null,l.debug("SYSTEM","Health checker stopped"))}var Io=require("child_process"),Lo=require("util");g();var ga=(0,Lo.promisify)(Io.execFile),_a=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function Sa(t){let e=[];for(let r of t.split(`
109
- `)){let n=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function ha(){let t=await ga("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return Sa(t.stdout)}function ya(t,e){let r=t.filter(s=>_a.test(s.command)&&s.pid!==e.selfPid),n=new Set(r.map(s=>s.pid)),o=r.filter(s=>!n.has(s.ppid)),i=o.filter(s=>s.ppid===e.selfPid?!1:s.ppid===1?!0:!e.isAlive(s.ppid));return{matched:r,roots:o,orphans:i}}async function Po(t={}){let e=t.platform??process.platform,r={matched:0,trees:0,orphans:0,killed:0,failed:0,unregistered:0,skipped:null};if(e==="win32")return r.skipped="windows",r;let n=t.readTable??ha,o=t.isAlive??R,i=t.killTree??(E=>H(E,{signalMode:"graceful"})),s=t.selfPid??process.pid,c;try{c=await n()}catch(E){return l.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:E instanceof Error?E.message:String(E)}),r.skipped="unreadable",r}let{matched:a,roots:u,orphans:m}=ya(c,{isAlive:o,selfPid:s});if(r.matched=a.length,r.trees=u.length,r.orphans=m.length,m.length===0)return l.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:r.matched,trees:r.trees}),r;l.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:m.length,roots:m.map(E=>E.pid)});let p=new Set,d=8;for(let E=0;E<m.length;E+=d){let y=m.slice(E,E+d);(await Promise.allSettled(y.map(h=>i(h.pid)))).forEach((h,I)=>{let L=y[I];h.status==="fulfilled"?(r.killed+=1,p.add(L.pid)):(r.failed+=1,l.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:L.pid,ppid:L.ppid,error:h.reason instanceof Error?h.reason.message:String(h.reason)}))})}if(t.registry)for(let E of t.registry.getAll())E.type==="chroma"&&p.has(E.pid)&&(t.registry.unregister(E.id),r.unregistered+=1);return l.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:r.orphans,killed:r.killed,failed:r.failed,unregistered:r.unregistered}),r}T();var Aa=A.workerPid(),Jt=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),No({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Po({registry:this.registry}).catch(r=>{l.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:r instanceof Error?r.message:String(r)})}),vo()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){l.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,l.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(o){o instanceof Error?l.error("SYSTEM","Error during shutdown",{},o):l.error("SYSTEM","Error during shutdown (non-Error)",{error:String(o)});try{await this.stop()}catch(i){i instanceof Error?l.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):l.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{l.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}ko(),this.stopPromise=wo({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,n){this.registry.register(e,r,n)}unregisterProcess(e,r){this.registry.unregister(e,r)}getRegistry(){return this.registry}},Dd=new Jt(et());function No(t={}){let e=t.pidFilePath??Aa;if(!(0,re.existsSync)(e))return"missing";let r=null;try{r=JSON.parse((0,re.readFileSync)(e,"utf-8"))}catch(o){return o instanceof Error?l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},o):l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(o)}),(0,re.rmSync)(e,{force:!0}),"invalid"}return Gt(r)&&r?((t.logAlive??!0)&&l.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(t.removeStale===!1||(l.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),(0,re.rmSync)(e,{force:!0})),"stale")}Re();T();U();g();g();g();g();g();g();T();var Mf=j(x.POWERSHELL_COMMAND);var bf=A.dataDir(),Of=A.workerPid();g();T();g();T();g();var Ca=9e4,Gf=Ca/3;var Uo=require("node:child_process");var $o=require("node:util");g();T();var op=(0,$o.promisify)(Uo.execFile);var Ma=1500,ba=1e3,Oa=5500,ip=2*Ma+ba+Oa;U();function Fo(t,e,r){let n=process.env[t];if(n){let o=parseInt(n,10);if(Number.isFinite(o)&&o>=r.min&&o<=r.max)return o;l.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max})}return e}var Kp=Fo("CLAUDE_MEM_HEALTH_TIMEOUT_MS",j(x.HEALTH_CHECK),{min:500,max:3e5}),Yp=Fo("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",j(x.HOOK_READINESS_WAIT),{min:0,max:3e5});var Gp={min:500,max:x.SESSION_INIT_REQUEST_MAX};function Ho(t=process.env){let e=t.CLAUDE_MEM_FETCH_VERBOSE;if(e===void 0)return!1;let r=e.trim().toLowerCase();return r==="1"||r==="true"||r==="on"||r==="yes"}function Ra(t){return Ho()?{...t,verbose:!0}:t}function Da(t){let e={},r=t;for(let n=0;r&&n<4;n++){let o=n===0?"error":`cause${n}`;if(r instanceof Error){let i=r;e[o]={name:r.name,message:r.message,...i.code!==void 0?{code:i.code}:{}},r=r.cause;continue}e[o]=String(r);break}return e}function va(t,e,r){let n=typeof e.method=="string"?e.method:"GET",o=Da(r),i=JSON.stringify(o);l.warn("SYSTEM","Worker IPC fetch failed",{url:t,method:n},i),Y(`[claude-mem] fetch verbose: ${n} ${t} ${i}
107
+ `)}g();g();T();var re=require("fs");g();var Ks=new Set([".cmd",".bat"]),Gs=new Set([".exe",".com"]),Ku=new Set([...Gs,...Ks]);var Oe=require("fs"),Mo=ne(require("path"),1);g();U();var Ys=["CLAUDECODE_","CLAUDE_CODE_"],Js=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),Vs=new Set(["HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy","npm_config_noproxy"]),qs=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_TMPDIR","CLAUDE_CODE_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...Vs]);function fe(t=process.env){let e={};for(let[r,n]of Object.entries(t))if(n!==void 0){if(qs.has(r)){e[r]=n;continue}Js.has(r)||Ys.some(o=>r.startsWith(o))||(e[r]=n)}return e}T();var Wt=require("child_process"),ho=require("fs");g();var Xs=5e3,So=new Map,Ht=0;function yo(t,e,r){if(r.status!==0)return null;if(typeof r.stdout!="string")return l.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:t,status:r.status}),null;let n=r.stdout.trim();return n.length>0?n:null}function zs(t){Ht+=1;let e=(0,Wt.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...fe(process.env),LC_ALL:"C",LANG:"C"}});return yo("powershell-cim",t,e)}function Qs(t,e=!1){if(!e){let n=So.get(t);if(n&&(t===process.pid||Date.now()-n.capturedAtMs<Xs))return n.token}let r=null;try{r=zs(t)}catch(n){l.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:n instanceof Error?n.message:String(n)}),r=null}return(r!==null||t!==process.pid)&&So.set(t,{token:r,capturedAtMs:Date.now()}),r}function Ao(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){Ht+=1;try{let r=(0,ho.readFileSync)(`/proc/${t}/stat`,"utf-8"),n=r.lastIndexOf(") ");if(n<0)return null;let i=r.slice(n+2).split(" ")[19];return i&&/^\d+$/.test(i)?i:null}catch(r){return l.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}if(process.platform==="win32")return Qs(t,e);Ht+=1;try{let r=(0,Wt.spawnSync)("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...fe(process.env),LC_ALL:"C",LANG:"C"}});return yo("ps-lstart",t,r)}catch(r){return l.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}function K(t){return Ao(t,!1)}function F(t,e){if(e===null)return!0;let r=Ao(t,!0);return r===null?!0:r===e}var To=require("child_process"),Qe=require("fs"),Co=require("util");g();var jt=(0,Co.promisify)(To.execFile),Zs=128,ea=/not found|no running instance|no tasks/i,Xe=class extends Error{pid;constructor(e,r,n){super(r,n),this.name="ProcessTreeKillError",this.pid=e}};async function H(t,e={}){let r=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:K(t),o=()=>F(t,n);if(!o()){l.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:t});return}if(l.debug("PROCESS",`Killing process tree rooted at PID ${t}`,{immediate:r}),process.platform==="win32"){try{await jt("taskkill",["/PID",String(t),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(i){let s=i.code,c=String(i.stderr??""),a=i instanceof Error?i.message:String(i);if(s===Zs||ea.test(`${c} ${a}`)){l.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new Xe(t,`taskkill failed for PID ${t} (exit ${String(s)}): ${c.trim()||a}`,{cause:i})}return}try{let i=r?"SIGKILL":"SIGTERM",s=await ze(t);for(let u of s){if(!F(u.pid,u.startToken)){l.debug("PROCESS",`Skipping ${i}: descendant PID was reused since enumeration`,{pid:u.pid,rootPid:t});continue}try{process.kill(u.pid,i)}catch{}}if(o())try{process.kill(t,i)}catch(u){let m=u instanceof Error?u:new Error(String(u)),p=m.code;p!=="ESRCH"&&l.debug("PROCESS",`Failed to ${i} PID ${t}`,{code:p},m)}else l.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:t,signal:i});r||await new Promise(u=>setTimeout(u,500));let c=o()?await ze(t):[],a=new Map;for(let u of s)a.set(u.pid,u.startToken);for(let u of c)a.set(u.pid,u.startToken);for(let[u,m]of a){if(!F(u,m)){l.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:u,rootPid:t});continue}try{process.kill(u,"SIGKILL")}catch{}}if(!r&&o())try{process.kill(t,"SIGKILL")}catch{}}catch(i){throw new Xe(t,`tree-kill failed for PID ${t}: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}async function ta(){return process.platform==="win32"?oa():process.platform==="linux"?ra():na()}function ra(){let t=[],e;try{e=(0,Qe.readdirSync)("/proc")}catch(r){return l.warn("PROCESS","Cannot read /proc \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),t}for(let r of e){if(!/^\d+$/.test(r))continue;let n;try{n=(0,Qe.readFileSync)(`/proc/${r}/stat`,"utf-8")}catch{continue}let o=n.lastIndexOf(") ");if(o<0)continue;let i=n.slice(o+2).split(" "),s=Number.parseInt(i[1]??"",10),c=i[19];Number.isFinite(s)&&t.push({pid:Number.parseInt(r,10),ppid:s,startToken:c&&/^\d+$/.test(c)?c:null})}return t}async function na(){let t;try{t=(await jt("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(r){return l.warn("PROCESS","Cannot enumerate the process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(`
108
+ `)){let n=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let o=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:o.length>0?o:null})}return e}async function oa(){let t;try{t=(await jt("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Csv -NoTypeInformation"],{timeout:3e4,windowsHide:!0,maxBuffer:33554432})).stdout}catch(r){return l.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(/\r?\n/).slice(1)){let n=r.match(/^"(\d+)","(\d+)","(.*)"$/);if(!n)continue;let o=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:o.length>0?o:null})}return e}async function ze(t){let e=await ta(),r=new Map;for(let s of e){let c=r.get(s.ppid);c?c.push(s):r.set(s.ppid,[s])}let n=new Set([t]),o=[],i=s=>{for(let c of r.get(s)??[])n.has(c.pid)||(n.add(c.pid),i(c.pid),o.push({pid:c.pid,startToken:c.startToken}))};return i(t),o}var aa=5e3,ca=1e3,la=A.supervisorRegistry(),ua=null;function R(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(l.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return l.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function Ze(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(n=>!R(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function bo(t){if(!t||!R(t.pid))return!1;if(!t.startToken)return!0;let e=K(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||l.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}var da={platform:process.platform,readCommandLine:t=>(0,Oe.readFileSync)(`/proc/${t}/cmdline`,"utf-8")};function Yt(t,e=da){if(!bo(t))return!1;if(t.startToken||e.platform!=="linux")return!0;let r;try{r=e.readCommandLine(t.pid)}catch(o){return l.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:t.pid,error:o instanceof Error?o.message:String(o)}),!0}let n=r.split("\0").some(o=>Mo.default.basename(o)==="worker-service.cjs");return n||l.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:t.pid}),n}var Gt=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=la){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!(0,Oe.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,Oe.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[o,i]of Object.entries(n))this.entries.set(o,i)}catch(r){r instanceof Error?l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):l.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&l.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}retainSupersededEntry(e,r){let n=this.entries.get(e);if(!n||n.pid===r||!R(n.pid))return;let o=`${e}#superseded:${n.pid}`;this.entries.set(o,n);let i=this.runtimeProcesses.get(e);i&&(this.runtimeProcesses.set(o,i),this.runtimeProcesses.delete(e)),l.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:o,supersededPid:n.pid,incomingPid:r})}register(e,r,n){this.initialize(),this.retainSupersededEntry(e,r.pid),this.entries.set(e,r),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e,r){this.initialize();let n=e,o=this.entries.get(n);r!==void 0&&o?.pid!==r&&(n=`${e}#superseded:${r}`,o=this.entries.get(n),o?.pid!==r)||o&&(this.entries.delete(n),this.runtimeProcesses.delete(n),this.persist(),o?.type==="sdk"&&Kt())}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let n=Date.parse(e.startedAt),o=Date.parse(r.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(o)?0:o)})}getBySession(e){let r=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,r=0;for(let[n,o]of this.entries)R(o.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,o.type==="sdk"&&(r+=1));e>0&&this.persist();for(let n=0;n<r;n+=1)Kt();return e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;l.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:n,pids:r.map(c=>c.pid)});let o=r.filter(c=>R(c.pid)),i=new Map(o.map(c=>[c.pid,K(c.pid)]));for(let c of o)try{process.platform==="win32"?await H(c.pid,{expectedStartToken:i.get(c.pid)??null}):typeof c.pgid=="number"?process.kill(-c.pgid,"SIGTERM"):process.kill(c.pid,"SIGTERM")}catch(a){a instanceof Error?a.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGTERM session process PID ${c.pid}`,{pid:c.pid,pgid:c.pgid},a):l.warn("SYSTEM",`Failed to SIGTERM session process PID ${c.pid} (non-Error)`,{pid:c.pid,pgid:c.pgid,error:String(a)})}await Ze(o,aa);let s=o.filter(c=>R(c.pid));for(let c of s){l.warn("SYSTEM",`Session process PID ${c.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:c.pid,pgid:c.pgid,sessionId:n});let a=i.get(c.pid)??null;if(!F(c.pid,a)){l.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:c.pid,sessionId:n});continue}try{process.platform==="win32"?await H(c.pid,{expectedStartToken:a}):typeof c.pgid=="number"?process.kill(-c.pgid,"SIGKILL"):process.kill(c.pid,"SIGKILL")}catch(u){u instanceof Error?u.code!=="ESRCH"&&l.debug("SYSTEM",`Failed to SIGKILL session process PID ${c.pid}`,{pid:c.pid,pgid:c.pgid},u):l.warn("SYSTEM",`Failed to SIGKILL session process PID ${c.pid} (non-Error)`,{pid:c.pid,pgid:c.pgid,error:String(u)})}}if(s.length>0){let c=Date.now()+ca;for(;Date.now()<c&&s.filter(u=>R(u.pid)).length!==0;)await new Promise(u=>setTimeout(u,100))}for(let c of r)this.entries.delete(c.id),this.runtimeProcesses.delete(c.id);this.persist();for(let c of r)c.type==="sdk"&&Kt();return l.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:n,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};try{P(this.registryPath,e),this.persistDegraded=!1}catch(r){this.reportPersistFailure(r)}}reportPersistFailure(e){if(this.persistDegraded)return;this.persistDegraded=!0;let r=e instanceof Error?e:new Error(String(e));l.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},r);try{ua?.({errorCategory:r.code??"unknown"})}catch{}}},Bt=null;function et(){return Bt||(Bt=new Gt),Bt}var ld=180*1e3,fa=[];function Kt(){let t=fa.shift();t&&t.notify()}var pe=require("fs");g();T();var pa=A.workerPid();async function wo(t){let e=t.currentPid??process.pid,r=t.pidFilePath??pa,n=t.registry.getAll(),o=[...n].filter(a=>a.pid!==e).sort((a,u)=>Date.parse(u.startedAt)-Date.parse(a.startedAt)),i=new Map,s=new Map;for(let a of o){if(!R(a.pid)){t.registry.unregister(a.id);continue}s.set(a.id,K(a.pid)),i.set(a.id,await ze(a.pid));try{await Oo(a,"SIGTERM")}catch(u){u instanceof Error?l.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:a.pid,pgid:a.pgid,type:a.type},u):l.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:a.pid,pgid:a.pgid,type:a.type,error:String(u)})}}await Ze(o,5e3);let c=o.filter(a=>R(a.pid)||(i.get(a.id)??[]).some(u=>R(u.pid)));for(let a of c){let u=F(a.pid,s.get(a.id)??null);u||l.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:a.pid,type:a.type});try{u&&await Oo(a,"SIGKILL")}catch(m){m instanceof Error?l.debug("SYSTEM","Failed to force kill child process",{pid:a.pid,pgid:a.pgid,type:a.type},m):l.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:a.pid,pgid:a.pgid,type:a.type,error:String(m)})}finally{ma(i.get(a.id)??[],a.pid)}}await Ze(c,1e3);for(let a of o)t.registry.unregister(a.id);for(let a of n.filter(u=>u.pid===e))t.registry.unregister(a.id);Ro(r,e),t.registry.pruneDeadEntries()}function Ro(t,e,r=!1){if(!(0,pe.existsSync)(t))return;let n=null;try{let s=JSON.parse((0,pe.readFileSync)(t,"utf-8"));n=typeof s.pid=="number"?s.pid:null}catch(s){l.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:t,error:s instanceof Error?s.message:String(s)});return}let o=e!==null&&n===e,i=n===null||!R(n);if(!o&&!(r&&i)){l.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:t,recordedPid:n,currentPid:e});return}try{(0,pe.rmSync)(t,{force:!0})}catch(s){s instanceof Error?l.debug("SYSTEM","Failed to remove PID file",{pidFilePath:t},s):l.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:t,error:String(s)})}}function ma(t,e){for(let{pid:r,startToken:n}of t)if(!(r===e||!R(r))){if(!F(r,n)){l.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:r,rootPid:e});continue}try{process.kill(r,"SIGKILL"),l.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:r,rootPid:e})}catch(o){let i=o instanceof Error?o.code:void 0;i!=="ESRCH"&&l.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:r,rootPid:e,errno:i})}}}async function Oo(t,e){let{pid:r,pgid:n}=t;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(o){if((o instanceof Error?o.code:void 0)!=="ESRCH")throw o}if(e==="SIGKILL"){await H(r,{signalMode:"immediate"});return}try{process.kill(r,e)}catch(o){if((o instanceof Error?o.code:void 0)!=="ESRCH")throw o}return}await H(r)}g();var Do=3e4,me=null;function Ea(){let e=et().pruneDeadEntries();e>0&&l.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function vo(){me===null&&(me=setInterval(Ea,Do),me.unref(),l.debug("SYSTEM","Health checker started",{intervalMs:Do}))}function ko(){me!==null&&(clearInterval(me),me=null,l.debug("SYSTEM","Health checker stopped"))}var Io=require("child_process"),Lo=require("util");g();var ga=(0,Lo.promisify)(Io.execFile),_a=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function Sa(t){let e=[];for(let r of t.split(`
109
+ `)){let n=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function ha(){let t=await ga("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return Sa(t.stdout)}function ya(t,e){let r=t.filter(s=>_a.test(s.command)&&s.pid!==e.selfPid),n=new Set(r.map(s=>s.pid)),o=r.filter(s=>!n.has(s.ppid)),i=o.filter(s=>s.ppid===e.selfPid?!1:s.ppid===1?!0:!e.isAlive(s.ppid));return{matched:r,roots:o,orphans:i}}async function Po(t={}){let e=t.platform??process.platform,r={matched:0,trees:0,orphans:0,killed:0,failed:0,unregistered:0,skipped:null};if(e==="win32")return r.skipped="windows",r;let n=t.readTable??ha,o=t.isAlive??R,i=t.killTree??(E=>H(E,{signalMode:"graceful"})),s=t.selfPid??process.pid,c;try{c=await n()}catch(E){return l.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:E instanceof Error?E.message:String(E)}),r.skipped="unreadable",r}let{matched:a,roots:u,orphans:m}=ya(c,{isAlive:o,selfPid:s});if(r.matched=a.length,r.trees=u.length,r.orphans=m.length,m.length===0)return l.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:r.matched,trees:r.trees}),r;l.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:m.length,roots:m.map(E=>E.pid)});let p=new Set,d=8;for(let E=0;E<m.length;E+=d){let y=m.slice(E,E+d);(await Promise.allSettled(y.map(h=>i(h.pid)))).forEach((h,I)=>{let L=y[I];h.status==="fulfilled"?(r.killed+=1,p.add(L.pid)):(r.failed+=1,l.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:L.pid,ppid:L.ppid,error:h.reason instanceof Error?h.reason.message:String(h.reason)}))})}if(t.registry)for(let E of t.registry.getAll())E.type==="chroma"&&p.has(E.pid)&&(t.registry.unregister(E.id),r.unregistered+=1);return l.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:r.orphans,killed:r.killed,failed:r.failed,unregistered:r.unregistered}),r}T();var Aa=A.workerPid(),Jt=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),No({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,Po({registry:this.registry}).catch(r=>{l.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:r instanceof Error?r.message:String(r)})}),vo()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async n=>{if(this.shutdownInitiated){l.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,l.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(o){o instanceof Error?l.error("SYSTEM","Error during shutdown",{},o):l.error("SYSTEM","Error during shutdown (non-Error)",{error:String(o)});try{await this.stop()}catch(i){i instanceof Error?l.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):l.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{l.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}ko(),this.stopPromise=wo({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,n){this.registry.register(e,r,n)}unregisterProcess(e,r){this.registry.unregister(e,r)}getRegistry(){return this.registry}},Dd=new Jt(et());function No(t={}){let e=t.pidFilePath??Aa;if(!(0,re.existsSync)(e))return"missing";let r=null;try{r=JSON.parse((0,re.readFileSync)(e,"utf-8"))}catch(o){return o instanceof Error?l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},o):l.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(o)}),(0,re.rmSync)(e,{force:!0}),"invalid"}return Yt(r)&&r?((t.logAlive??!0)&&l.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(t.removeStale===!1||(l.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),(0,re.rmSync)(e,{force:!0})),"stale")}Re();T();U();g();g();g();g();g();g();T();var Mf=j(x.POWERSHELL_COMMAND);var bf=A.dataDir(),Of=A.workerPid();g();T();g();T();g();var Ca=9e4,Yf=Ca/3;var Uo=require("node:child_process");var $o=require("node:util");g();T();var op=(0,$o.promisify)(Uo.execFile);var Ma=1500,ba=1e3,Oa=5500,ip=2*Ma+ba+Oa;U();function Fo(t,e,r){let n=process.env[t];if(n){let o=parseInt(n,10);if(Number.isFinite(o)&&o>=r.min&&o<=r.max)return o;l.warn("SYSTEM",`Invalid ${t}, using default`,{value:n,min:r.min,max:r.max})}return e}var Kp=Fo("CLAUDE_MEM_HEALTH_TIMEOUT_MS",j(x.HEALTH_CHECK),{min:500,max:3e5}),Gp=Fo("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",j(x.HOOK_READINESS_WAIT),{min:0,max:3e5});var Yp={min:500,max:x.SESSION_INIT_REQUEST_MAX};function Ho(t=process.env){let e=t.CLAUDE_MEM_FETCH_VERBOSE;if(e===void 0)return!1;let r=e.trim().toLowerCase();return r==="1"||r==="true"||r==="on"||r==="yes"}function Ra(t){return Ho()?{...t,verbose:!0}:t}function Da(t){let e={},r=t;for(let n=0;r&&n<4;n++){let o=n===0?"error":`cause${n}`;if(r instanceof Error){let i=r;e[o]={name:r.name,message:r.message,...i.code!==void 0?{code:i.code}:{}},r=r.cause;continue}e[o]=String(r);break}return e}function va(t,e,r){let n=typeof e.method=="string"?e.method:"GET",o=Da(r),i=JSON.stringify(o);l.warn("SYSTEM","Worker IPC fetch failed",{url:t,method:n},i),G(`[claude-mem] fetch verbose: ${n} ${t} ${i}
110
110
  `)}async function ka(t,e={}){let r=Ra(e);try{return await fetch(t,r)}catch(n){throw Ho()&&va(t,e,n),n}}async function Wo(t,e={},r){try{return await ka(t,{...e,signal:AbortSignal.timeout(r)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${r}ms`):n}}var Ia=1e3;var La=5e3,Jp=La+Ia;var Pa=j(x.API_REQUEST),Q=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)}},rt=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=xa(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??Pa}async startSession(e,r={}){let n=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",n,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 Q("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,r={}){let n={projectId:e.projectId};return e.query!==void 0&&(n.query=e.query),e.limit!==void 0&&(n.limit=e.limit),e.summaryLimit!==void 0&&(n.summaryLimit=e.summaryLimit),e.platformSource!==void 0&&(n.platformSource=tt(e.platformSource)),e.folderProjects&&e.folderProjects.length>0&&(n.folderProjects=e.folderProjects),e.excludeSubagents!==void 0&&(n.excludeSubagents=e.excludeSubagents),this.request("POST","/v1/context",n,r)}async getJobStatus(e){if(!e)throw new Q("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,content:r,...o?{title:o}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...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:tt(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:tt(e.platformSource)}:{},...e.metadata!==void 0?{metadata:Mt(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:tt(e.platformSource)}:{},...e.payload!==void 0?{payload:Mt(e.payload)}:{}}}async request(e,r,n,o={}){if(!this.apiKey||!this.apiKey.trim())throw new Q("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let i=`${this.baseUrl}${r}`,s={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(s.body=JSON.stringify(n));let c=p=>{let d=p instanceof Error?p.message:String(p),E=/timed out|timeout/i.test(d)||p instanceof Error&&(p.name==="TimeoutError"||p.name==="AbortError");return new Q(E?"timeout":"transport",`Server ${e} ${r} failed: ${d}`,{cause:p})},a,u=o.timeoutMs??this.timeoutMs;try{a=await Wo(i,s,u)}catch(p){throw c(p)}if(!a.ok){let p=await a.text().catch(()=>"");throw new Q("http_error",`Server ${e} ${r} returned ${a.status}: ${Na(p,200)}`,{status:a.status})}let m;try{m=await a.text()}catch(p){throw c(p)}if(!m||m.length===0)return{};try{return JSON.parse(m)}catch(p){let d=p instanceof Error?p:new Error(String(p));throw new Q("invalid_response",`Server ${e} ${r} returned non-JSON response`,{cause:d})}}};function xa(t){return t.replace(/\/+$/,"")}function tt(t){return typeof t=="string"?Ue(t):null}function Na(t,e){return t.length<=e?t:`${t.slice(0,e)}\u2026`}function Ua(){let e=(ue().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function $a(){let t=ue(),e=(...s)=>{for(let c of s){let a=(c??"").trim();if(a.length>0)return a}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 l.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return l.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!o)return l.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let i={serverBaseUrl:r,apiKey:n};return{runtime:"server",client:new rt(i),projectId:o,serverBaseUrl:r}}function jo(){if(Ua()!=="server")return{runtime:"worker"};let t=$a();return t||{runtime:"worker"}}g();async function Bo(t,e){let{config:r,project:n,folderProjects:o,platformSource:i,timeoutMs:s}=e,c=r.totalObservationCount+r.sessionCount+se,a=Math.max(1,Math.min(200,c));c>200&&l.debug("HOOK","Server context read capped at the route limit",{wanted:c,limit:200});let u;try{let d=await t.client.contextObservations({projectId:t.projectId,limit:a,...c<=200?{summaryLimit:r.sessionCount+se}:{},folderProjects:o,excludeSubagents:r.mainAgentOnly,...i?{platformSource:i}:{}},s===void 0?{}:{timeoutMs:s});u=Array.isArray(d?.observations)?d.observations:[]}catch(d){return l.warn("HOOK","[server-fallback] session-start context unavailable from the server",{error:d instanceof Error?d.message:String(d)}),null}let m=u.filter(d=>d.kind==="summary");return{observations:u.filter(d=>d.kind!=="summary").slice(0,r.totalObservationCount).map(d=>Fa(d,n,i)),summaries:m.slice(0,r.sessionCount+se).map(d=>Ha(d,n,i))}}function M(t,...e){let r=t.metadata??{};for(let n of e){if(t[n]!==void 0&&t[n]!==null)return t[n];if(r[n]!==void 0&&r[n]!==null)return r[n]}return null}function b(t){return typeof t=="string"?t:t==null?null:String(t)}function ot(t){if(t==null)return null;if(typeof t=="string")return t;try{return JSON.stringify(t)}catch{return null}}function Ko(t){return Number(M(t,"createdAtEpoch","created_at_epoch"))||Date.now()}function Fa(t,e,r){let n=Ko(t),o=b(t.content)??"",i=o.split(`
111
- `,1)[0]??"";return{id:b(t.id)??"",memory_session_id:b(M(t,"serverSessionId","memory_session_id"))??"",content_session_id:b(M(t,"contentSessionId","content_session_id"))??void 0,platform_source:r??"",type:b(M(t,"kind","type"))??"discovery",title:b(M(t,"title"))??i,subtitle:b(M(t,"subtitle")),narrative:b(M(t,"narrative"))??(o||null),facts:ot(M(t,"facts")),concepts:ot(M(t,"concepts")),files_read:ot(M(t,"files_read","filesRead")),files_modified:ot(M(t,"files_modified","filesModified")),discovery_tokens:null,created_at:new Date(n).toISOString(),created_at_epoch:n,project:b(M(t,"project"))??e}}function Ha(t,e,r){let n=Ko(t);return{id:b(t.id)??"",memory_session_id:b(M(t,"serverSessionId","memory_session_id"))??"",platform_source:r??"",request:b(M(t,"request")),investigated:b(M(t,"investigated")),learned:b(M(t,"learned")),completed:b(M(t,"completed")),next_steps:b(M(t,"next_steps","nextSteps")),notes:b(M(t,"notes")),created_at:new Date(n).toISOString(),created_at_epoch:n,project:b(M(t,"project"))??e}}var Vt=require("crypto");T();U();g();var Em=1440*60*1e3,Wa=(0,Vt.randomBytes)(6).toString("hex");function ja(t){return`\u27E6CMEM_NOW_HEADER:${t}\u27E7`}var qt=ja(Wa),Ba=40,Yo=Math.max(0,Ba-qt.length);var Ya=Jo.default.join((0,Vo.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version");function Ga(){try{if(!(0,st.existsSync)(dt))return null;let t=new qo.Database(dt,{readonly:!0,create:!1});try{return t.run(`PRAGMA busy_timeout = ${vr}`),t}catch(e){throw t.close(),e}}catch(t){if(t instanceof Error&&t.code==="ERR_DLOPEN_FAILED"){try{(0,st.unlinkSync)(Ya)}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 t}}function Ja(t,e,r){return e?$n(t,r):On(t,r)}function Go(t,e,r,n,o,i,s,c){let a=[],u=Tt(e);a.push(...Fn(t,u,n,s,c));let m=r.slice(0,n.sessionCount),p=ln(m,r),d=un(e,p),E=dn(e,n.fullObservationCount),y=s?Bn(d,E,n,o):void 0,k=a.join(`
111
+ `,1)[0]??"";return{id:b(t.id)??"",memory_session_id:b(M(t,"serverSessionId","memory_session_id"))??"",content_session_id:b(M(t,"contentSessionId","content_session_id"))??void 0,platform_source:r??"",type:b(M(t,"kind","type"))??"discovery",title:b(M(t,"title"))??i,subtitle:b(M(t,"subtitle")),narrative:b(M(t,"narrative"))??(o||null),facts:ot(M(t,"facts")),concepts:ot(M(t,"concepts")),files_read:ot(M(t,"files_read","filesRead")),files_modified:ot(M(t,"files_modified","filesModified")),discovery_tokens:null,created_at:new Date(n).toISOString(),created_at_epoch:n,project:b(M(t,"project"))??e}}function Ha(t,e,r){let n=Ko(t);return{id:b(t.id)??"",memory_session_id:b(M(t,"serverSessionId","memory_session_id"))??"",platform_source:r??"",request:b(M(t,"request")),investigated:b(M(t,"investigated")),learned:b(M(t,"learned")),completed:b(M(t,"completed")),next_steps:b(M(t,"next_steps","nextSteps")),notes:b(M(t,"notes")),created_at:new Date(n).toISOString(),created_at_epoch:n,project:b(M(t,"project"))??e}}var Vt=require("crypto");T();U();g();var Em=1440*60*1e3,Wa=(0,Vt.randomBytes)(6).toString("hex");function ja(t){return`\u27E6CMEM_NOW_HEADER:${t}\u27E7`}var qt=ja(Wa),Ba=40,Go=Math.max(0,Ba-qt.length);var Ga=Jo.default.join((0,Vo.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version");function Ya(){try{if(!(0,st.existsSync)(dt))return null;let t=new qo.Database(dt,{readonly:!0,create:!1});try{return t.run(`PRAGMA busy_timeout = ${vr}`),t}catch(e){throw t.close(),e}}catch(t){if(t instanceof Error&&t.code==="ERR_DLOPEN_FAILED"){try{(0,st.unlinkSync)(Ga)}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 t}}function Ja(t,e,r){return e?$n(t,r):On(t,r)}function Yo(t,e,r,n,o,i,s,c){let a=[],u=Tt(e);a.push(...Fn(t,u,n,s,c));let m=r.slice(0,n.sessionCount),p=ln(m,r),d=un(e,p),E=dn(e,n.fullObservationCount),y=s?Bn(d,E,n,o):void 0,k=a.join(`
112
112
  `).length+1;a.push(...y?Je(y):jn(d,E,n));let h=a.join(`
113
- `).length,I=r[0],L=e[0];Kn(n,I,L)&&a.push(...Yn(I,s));let v=a.join(`
114
- `).length,at=cn(e,n,i,o);a.push(...Gn(at,s));let ei=a.join(`
113
+ `).length,I=r[0],L=e[0];Kn(n,I,L)&&a.push(...Gn(I,s));let v=a.join(`
114
+ `).length,at=cn(e,n,i,o);a.push(...Yn(at,s));let ei=a.join(`
115
115
  `).length;return a.push(...Jn(u,n,s)),{text:a.join(`
116
116
  `).trimEnd(),timelineStart:k,timelineEnd:h,entries:y,summaryEnd:v,previousEnd:ei}}var Va=new Set(["bugfix","discovery","decision","refactor"]);function qa(t,e,r){let n=Tt(t),o={bugfix:0,discovery:0,decision:0,refactor:0,other:0},i=new Set,s=Number.POSITIVE_INFINITY;for(let a of t){let u=Va.has(a.type)?a.type:"other";o[u]++,a.memory_session_id&&i.add(a.memory_session_id),a.created_at_epoch&&a.created_at_epoch<s&&(s=a.created_at_epoch)}let c=Number.isFinite(s)?Math.max(0,Math.floor((Date.now()-s)/864e5)):0;return{observation_count:t.length,session_count:i.size,timeline_depth_days:c,has_session_summary:e.length>0,obs_type_bugfix:o.bugfix,obs_type_discovery:o.discovery,obs_type_decision:o.decision,obs_type_refactor:o.refactor,obs_type_other:o.other,tokens_injected:n.totalReadTokens,tokens_saved_vs_naive:n.savings,search_strategy:r?"full":"timeline"}}function Xo(t){return t.split(`
117
117
  `).map(e=>e.trim()?`${f.red}${e}${f.reset}`:e).join(`
@@ -124,5 +124,5 @@ ${t}`:t:e}function za(t,e){let{text:r,timelineStart:n,timelineEnd:o,entries:i,su
124
124
  [Terminal preview truncated. The model received the full selected context; ${at?"additional observations are not shown here.":"some presentation text is not shown here."}]
125
125
  `,u=r.slice(c),m=r.slice(o,s),p=r.slice(s,c);if(!i)return(a(!1)+r.slice(n)).slice(0,e);let d=0,E=Je(i).join(`
126
126
  `),y=a(!1),k=y.length+E.length+u.length<=e?y:a(!0);for(;d<i.length&&k.length+E.length+u.length>e;)d++,E=Je(i.slice(d)).join(`
127
- `);let h=e-k.length-E.length-u.length,I=m.length<=h?m:"",L=h-I.length,v="";return p.length<=L?v=p:L>24&&(v=p.slice(0,L-1-f.reset.length)+"\u2026"+f.reset),k+E+I+v+u}function Qa(t,e,r,n,o,i,s,c){let a=Ur(t,r,(p,d)=>Xt(n,o(p,d)),i);a.reductions>0&&l.debug("HOOK","Trimmed context to fit the hook output limit",{reductions:a.reductions,observations:a.observationCount,sessions:a.config.sessionCount,chars:a.text.length,overBudget:a.overBudget});let u=t.slice(0,a.observationCount),m=a.text;if(c){let p=Xo(n),d=p?p.length+2:0;m=Xt(p,za(c(u,a.config),i-d))}return{text:m,stats:qa(u,e.slice(0,a.config.sessionCount),s)}}function zo(t){let e=Nr();t?.includePriorMessage===!1&&(e.showLastMessage=!1);let r=t?.cwd??process.cwd(),n=t?.projects?.length?t.projects:Rr(r).allProjects,o=n[n.length-1];t?.full&&(e.totalObservationCount=999999,e.sessionCount=999999);let i=t?.platformSource?Ue(t.platformSource):void 0;return{config:e,cwd:r,projects:n,project:o,platformSource:i}}function Qo(t,e,r,n){let{observations:o,summaries:i}=t,{config:s,cwd:c,project:a}=n,u=e?.timePlaceholders?qt:B(),m=e?.timePlaceholders?Yo:0;return o.length===0&&i.length===0?{text:Xt(it(e,r),Ja(a,r,u)),stats:null}:Qa(o,i,s,it(e),(p,d)=>Go(a,p,i,d,c,e?.session_id,!1,u).text,e?.full?Number.POSITIVE_INFINITY:1e4-(e?.reserveChars??0)-m,!!e?.full,r?(p,d)=>Go(a,p,i,d,c,e?.session_id,!0,u):void 0)}async function Za(t,e,r){let n=zo(e);n.config.fetchByIdSupported=!1;let o=await Bo(t,{config:n.config,project:n.project,folderProjects:n.projects,platformSource:n.platformSource,...r===void 0?{}:{timeoutMs:r}});return{scope:n,rows:o}}function ec(t,e,r){return t.rows?Qo(t.rows,e,r,t.scope):{text:it(e,r),stats:null}}async function tc(t,e,r=!1){return ec(await Za(t,e),e,r)}async function zt(t,e=!1){let r=jo();if(r.runtime==="server")return tc(r,t,e);let n=zo(t),o=Ga();if(!o)return{text:it(t,e),stats:null};try{let i={db:o},s=Ir(o,n.projects.length>1?n.projects:[n.project]),c=sn(i,s,n.config,n.platformSource),a=Ot(i,s,n.config,n.platformSource);return Qo({observations:c,summaries:a},t,e,n)}finally{o.close()}}async function Zo(t,e=!1){return(await zt(t,e)).text}0&&(module.exports={generateContext,generateContextWithStats});
127
+ `);let h=e-k.length-E.length-u.length,I=m.length<=h?m:"",L=h-I.length,v="";return p.length<=L?v=p:L>24&&(v=p.slice(0,L-1-f.reset.length)+"\u2026"+f.reset),k+E+I+v+u}function Qa(t,e,r,n,o,i,s,c){let a=Ur(t,r,(p,d)=>Xt(n,o(p,d)),i);a.reductions>0&&l.debug("HOOK","Trimmed context to fit the hook output limit",{reductions:a.reductions,observations:a.observationCount,sessions:a.config.sessionCount,chars:a.text.length,overBudget:a.overBudget});let u=t.slice(0,a.observationCount),m=a.text;if(c){let p=Xo(n),d=p?p.length+2:0;m=Xt(p,za(c(u,a.config),i-d))}return{text:m,stats:qa(u,e.slice(0,a.config.sessionCount),s)}}function zo(t){let e=Nr();t?.includePriorMessage===!1&&(e.showLastMessage=!1);let r=t?.cwd??process.cwd(),n=t?.projects?.length?t.projects:Rr(r).allProjects,o=n[n.length-1];t?.full&&(e.totalObservationCount=999999,e.sessionCount=999999);let i=t?.platformSource?Ue(t.platformSource):void 0;return{config:e,cwd:r,projects:n,project:o,platformSource:i}}function Qo(t,e,r,n){let{observations:o,summaries:i}=t,{config:s,cwd:c,project:a}=n,u=e?.timePlaceholders?qt:B(),m=e?.timePlaceholders?Go:0;return o.length===0&&i.length===0?{text:Xt(it(e,r),Ja(a,r,u)),stats:null}:Qa(o,i,s,it(e),(p,d)=>Yo(a,p,i,d,c,e?.session_id,!1,u).text,e?.full?Number.POSITIVE_INFINITY:1e4-(e?.reserveChars??0)-m,!!e?.full,r?(p,d)=>Yo(a,p,i,d,c,e?.session_id,!0,u):void 0)}async function Za(t,e,r){let n=zo(e);n.config.fetchByIdSupported=!1;let o=await Bo(t,{config:n.config,project:n.project,folderProjects:n.projects,platformSource:n.platformSource,...r===void 0?{}:{timeoutMs:r}});return{scope:n,rows:o}}function ec(t,e,r){return t.rows?Qo(t.rows,e,r,t.scope):{text:it(e,r),stats:null}}async function tc(t,e,r=!1){return ec(await Za(t,e),e,r)}async function zt(t,e=!1){let r=jo();if(r.runtime==="server")return tc(r,t,e);let n=zo(t),o=Ya();if(!o)return{text:it(t,e),stats:null};try{let i={db:o},s=Ir(o,n.projects.length>1?n.projects:[n.project]),c=sn(i,s,n.config,n.platformSource),a=Ot(i,s,n.config,n.platformSource);return Qo({observations:c,summaries:a},t,e,n)}finally{o.close()}}async function Zo(t,e=!1){return(await zt(t,e)).text}0&&(module.exports={generateContext,generateContextWithStats});
128
128
  //# sourceMappingURL=context-generator.cjs.map