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.
@@ -9,7 +9,7 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "claude-mem",
12
- "version": "13.36.1",
12
+ "version": "13.37.0",
13
13
  "source": "./plugin",
14
14
  "description": "Persistent memory system for Claude Code - context compression across sessions"
15
15
  },
@@ -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": "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",
package/README.md CHANGED
@@ -59,7 +59,7 @@
59
59
  <img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License">
60
60
  </a>
61
61
  <a href="package.json">
62
- <img src="https://img.shields.io/badge/version-13.36.1-green.svg" alt="Version">
62
+ <img src="https://img.shields.io/badge/version-13.37.0-green.svg" alt="Version">
63
63
  </a>
64
64
  <a href="package.json">
65
65
  <img src="https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg" alt="Node">
@@ -101,7 +101,7 @@ ${s.stack}`:` ${s.message}`:this.getLevel()===0&&typeof s=="object"?d=`
101
101
  `,"utf8")}catch(p){let y=p instanceof Error?p:new Error(String(p));vn(`[LOGGER] Failed to write to log file: ${y.message}
102
102
  ${y.stack??""}
103
103
  `)}else vn(h+`
104
- `)}debug(t,r,i,n){this.log(0,t,r,i,n)}info(t,r,i,n){this.log(1,t,r,i,n)}warn(t,r,i,n){this.log(2,t,r,i,n)}setErrorSink(t){up=t}error(t,r,i,n){this.log(3,t,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(t,r,i){try{if(!up||!(i instanceof Error))return;up(i)}catch{}}dataIn(t,r,i,n){this.info(t,`\u2192 ${r}`,i,n)}dataOut(t,r,i,n){this.info(t,`\u2190 ${r}`,i,n)}success(t,r,i,n){this.info(t,`\u2713 ${r}`,i,n)}failure(t,r,i,n){this.error(t,`\u2717 ${r}`,i,n)}},D_e=new dp;function Nw(e){try{return new URL(e).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var P_e="security_alert",U_e="sync-hub.black-pond-afbb.workers.dev",N_e="ziczmqtpmaxbornfghye.supabase.co",x_e="https://sync.cmem.ai",$_e=new Set(["xiaomi/mimo-v2-flash:free"]);function j_e(e){return typeof e=="boolean"?String(e):e}function F_e(e){let t=e.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof t!="string"||!$_e.has(t.trim()))return!1;let r=typeof e.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?e.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||Nw(r)}var jw=18e4,Fw=[{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 Bw(e,t){return hp(I_e(e),`.${L_e(e)}.${t.markerTag}`)}function fp(e,t){try{R_e(Bw(e,t),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var Hw=new Set;function H_e(e){if(typeof e!="string")return null;let t=e.trim();if(t.length===0)return null;try{let r=new URL(t).hostname;if(r===U_e||r===N_e)return x_e}catch{return null}return null}var sl=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(Tw(il.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Ow()),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:hp($w(),".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:hp($w(),".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:M_e(),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(jw),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(jw),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(t){let r=process.env[t]??this.DEFAULTS[t];return t==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(t){return t==="localhost"?"127.0.0.1":t}static finalizeSettings(t,r){let i=r?this.applyEnvOverrides(t):t;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(t){let r=this.get(t);return parseInt(r,10)}static applyEnvOverrides(t){let r={...t};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(t,r=!0,i={}){try{if(!xw(t)){let h=this.getAllDefaults();if(!i.readOnly)try{Hr(t,h,{mode:384});for(let p of Fw)fp(t,p);console.warn("[SETTINGS] Created settings file with defaults:",t)}catch(p){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,p instanceof Error?p.message:String(p))}return this.finalizeSettings(h,r)}let n=k_e(t,"utf-8"),s=ap(n),o=bn(s),a=o!==s,l=Lw(s),c=a&&Object.keys(l).some(h=>h!=="env");if(a&&!c&&!i.readOnly)try{Hr(t,o,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(h){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,h instanceof Error?h.message:String(h))}if(o.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===P_e&&(o={...o,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!i.readOnly))try{Hr(t,c?{...l,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",t)}catch(h){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",t,h instanceof Error?h.message:String(h))}if(F_e(o)){let h=String(o.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(o={...o,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!i.readOnly)try{Hr(t,c?{...l,env:o}:o,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${h} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,t)}catch(p){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",t,p instanceof Error?p.message:String(p))}}let d=H_e(o.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(d!==null&&(o={...o,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:d},!i.readOnly))try{Hr(t,c?{...l,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",d,"from a retired hub host:",t)}catch(h){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",t,h instanceof Error?h.message:String(h))}for(let h of Fw)if(!xw(Bw(t,h))){if(o[h.key]!==h.legacy){i.readOnly||fp(t,h);continue}if(o={...o,[h.key]:this.DEFAULTS[h.key]},!i.readOnly)try{Hr(t,c?{...l,env:o}:o,{mode:384}),fp(t,h),console.warn(`[SETTINGS] Migrated ${h.key} off the old ${h.legacy}ms default to ${this.DEFAULTS[h.key]}ms:`,t)}catch(p){let y=`${h.key}\0${t}`;Hw.has(y)||(Hw.add(y),console.warn(`[SETTINGS] Failed to migrate ${h.key}; using the new default in memory (reported once per process):`,t,p instanceof Error?p.message:String(p)))}}let f={...this.DEFAULTS};for(let h of Object.keys(this.DEFAULTS))o[h]!==void 0&&(f[h]=j_e(o[h]));return this.finalizeSettings(f,r)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",t,n instanceof Error?n.message:String(n));let s=this.getAllDefaults();return this.finalizeSettings(s,r)}}};function pp(e){return e.startsWith("[")&&e.endsWith("]")?e:e.includes(":")?`[${e}]`:e}var Sn=z_e(B_e);function fi(e){let t=mp.homedir();return e.replace(t,"~")}async function W_e(){try{let e=Zt.join(process.cwd(),"package.json"),t=await Br.readFile(e,"utf-8");return JSON.parse(t).version||"unknown"}catch{return"unknown"}}async function G_e(){try{let{stdout:e}=await Sn("claude --version");return e.trim()}catch{return"not installed or not in PATH"}}async function K_e(){try{let{stdout:e}=await Sn("bun --version");return e.trim()}catch{return"not installed"}}async function V_e(){try{if(process.platform==="darwin"){let{stdout:e}=await Sn("sw_vers -productVersion");return`macOS ${e.trim()}`}else if(process.platform==="linux"){let{stdout:e}=await Sn("uname -sr");return e.trim()}else if(process.platform==="win32"){let{stdout:e}=await Sn("ver");return e.trim()}return"unknown"}catch{return"unknown"}}async function q_e(e,t){try{return await(await fetch(`http://${pp(e)}:${t}/api/health`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Z_e(e,t){try{return await(await fetch(`http://${pp(e)}:${t}/api/stats`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Y_e(e){try{let t=Zt.join(e,"worker.pid"),r=await Br.readFile(t,"utf-8");return JSON.parse(r)}catch{return null}}async function zw(e,t){try{return(await Br.readFile(e,"utf-8")).split(`
104
+ `)}debug(t,r,i,n){this.log(0,t,r,i,n)}info(t,r,i,n){this.log(1,t,r,i,n)}warn(t,r,i,n){this.log(2,t,r,i,n)}setErrorSink(t){up=t}error(t,r,i,n){this.log(3,t,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(t,r,i){try{if(!up||!(i instanceof Error))return;up(i)}catch{}}dataIn(t,r,i,n){this.info(t,`\u2192 ${r}`,i,n)}dataOut(t,r,i,n){this.info(t,`\u2190 ${r}`,i,n)}success(t,r,i,n){this.info(t,`\u2713 ${r}`,i,n)}failure(t,r,i,n){this.error(t,`\u2717 ${r}`,i,n)}},D_e=new dp;function Nw(e){try{return new URL(e).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var P_e="security_alert",U_e="sync-hub.black-pond-afbb.workers.dev",N_e="ziczmqtpmaxbornfghye.supabase.co",x_e="https://sync.cmem.ai",$_e=new Set(["xiaomi/mimo-v2-flash:free"]);function j_e(e){return typeof e=="boolean"?String(e):e}function F_e(e){let t=e.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof t!="string"||!$_e.has(t.trim()))return!1;let r=typeof e.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?e.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||Nw(r)}var jw=18e4,Fw=[{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 Bw(e,t){return hp(I_e(e),`.${L_e(e)}.${t.markerTag}`)}function fp(e,t){try{R_e(Bw(e,t),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var Hw=new Set;function H_e(e){if(typeof e!="string")return null;let t=e.trim();if(t.length===0)return null;try{let r=new URL(t).hostname;if(r===U_e||r===N_e)return x_e}catch{return null}return null}var sl=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(Tw(il.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Ow()),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:hp($w(),".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:hp($w(),".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:M_e(),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(jw),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(jw),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(t){let r=process.env[t]??this.DEFAULTS[t];return t==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(t){return t==="localhost"?"127.0.0.1":t}static finalizeSettings(t,r){let i=r?this.applyEnvOverrides(t):t;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(t){let r=this.get(t);return parseInt(r,10)}static applyEnvOverrides(t){let r={...t};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(t,r=!0,i={}){try{if(!xw(t)){let h=this.getAllDefaults();if(!i.readOnly)try{Hr(t,h,{mode:384});for(let p of Fw)fp(t,p);console.warn("[SETTINGS] Created settings file with defaults:",t)}catch(p){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,p instanceof Error?p.message:String(p))}return this.finalizeSettings(h,r)}let n=k_e(t,"utf-8"),s=ap(n),o=bn(s),a=o!==s,l=Lw(s),c=a&&Object.keys(l).some(h=>h!=="env");if(a&&!c&&!i.readOnly)try{Hr(t,o,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(h){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,h instanceof Error?h.message:String(h))}if(o.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===P_e&&(o={...o,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!i.readOnly))try{Hr(t,c?{...l,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",t)}catch(h){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",t,h instanceof Error?h.message:String(h))}if(F_e(o)){let h=String(o.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(o={...o,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!i.readOnly)try{Hr(t,c?{...l,env:o}:o,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${h} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,t)}catch(p){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",t,p instanceof Error?p.message:String(p))}}let d=H_e(o.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(d!==null&&(o={...o,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:d},!i.readOnly))try{Hr(t,c?{...l,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",d,"from a retired hub host:",t)}catch(h){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",t,h instanceof Error?h.message:String(h))}for(let h of Fw)if(!xw(Bw(t,h))){if(o[h.key]!==h.legacy){i.readOnly||fp(t,h);continue}if(o={...o,[h.key]:this.DEFAULTS[h.key]},!i.readOnly)try{Hr(t,c?{...l,env:o}:o,{mode:384}),fp(t,h),console.warn(`[SETTINGS] Migrated ${h.key} off the old ${h.legacy}ms default to ${this.DEFAULTS[h.key]}ms:`,t)}catch(p){let y=`${h.key}\0${t}`;Hw.has(y)||(Hw.add(y),console.warn(`[SETTINGS] Failed to migrate ${h.key}; using the new default in memory (reported once per process):`,t,p instanceof Error?p.message:String(p)))}}let f={...this.DEFAULTS};for(let h of Object.keys(this.DEFAULTS))o[h]!==void 0&&(f[h]=j_e(o[h]));return this.finalizeSettings(f,r)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",t,n instanceof Error?n.message:String(n));let s=this.getAllDefaults();return this.finalizeSettings(s,r)}}};function pp(e){return e.startsWith("[")&&e.endsWith("]")?e:e.includes(":")?`[${e}]`:e}var Sn=z_e(B_e);function fi(e){let t=mp.homedir();return e.replace(t,"~")}async function W_e(){try{let e=Zt.join(process.cwd(),"package.json"),t=await Br.readFile(e,"utf-8");return JSON.parse(t).version||"unknown"}catch{return"unknown"}}async function G_e(){try{let{stdout:e}=await Sn("claude --version");return e.trim()}catch{return"not installed or not in PATH"}}async function K_e(){try{let{stdout:e}=await Sn("bun --version");return e.trim()}catch{return"not installed"}}async function V_e(){try{if(process.platform==="darwin"){let{stdout:e}=await Sn("sw_vers -productVersion");return`macOS ${e.trim()}`}else if(process.platform==="linux"){let{stdout:e}=await Sn("uname -sr");return e.trim()}else if(process.platform==="win32"){let{stdout:e}=await Sn("ver");return e.trim()}return"unknown"}catch{return"unknown"}}async function q_e(e,t){try{return await(await fetch(`http://${pp(e)}:${t}/api/health`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Z_e(e,t){try{return await(await fetch(`http://${pp(e)}:${t}/api/stats`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Y_e(e){try{let t=Zt.join(e,"worker.pid"),r=await Br.readFile(t,"utf-8");return JSON.parse(r)}catch{return null}}async function zw(e,t){try{return(await Br.readFile(e,"utf-8")).split(`
105
105
  `).filter(n=>n.trim()).slice(-t)}catch{return[]}}async function X_e(e){try{let t=Zt.join(e,"settings.json"),r=await Br.readFile(t,"utf-8");return{exists:!0,settings:JSON.parse(r)}}catch{return{exists:!1}}}async function J_e(e){try{let t=Zt.join(e,"claude-mem.db");return{exists:!0,size:(await Br.stat(t)).size}}catch{return{exists:!1}}}async function Q_e(e){try{let t=Zt.join(e,"claude-mem.db");await Br.stat(t);let r="SELECT (SELECT COUNT(*) FROM observations) AS observations, (SELECT COUNT(*) FROM sessions) AS sessions, (SELECT COUNT(*) FROM session_summaries) AS summaries;",{stdout:i}=await Sn(`sqlite3 "${t}" "${r}"`),n=i.trim().split("|");return n.length===3?{observations:parseInt(n[0],10)||0,sessions:parseInt(n[1],10)||0,summaries:parseInt(n[2],10)||0}:void 0}catch{return}}async function Fs(e={}){let t=mp.homedir(),r=qe,i=Zt.join(t,".claude","plugins","marketplaces","thedotmack"),n=process.cwd(),s=n.includes("claude-mem")&&!n.includes(".claude"),[o,a,l,c]=await Promise.all([W_e(),G_e(),K_e(),V_e()]),d={claudeMem:o,claudeCode:a,node:process.version,bun:l},f={os:process.platform,osVersion:c,arch:process.arch},h={pluginPath:fi(i),dataDir:fi(r),cwd:fi(n),isDevMode:s},p=await Y_e(r),y=sl.loadFromFile(Mw),g=y.CLAUDE_MEM_WORKER_HOST,b=process.env.CLAUDE_MEM_WORKER_PORT||y.CLAUDE_MEM_WORKER_PORT,_=typeof p?.port=="number"?p.port:parseInt(b,10),[C,v]=await Promise.all([q_e(g,_),Z_e(g,_)]),A={running:C!==null,pid:p?.pid,port:_,uptime:v?.worker?.uptime,version:v?.worker?.version,health:C,stats:v},L=[],T=[];if(e.includeLogs!==!1){let I=new Date().toISOString().split("T")[0],N=Zt.join(r,"logs",`claude-mem-${I}.log`),Z=Zt.join(r,"silent.log");[L,T]=await Promise.all([zw(N,50),zw(Z,50)])}let E={workerLog:L.map(fi),silentLog:T.map(fi)},[O,R]=await Promise.all([J_e(r),Q_e(r)]),S={path:fi(Zt.join(r,"claude-mem.db")),exists:O.exists,size:O.size,counts:R},w=await X_e(r),k={settingsPath:fi(Zt.join(r,"settings.json")),settingsExist:w.exists,settings:w.settings};return{versions:d,platform:f,paths:h,worker:A,logs:E,database:S,config:k}}function gp(e){let t="";if(t+=`## Environment
106
106
 
107
107
  `,t+=`- **Claude-mem**: ${e.versions.claudeMem}
@@ -10,10 +10,10 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?u=`
10
10
  `,"utf8")}catch(f){let m=f instanceof Error?f:new Error(String(f));oi(`[LOGGER] Failed to write to log file: ${m.message}
11
11
  ${m.stack??""}
12
12
  `)}else oi(p+`
13
- `)}debug(e,r,i,n){this.log(0,e,r,i,n)}info(e,r,i,n){this.log(1,e,r,i,n)}warn(e,r,i,n){this.log(2,e,r,i,n)}setErrorSink(e){v_=e}error(e,r,i,n){this.log(3,e,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(e,r,i){try{if(!v_||!(i instanceof Error))return;v_(i)}catch{}}dataIn(e,r,i,n){this.info(e,`\u2192 ${r}`,i,n)}dataOut(e,r,i,n){this.info(e,`\u2190 ${r}`,i,n)}success(e,r,i,n){this.info(e,`\u2713 ${r}`,i,n)}failure(e,r,i,n){this.error(e,`\u2717 ${r}`,i,n)}},b=new S_});function bK(t=process.env){let e=Number.parseInt(t.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=gK.min&&e<=gK.max?e:$ee}function vK(t=process.platform){return t==="win32"?8e3:5e3}function __(t=process.platform){return Mt.SESSION_INIT_HOOK_CAP-vK(t)}function ao(t){return process.platform==="win32"?Math.round(t*Mt.WINDOWS_MULTIPLIER):t}var Mt,$ee,gK,Vs=E(()=>{"use strict";Mt={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},$ee=300,gK={min:60,max:86400}});var EK=E(()=>{"use strict"});function SK(t){try{return new URL(t).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var _K=E(()=>{"use strict";be()});import{readFileSync as Fee,existsSync as wK,writeFileSync as Jee}from"fs";import{basename as zee,dirname as qee,join as k_}from"path";import{homedir as kK,hostname as Bee}from"os";function Zee(t){return typeof t=="boolean"?String(t):t}function Xee(t){let e=t.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!Yee.has(e.trim()))return!1;let r=typeof t.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?t.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||SK(r)}function CK(t,e){return k_(qee(t),`.${zee(t)}.${e.markerTag}`)}function w_(t,e){try{Jee(CK(t,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}function Qee(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===Wee||r===Vee)return Hee}catch{return null}return null}var Gee,Wee,Vee,Hee,Yee,IK,xK,TK,Ne,zr=E(()=>{"use strict";Vs();Pt();_K();Oi();Gee="security_alert",Wee="sync-hub.black-pond-afbb.workers.dev",Vee="ziczmqtpmaxbornfghye.supabase.co",Hee="https://sync.cmem.ai",Yee=new Set(["xiaomi/mimo-v2-flash:free"]);IK=18e4,xK=[{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"}];TK=new Set;Ne=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(ao(Mt.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(__()),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:k_(kK(),".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:k_(kK(),".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:Bee(),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(IK),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(IK),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 i=r?this.applyEnvOverrides(e):e;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(e){let r=this.get(e);return parseInt(r,10)}static applyEnvOverrides(e){let r={...e};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(e,r=!0,i={}){try{if(!wK(e)){let p=this.getAllDefaults();if(!i.readOnly)try{Fe(e,p,{mode:384});for(let f of xK)w_(e,f);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(f){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,f instanceof Error?f.message:String(f))}return this.finalizeSettings(p,r)}let n=Fee(e,"utf-8"),o=On(n),s=si(o),a=s!==o,l=m_(o),c=a&&Object.keys(l).some(p=>p!=="env");if(a&&!c&&!i.readOnly)try{Fe(e,s,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(p){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,p instanceof Error?p.message:String(p))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Gee&&(s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!i.readOnly))try{Fe(e,c?{...l,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,p instanceof Error?p.message:String(p))}if(Xee(s)){let p=String(s.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(s={...s,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!i.readOnly)try{Fe(e,c?{...l,env:s}:s,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${p} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(f){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,f instanceof Error?f.message:String(f))}}let u=Qee(s.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(u!==null&&(s={...s,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:u},!i.readOnly))try{Fe(e,c?{...l,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",u,"from a retired hub host:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,p instanceof Error?p.message:String(p))}for(let p of xK)if(!wK(CK(e,p))){if(s[p.key]!==p.legacy){i.readOnly||w_(e,p);continue}if(s={...s,[p.key]:this.DEFAULTS[p.key]},!i.readOnly)try{Fe(e,c?{...l,env:s}:s,{mode:384}),w_(e,p),console.warn(`[SETTINGS] Migrated ${p.key} off the old ${p.legacy}ms default to ${this.DEFAULTS[p.key]}ms:`,e)}catch(f){let m=`${p.key}\0${e}`;TK.has(m)||(TK.add(m),console.warn(`[SETTINGS] Failed to migrate ${p.key}; using the new default in memory (reported once per process):`,e,f instanceof Error?f.message:String(f)))}}let d={...this.DEFAULTS};for(let p of Object.keys(this.DEFAULTS))s[p]!==void 0&&(d[p]=Zee(s[p]));return this.finalizeSettings(d,r)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let o=this.getAllDefaults();return this.finalizeSettings(o,r)}}}});var AK=E(()=>{"use strict";zr();Me()});function Gu(t){return(t.CLAUDE_MEM_WORKER_AUTOSTART??"true").trim().toLowerCase()==="false"}var sm=E(()=>{"use strict"});var OK=E(()=>{"use strict"});function Ri(t){return t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t}var I_=E(()=>{"use strict"});import{spawn as ete,spawnSync as DK}from"node:child_process";import{existsSync as tte}from"node:fs";import{dirname as rte,extname as am,join as nte}from"node:path";function ai(t,e,r){return ete(t,e??[],{...r,windowsHide:!0})}function ote(t){return`"${t.replace(/"/g,'""')}"`}function RK(t){return PK.has(am(t).toLowerCase())}function T_(t){if(process.platform!=="win32")return[];try{let e=DK("where",[t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0});return e.status!==0||!e.stdout.trim()?[]:e.stdout.split(/\r?\n/).map(r=>r.trim()).filter(Boolean).filter(r=>tte(r))}catch{return[]}}function lte(t,e){let r=t.find(RK);if(r)return r;let i=t.find(n=>x_.has(am(n).toLowerCase()));if(i&&e){let n=e(i);if(n&&RK(n))return n}return i??t.find(n=>ite.has(am(n).toLowerCase()))??t[0]??null}function cte(t,e,r=ate){if(!/[\\/]volta[\\/]bin[\\/]/i.test(e))return null;try{let i=r(nte(rte(e),"volta.exe"),["which",t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:ste,windowsHide:!0});return i.status!==0||!i.stdout.trim()?null:i.stdout.split(/\r?\n/).map(n=>n.trim()).find(Boolean)??null}catch{return null}}function Rn(t){return lte(T_(t),e=>cte(t,e))}function Dn(t,e,r,i=process.platform){let n={...r,...i==="win32"?{windowsHide:!0}:{}};if(i==="win32"&&x_.has(am(t).toLowerCase())){let o=[t,...e].map(ote).join(" ");return{command:process.env.ComSpec??"cmd.exe",args:["/d","/s","/c",`"${o}"`],options:{...n,windowsVerbatimArguments:!0}}}return{command:t,args:[...e],options:n}}var x_,PK,ite,ste,ate,Pn=E(()=>{"use strict";x_=new Set([".cmd",".bat"]),PK=new Set([".exe",".com"]),ite=new Set([...PK,...x_]);ste=5e3,ate=(t,e,r)=>DK(t,e,r)});function wr(t=process.env){let e={};for(let[r,i]of Object.entries(t))if(i!==void 0){if(fte.has(r)){e[r]=i;continue}dte.has(r)||ute.some(n=>r.startsWith(n))||(e[r]=i)}return e}var ute,dte,pte,fte,Hs=E(()=>{"use strict";ute=["CLAUDECODE_","CLAUDE_CODE_"],dte=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),pte=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"]),fte=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",...pte])});import{spawnSync as NK}from"child_process";import{readFileSync as mte}from"fs";function KK(t,e,r){if(r.status!==0)return null;if(typeof r.stdout!="string")return b.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:t,status:r.status}),null;let i=r.stdout.trim();return i.length>0?i:null}function yte(t){C_+=1;let e=NK("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...wr(process.env),LC_ALL:"C",LANG:"C"}});return KK("powershell-cim",t,e)}function gte(t,e=!1){if(!e){let i=MK.get(t);if(i&&(t===process.pid||Date.now()-i.capturedAtMs<hte))return i.token}let r=null;try{r=yte(t)}catch(i){b.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:i instanceof Error?i.message:String(i)}),r=null}return(r!==null||t!==process.pid)&&MK.set(t,{token:r,capturedAtMs:Date.now()}),r}function jK(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){C_+=1;try{let r=mte(`/proc/${t}/stat`,"utf-8"),i=r.lastIndexOf(") ");if(i<0)return null;let o=r.slice(i+2).split(" ")[19];return o&&/^\d+$/.test(o)?o:null}catch(r){return b.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}if(process.platform==="win32")return gte(t,e);C_+=1;try{let r=NK("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...wr(process.env),LC_ALL:"C",LANG:"C"}});return KK("ps-lstart",t,r)}catch(r){return b.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}function Di(t){return jK(t,!1)}function li(t,e){if(e===null)return!0;let r=jK(t,!0);return r===null?!0:r===e}var hte,MK,C_,lm=E(()=>{"use strict";be();Hs();hte=5e3,MK=new Map,C_=0});import{execFile as bte}from"child_process";import{readdirSync as vte,readFileSync as Ete}from"fs";import{promisify as Ste}from"util";async function ci(t,e={}){let r=e.signalMode==="immediate",i=e.expectedStartToken!==void 0?e.expectedStartToken:Di(t),n=()=>li(t,i);if(!n()){b.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:t});return}if(b.debug("PROCESS",`Killing process tree rooted at PID ${t}`,{immediate:r}),process.platform==="win32"){try{await A_("taskkill",["/PID",String(t),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(o){let s=o.code,a=String(o.stderr??""),l=o instanceof Error?o.message:String(o);if(s===_te||wte.test(`${a} ${l}`)){b.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new cm(t,`taskkill failed for PID ${t} (exit ${String(s)}): ${a.trim()||l}`,{cause:o})}return}try{let o=r?"SIGKILL":"SIGTERM",s=await um(t);for(let c of s){if(!li(c.pid,c.startToken)){b.debug("PROCESS",`Skipping ${o}: descendant PID was reused since enumeration`,{pid:c.pid,rootPid:t});continue}try{process.kill(c.pid,o)}catch{}}if(n())try{process.kill(t,o)}catch(c){let u=c instanceof Error?c:new Error(String(c)),d=u.code;d!=="ESRCH"&&b.debug("PROCESS",`Failed to ${o} PID ${t}`,{code:d},u)}else b.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:t,signal:o});r||await new Promise(c=>setTimeout(c,500));let a=n()?await um(t):[],l=new Map;for(let c of s)l.set(c.pid,c.startToken);for(let c of a)l.set(c.pid,c.startToken);for(let[c,u]of l){if(!li(c,u)){b.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:c,rootPid:t});continue}try{process.kill(c,"SIGKILL")}catch{}}if(!r&&n())try{process.kill(t,"SIGKILL")}catch{}}catch(o){throw new cm(t,`tree-kill failed for PID ${t}: ${o instanceof Error?o.message:String(o)}`,{cause:o})}}async function kte(){return process.platform==="win32"?Tte():process.platform==="linux"?Ite():xte()}function Ite(){let t=[],e;try{e=vte("/proc")}catch(r){return b.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 i;try{i=Ete(`/proc/${r}/stat`,"utf-8")}catch{continue}let n=i.lastIndexOf(") ");if(n<0)continue;let o=i.slice(n+2).split(" "),s=Number.parseInt(o[1]??"",10),a=o[19];Number.isFinite(s)&&t.push({pid:Number.parseInt(r,10),ppid:s,startToken:a&&/^\d+$/.test(a)?a:null})}return t}async function xte(){let t;try{t=(await A_("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(r){return b.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(`
13
+ `)}debug(e,r,i,n){this.log(0,e,r,i,n)}info(e,r,i,n){this.log(1,e,r,i,n)}warn(e,r,i,n){this.log(2,e,r,i,n)}setErrorSink(e){v_=e}error(e,r,i,n){this.log(3,e,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(e,r,i){try{if(!v_||!(i instanceof Error))return;v_(i)}catch{}}dataIn(e,r,i,n){this.info(e,`\u2192 ${r}`,i,n)}dataOut(e,r,i,n){this.info(e,`\u2190 ${r}`,i,n)}success(e,r,i,n){this.info(e,`\u2713 ${r}`,i,n)}failure(e,r,i,n){this.error(e,`\u2717 ${r}`,i,n)}},b=new S_});function bK(t=process.env){let e=Number.parseInt(t.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=gK.min&&e<=gK.max?e:$ee}function vK(t=process.platform){return t==="win32"?8e3:5e3}function __(t=process.platform){return Mt.SESSION_INIT_HOOK_CAP-vK(t)}function ao(t){return process.platform==="win32"?Math.round(t*Mt.WINDOWS_MULTIPLIER):t}var Mt,$ee,gK,Vs=E(()=>{"use strict";Mt={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},$ee=300,gK={min:60,max:86400}});var EK=E(()=>{"use strict"});function SK(t){try{return new URL(t).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var _K=E(()=>{"use strict";be()});import{readFileSync as Fee,existsSync as wK,writeFileSync as Jee}from"fs";import{basename as zee,dirname as qee,join as k_}from"path";import{homedir as kK,hostname as Bee}from"os";function Zee(t){return typeof t=="boolean"?String(t):t}function Xee(t){let e=t.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!Yee.has(e.trim()))return!1;let r=typeof t.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?t.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||SK(r)}function CK(t,e){return k_(qee(t),`.${zee(t)}.${e.markerTag}`)}function w_(t,e){try{Jee(CK(t,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}function Qee(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===Wee||r===Vee)return Hee}catch{return null}return null}var Gee,Wee,Vee,Hee,Yee,IK,xK,TK,Ne,zr=E(()=>{"use strict";Vs();Pt();_K();Oi();Gee="security_alert",Wee="sync-hub.black-pond-afbb.workers.dev",Vee="ziczmqtpmaxbornfghye.supabase.co",Hee="https://sync.cmem.ai",Yee=new Set(["xiaomi/mimo-v2-flash:free"]);IK=18e4,xK=[{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"}];TK=new Set;Ne=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(ao(Mt.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(__()),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:k_(kK(),".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:k_(kK(),".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:Bee(),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(IK),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(IK),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 i=r?this.applyEnvOverrides(e):e;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(e){let r=this.get(e);return parseInt(r,10)}static applyEnvOverrides(e){let r={...e};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(e,r=!0,i={}){try{if(!wK(e)){let p=this.getAllDefaults();if(!i.readOnly)try{Fe(e,p,{mode:384});for(let f of xK)w_(e,f);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(f){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,f instanceof Error?f.message:String(f))}return this.finalizeSettings(p,r)}let n=Fee(e,"utf-8"),o=On(n),s=si(o),a=s!==o,l=m_(o),c=a&&Object.keys(l).some(p=>p!=="env");if(a&&!c&&!i.readOnly)try{Fe(e,s,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(p){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,p instanceof Error?p.message:String(p))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Gee&&(s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!i.readOnly))try{Fe(e,c?{...l,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,p instanceof Error?p.message:String(p))}if(Xee(s)){let p=String(s.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(s={...s,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!i.readOnly)try{Fe(e,c?{...l,env:s}:s,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${p} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(f){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,f instanceof Error?f.message:String(f))}}let u=Qee(s.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(u!==null&&(s={...s,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:u},!i.readOnly))try{Fe(e,c?{...l,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",u,"from a retired hub host:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,p instanceof Error?p.message:String(p))}for(let p of xK)if(!wK(CK(e,p))){if(s[p.key]!==p.legacy){i.readOnly||w_(e,p);continue}if(s={...s,[p.key]:this.DEFAULTS[p.key]},!i.readOnly)try{Fe(e,c?{...l,env:s}:s,{mode:384}),w_(e,p),console.warn(`[SETTINGS] Migrated ${p.key} off the old ${p.legacy}ms default to ${this.DEFAULTS[p.key]}ms:`,e)}catch(f){let m=`${p.key}\0${e}`;TK.has(m)||(TK.add(m),console.warn(`[SETTINGS] Failed to migrate ${p.key}; using the new default in memory (reported once per process):`,e,f instanceof Error?f.message:String(f)))}}let d={...this.DEFAULTS};for(let p of Object.keys(this.DEFAULTS))s[p]!==void 0&&(d[p]=Zee(s[p]));return this.finalizeSettings(d,r)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let o=this.getAllDefaults();return this.finalizeSettings(o,r)}}}});var AK=E(()=>{"use strict";zr();Me()});function Gu(t){return(t.CLAUDE_MEM_WORKER_AUTOSTART??"true").trim().toLowerCase()==="false"}var sm=E(()=>{"use strict"});var OK=E(()=>{"use strict"});function Ri(t){return t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t}var I_=E(()=>{"use strict"});import{spawn as ete,spawnSync as DK}from"node:child_process";import{existsSync as tte}from"node:fs";import{dirname as rte,extname as am,join as nte}from"node:path";function ai(t,e,r){return ete(t,e??[],{...r,windowsHide:!0})}function ote(t){return`"${t.replace(/"/g,'""')}"`}function RK(t){return PK.has(am(t).toLowerCase())}function T_(t){if(process.platform!=="win32")return[];try{let e=DK("where",[t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0});return e.status!==0||!e.stdout.trim()?[]:e.stdout.split(/\r?\n/).map(r=>r.trim()).filter(Boolean).filter(r=>tte(r))}catch{return[]}}function lte(t,e){let r=t.find(RK);if(r)return r;let i=t.find(n=>x_.has(am(n).toLowerCase()));if(i&&e){let n=e(i);if(n&&RK(n))return n}return i??t.find(n=>ite.has(am(n).toLowerCase()))??t[0]??null}function cte(t,e,r=ate){if(!/[\\/]volta[\\/]bin[\\/]/i.test(e))return null;try{let i=r(nte(rte(e),"volta.exe"),["which",t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:ste,windowsHide:!0});return i.status!==0||!i.stdout.trim()?null:i.stdout.split(/\r?\n/).map(n=>n.trim()).find(Boolean)??null}catch{return null}}function Rn(t){return lte(T_(t),e=>cte(t,e))}function Dn(t,e,r,i=process.platform){let n={...r,...i==="win32"?{windowsHide:!0}:{}};if(i==="win32"&&x_.has(am(t).toLowerCase())){let o=[t,...e].map(ote).join(" ");return{command:process.env.ComSpec??"cmd.exe",args:["/d","/s","/c",`"${o}"`],options:{...n,windowsVerbatimArguments:!0}}}return{command:t,args:[...e],options:n}}var x_,PK,ite,ste,ate,Pn=E(()=>{"use strict";x_=new Set([".cmd",".bat"]),PK=new Set([".exe",".com"]),ite=new Set([...PK,...x_]);ste=5e3,ate=(t,e,r)=>DK(t,e,r)});function wr(t=process.env){let e={};for(let[r,i]of Object.entries(t))if(i!==void 0){if(fte.has(r)){e[r]=i;continue}dte.has(r)||ute.some(n=>r.startsWith(n))||(e[r]=i)}return e}var ute,dte,pte,fte,Hs=E(()=>{"use strict";ute=["CLAUDECODE_","CLAUDE_CODE_"],dte=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),pte=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"]),fte=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",...pte])});import{spawnSync as NK}from"child_process";import{readFileSync as mte}from"fs";function KK(t,e,r){if(r.status!==0)return null;if(typeof r.stdout!="string")return b.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:t,status:r.status}),null;let i=r.stdout.trim();return i.length>0?i:null}function yte(t){C_+=1;let e=NK("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...wr(process.env),LC_ALL:"C",LANG:"C"}});return KK("powershell-cim",t,e)}function gte(t,e=!1){if(!e){let i=MK.get(t);if(i&&(t===process.pid||Date.now()-i.capturedAtMs<hte))return i.token}let r=null;try{r=yte(t)}catch(i){b.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:i instanceof Error?i.message:String(i)}),r=null}return(r!==null||t!==process.pid)&&MK.set(t,{token:r,capturedAtMs:Date.now()}),r}function jK(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){C_+=1;try{let r=mte(`/proc/${t}/stat`,"utf-8"),i=r.lastIndexOf(") ");if(i<0)return null;let o=r.slice(i+2).split(" ")[19];return o&&/^\d+$/.test(o)?o:null}catch(r){return b.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}if(process.platform==="win32")return gte(t,e);C_+=1;try{let r=NK("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...wr(process.env),LC_ALL:"C",LANG:"C"}});return KK("ps-lstart",t,r)}catch(r){return b.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}function Di(t){return jK(t,!1)}function li(t,e){if(e===null)return!0;let r=jK(t,!0);return r===null?!0:r===e}var hte,MK,C_,lm=E(()=>{"use strict";be();Hs();hte=5e3,MK=new Map,C_=0});import{execFile as bte}from"child_process";import{readdirSync as vte,readFileSync as Ete}from"fs";import{promisify as Ste}from"util";async function ci(t,e={}){let r=e.signalMode==="immediate",i=e.expectedStartToken!==void 0?e.expectedStartToken:Di(t),n=()=>li(t,i);if(!n()){b.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:t});return}if(b.debug("PROCESS",`Killing process tree rooted at PID ${t}`,{immediate:r}),process.platform==="win32"){try{await A_("taskkill",["/PID",String(t),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(o){let s=o.code,a=String(o.stderr??""),l=o instanceof Error?o.message:String(o);if(s===_te||wte.test(`${a} ${l}`)){b.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new cm(t,`taskkill failed for PID ${t} (exit ${String(s)}): ${a.trim()||l}`,{cause:o})}return}try{let o=r?"SIGKILL":"SIGTERM",s=await um(t);for(let c of s){if(!li(c.pid,c.startToken)){b.debug("PROCESS",`Skipping ${o}: descendant PID was reused since enumeration`,{pid:c.pid,rootPid:t});continue}try{process.kill(c.pid,o)}catch{}}if(n())try{process.kill(t,o)}catch(c){let u=c instanceof Error?c:new Error(String(c)),d=u.code;d!=="ESRCH"&&b.debug("PROCESS",`Failed to ${o} PID ${t}`,{code:d},u)}else b.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:t,signal:o});r||await new Promise(c=>setTimeout(c,500));let a=n()?await um(t):[],l=new Map;for(let c of s)l.set(c.pid,c.startToken);for(let c of a)l.set(c.pid,c.startToken);for(let[c,u]of l){if(!li(c,u)){b.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:c,rootPid:t});continue}try{process.kill(c,"SIGKILL")}catch{}}if(!r&&n())try{process.kill(t,"SIGKILL")}catch{}}catch(o){throw new cm(t,`tree-kill failed for PID ${t}: ${o instanceof Error?o.message:String(o)}`,{cause:o})}}async function kte(){return process.platform==="win32"?Tte():process.platform==="linux"?Ite():xte()}function Ite(){let t=[],e;try{e=vte("/proc")}catch(r){return b.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 i;try{i=Ete(`/proc/${r}/stat`,"utf-8")}catch{continue}let n=i.lastIndexOf(") ");if(n<0)continue;let o=i.slice(n+2).split(" "),s=Number.parseInt(o[1]??"",10),a=o[19];Number.isFinite(s)&&t.push({pid:Number.parseInt(r,10),ppid:s,startToken:a&&/^\d+$/.test(a)?a:null})}return t}async function xte(){let t;try{t=(await A_("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(r){return b.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(`
14
14
  `)){let i=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!i)continue;let n=i[3].trim();e.push({pid:Number.parseInt(i[1],10),ppid:Number.parseInt(i[2],10),startToken:n.length>0?n:null})}return e}async function Tte(){let t;try{t=(await A_("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 b.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 i=r.match(/^"(\d+)","(\d+)","(.*)"$/);if(!i)continue;let n=i[3].trim();e.push({pid:Number.parseInt(i[1],10),ppid:Number.parseInt(i[2],10),startToken:n.length>0?n:null})}return e}async function um(t){let e=await kte(),r=new Map;for(let s of e){let a=r.get(s.ppid);a?a.push(s):r.set(s.ppid,[s])}let i=new Set([t]),n=[],o=s=>{for(let a of r.get(s)??[])i.has(a.pid)||(i.add(a.pid),o(a.pid),n.push({pid:a.pid,startToken:a.startToken}))};return o(t),n}var A_,_te,wte,cm,Il=E(()=>{"use strict";be();lm();A_=Ste(bte),_te=128,wte=/not found|no running instance|no tasks/i,cm=class extends Error{pid;constructor(e,r,i){super(r,i),this.name="ProcessTreeKillError",this.pid=e}}});import{existsSync as LK,readFileSync as P_}from"fs";import Ate from"path";function wt(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:(b.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return b.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function dm(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(i=>!wt(i.pid)))return;await new Promise(i=>setTimeout(i,100))}}function UK(t){if(!t||!wt(t.pid))return!1;if(!t.startToken)return!0;let e=Di(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||b.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function xl(t,e=Mte){if(!UK(t))return!1;if(t.startToken||e.platform!=="linux")return!0;let r;try{r=e.readCommandLine(t.pid)}catch(n){return b.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:t.pid,error:n instanceof Error?n.message:String(n)}),!0}let i=r.split("\0").some(n=>Ate.basename(n)==="worker-service.cjs");return i||b.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:t.pid}),i}function Pi(t=Je.workerPid()){if(!LK(t))return null;let e;try{e=JSON.parse(P_(t,"utf-8"))}catch{return null}return e!==null&&xl(e)?e:null}function pm(){return O_||(O_=new D_),O_}function R_(){let t=Nte.shift();t&&t.notify()}var Ote,Rte,Dte,Pte,Mte,D_,O_,gMe,Nte,ln=E(()=>{"use strict";Pn();be();Pt();Hs();Me();lm();Il();Ote=5e3,Rte=1e3,Dte=Je.supervisorRegistry(),Pte=null;Mte={platform:process.platform,readCommandLine:t=>P_(`/proc/${t}/cmdline`,"utf-8")};D_=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=Dte){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!LK(this.registryPath)){this.persist();return}try{let i=JSON.parse(P_(this.registryPath,"utf-8")).processes??{};for(let[n,o]of Object.entries(i))this.entries.set(n,o)}catch(r){r instanceof Error?b.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):b.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&b.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}retainSupersededEntry(e,r){let i=this.entries.get(e);if(!i||i.pid===r||!wt(i.pid))return;let n=`${e}#superseded:${i.pid}`;this.entries.set(n,i);let o=this.runtimeProcesses.get(e);o&&(this.runtimeProcesses.set(n,o),this.runtimeProcesses.delete(e)),b.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:n,supersededPid:i.pid,incomingPid:r})}register(e,r,i){this.initialize(),this.retainSupersededEntry(e,r.pid),this.entries.set(e,r),i&&this.runtimeProcesses.set(e,i),this.persist()}unregister(e,r){this.initialize();let i=e,n=this.entries.get(i);r!==void 0&&n?.pid!==r&&(i=`${e}#superseded:${r}`,n=this.entries.get(i),n?.pid!==r)||n&&(this.entries.delete(i),this.runtimeProcesses.delete(i),this.persist(),n?.type==="sdk"&&R_())}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 i=Date.parse(e.startedAt),n=Date.parse(r.startedAt);return(Number.isNaN(i)?0:i)-(Number.isNaN(n)?0:n)})}getBySession(e){let r=String(e);return this.getAll().filter(i=>i.sessionId!==void 0&&String(i.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,r=0;for(let[i,n]of this.entries)wt(n.pid)||(this.entries.delete(i),this.runtimeProcesses.delete(i),e+=1,n.type==="sdk"&&(r+=1));e>0&&this.persist();for(let i=0;i<r;i+=1)R_();return e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let i=typeof e=="number"?e:Number(e)||void 0;b.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:i,pids:r.map(a=>a.pid)});let n=r.filter(a=>wt(a.pid)),o=new Map(n.map(a=>[a.pid,Di(a.pid)]));for(let a of n)try{process.platform==="win32"?await ci(a.pid,{expectedStartToken:o.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(l){l instanceof Error?l.code!=="ESRCH"&&b.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):b.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}await dm(n,Ote);let s=n.filter(a=>wt(a.pid));for(let a of s){b.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:i});let l=o.get(a.pid)??null;if(!li(a.pid,l)){b.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:i});continue}try{process.platform==="win32"?await ci(a.pid,{expectedStartToken:l}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&b.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):b.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}}if(s.length>0){let a=Date.now()+Rte;for(;Date.now()<a&&s.filter(c=>wt(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100))}for(let a of r)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of r)a.type==="sdk"&&R_();return b.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:i,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};try{Fe(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));b.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},r);try{Pte?.({errorCategory:r.code??"unknown"})}catch{}}},O_=null;gMe=180*1e3,Nte=[]});import{existsSync as Kte,readFileSync as jte,rmSync as Lte}from"fs";async function FK(t){let e=t.currentPid??process.pid,r=t.pidFilePath??Ute,i=t.registry.getAll(),n=[...i].filter(l=>l.pid!==e).sort((l,c)=>Date.parse(c.startedAt)-Date.parse(l.startedAt)),o=new Map,s=new Map;for(let l of n){if(!wt(l.pid)){t.registry.unregister(l.id);continue}s.set(l.id,Di(l.pid)),o.set(l.id,await um(l.pid));try{await $K(l,"SIGTERM")}catch(c){c instanceof Error?b.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:l.pid,pgid:l.pgid,type:l.type},c):b.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:l.pid,pgid:l.pgid,type:l.type,error:String(c)})}}await dm(n,5e3);let a=n.filter(l=>wt(l.pid)||(o.get(l.id)??[]).some(c=>wt(c.pid)));for(let l of a){let c=li(l.pid,s.get(l.id)??null);c||b.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:l.pid,type:l.type});try{c&&await $K(l,"SIGKILL")}catch(u){u instanceof Error?b.debug("SYSTEM","Failed to force kill child process",{pid:l.pid,pgid:l.pgid,type:l.type},u):b.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:l.pid,pgid:l.pgid,type:l.type,error:String(u)})}finally{$te(o.get(l.id)??[],l.pid)}}await dm(a,1e3);for(let l of n)t.registry.unregister(l.id);for(let l of i.filter(c=>c.pid===e))t.registry.unregister(l.id);M_(r,e),t.registry.pruneDeadEntries()}function M_(t,e,r=!1){if(!Kte(t))return;let i=null;try{let s=JSON.parse(jte(t,"utf-8"));i=typeof s.pid=="number"?s.pid:null}catch(s){b.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:t,error:s instanceof Error?s.message:String(s)});return}let n=e!==null&&i===e,o=i===null||!wt(i);if(!n&&!(r&&o)){b.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:t,recordedPid:i,currentPid:e});return}try{Lte(t,{force:!0})}catch(s){s instanceof Error?b.debug("SYSTEM","Failed to remove PID file",{pidFilePath:t},s):b.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:t,error:String(s)})}}function $te(t,e){for(let{pid:r,startToken:i}of t)if(!(r===e||!wt(r))){if(!li(r,i)){b.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:r,rootPid:e});continue}try{process.kill(r,"SIGKILL"),b.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:r,rootPid:e})}catch(n){let o=n instanceof Error?n.code:void 0;o!=="ESRCH"&&b.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:r,rootPid:e,errno:o})}}}async function $K(t,e){let{pid:r,pgid:i}=t;if(process.platform!=="win32"){if(typeof i=="number")try{process.kill(-i,e);return}catch(n){if((n instanceof Error?n.code:void 0)!=="ESRCH")throw n}if(e==="SIGKILL"){await ci(r,{signalMode:"immediate"});return}try{process.kill(r,e)}catch(n){if((n instanceof Error?n.code:void 0)!=="ESRCH")throw n}return}await ci(r)}var Ute,N_=E(()=>{"use strict";be();ln();Me();Il();Ute=Je.workerPid()});function Fte(){let e=pm().pruneDeadEntries();e>0&&b.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function zK(){Tl===null&&(Tl=setInterval(Fte,JK),Tl.unref(),b.debug("SYSTEM","Health checker started",{intervalMs:JK}))}function qK(){Tl!==null&&(clearInterval(Tl),Tl=null,b.debug("SYSTEM","Health checker stopped"))}var JK,Tl,BK=E(()=>{"use strict";be();ln();JK=3e4,Tl=null});import{execFile as Jte}from"child_process";import{promisify as zte}from"util";function Gte(t){let e=[];for(let r of t.split(`
15
15
  `)){let i=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);i&&e.push({pid:Number.parseInt(i[1],10),ppid:Number.parseInt(i[2],10),command:i[3].trim()})}return e}async function K_(){let t=await qte("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return Gte(t.stdout)}function j_(t,e){let r=t.filter(s=>Bte.test(s.command)&&s.pid!==e.selfPid),i=new Set(r.map(s=>s.pid)),n=r.filter(s=>!i.has(s.ppid)),o=n.filter(s=>s.ppid===e.selfPid?!1:s.ppid===1?!0:!e.isAlive(s.ppid));return{matched:r,roots:n,orphans:o}}async function GK(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 i=t.readTable??K_,n=t.isAlive??wt,o=t.killTree??(f=>ci(f,{signalMode:"graceful"})),s=t.selfPid??process.pid,a;try{a=await i()}catch(f){return b.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:f instanceof Error?f.message:String(f)}),r.skipped="unreadable",r}let{matched:l,roots:c,orphans:u}=j_(a,{isAlive:n,selfPid:s});if(r.matched=l.length,r.trees=c.length,r.orphans=u.length,u.length===0)return b.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:r.matched,trees:r.trees}),r;b.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:u.length,roots:u.map(f=>f.pid)});let d=new Set,p=8;for(let f=0;f<u.length;f+=p){let m=u.slice(f,f+p);(await Promise.allSettled(m.map(g=>o(g.pid)))).forEach((g,S)=>{let v=m[S];g.status==="fulfilled"?(r.killed+=1,d.add(v.pid)):(r.failed+=1,b.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:v.pid,ppid:v.ppid,error:g.reason instanceof Error?g.reason.message:String(g.reason)}))})}if(t.registry)for(let f of t.registry.getAll())f.type==="chroma"&&d.has(f.pid)&&(t.registry.unregister(f.id),r.unregistered+=1);return b.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:r.orphans,killed:r.killed,failed:r.failed,unregistered:r.unregistered}),r}var qte,Bte,L_=E(()=>{"use strict";be();Il();ln();qte=zte(Jte),Bte=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/});import{existsSync as Wte,readFileSync as Vte,rmSync as WK}from"fs";function $_(){return Yte}function F_(t={}){let e=t.pidFilePath??Hte;if(!Wte(e))return"missing";let r=null;try{r=JSON.parse(Vte(e,"utf-8"))}catch(n){return n instanceof Error?b.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},n):b.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(n)}),WK(e,{force:!0}),"invalid"}return xl(r)&&r?((t.logAlive??!0)&&b.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(t.removeStale===!1||(b.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),WK(e,{force:!0})),"stale")}var Hte,U_,Yte,Wu=E(()=>{"use strict";be();ln();N_();BK();L_();Me();ln();Hte=Je.workerPid(),U_=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(),F_({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,GK({registry:this.registry}).catch(r=>{b.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:r instanceof Error?r.message:String(r)})}),zK()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async i=>{if(this.shutdownInitiated){b.warn("SYSTEM",`Received ${i} but shutdown already in progress`);return}this.shutdownInitiated=!0,b.info("SYSTEM",`Received ${i}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(n){n instanceof Error?b.error("SYSTEM","Error during shutdown",{},n):b.error("SYSTEM","Error during shutdown (non-Error)",{error:String(n)});try{await this.stop()}catch(o){o instanceof Error?b.debug("SYSTEM","Supervisor shutdown fallback failed",{},o):b.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(o)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{b.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}qK(),this.stopPromise=FK({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,i){this.registry.register(e,r,i)}unregisterProcess(e,r){this.registry.unregister(e,r)}getRegistry(){return this.registry}},Yte=new U_(pm())});import{existsSync as Zte,readFileSync as Xte}from"fs";function Ht(t,e){if(!Zte(t))return e;try{return On(Xte(t,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${t}: ${r instanceof Error?r.message:String(r)}`)}}var $o=E(()=>{"use strict";Pt()});import{join as VK}from"path";import{mkdirSync as Qte,writeFileSync as ere}from"fs";import{randomUUID as tre}from"crypto";function rre(t){let e=t.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function J_(t,e){if(rre(t))return{enabled:!1,source:"DO_NOT_TRACK"};let r=t.CLAUDE_MEM_TELEMETRY?.toLowerCase();return r==="0"||r==="false"||r==="off"?{enabled:!1,source:"env"}:r==="1"||r==="true"||r==="on"?{enabled:!0,source:"env"}:e?.enabled===!0?{enabled:!0,source:"config"}:e?.enabled===!1?{enabled:!1,source:"config"}:{enabled:!0,source:"default"}}function YK(t,e){return J_(t,e).enabled}function Vu(){return VK(an(),HK)}function Fo(){let t;try{t=Ht(Vu(),null)}catch(e){let r=e instanceof Error?e:new Error(String(e));return b.warn("SYSTEM","Telemetry: corrupt telemetry.json; treating as no recorded consent",void 0,r),null}return!t||typeof t!="object"||typeof t.installId!="string"||t.enabled!==void 0&&typeof t.enabled!="boolean"?null:{enabled:t.enabled,installId:t.installId,decidedAt:typeof t.decidedAt=="string"?t.decidedAt:""}}function Cl(t){let e=an();Qte(e,{recursive:!0}),ere(VK(e,HK),JSON.stringify(t,null,2)+`
16
- `)}function fm(){let t=Fo();if(t?.installId)return t.installId;let e=tre();return Cl({installId:e,decidedAt:""}),e}var HK,mm=E(()=>{"use strict";Me();$o();be();HK="telemetry.json"});import nre from"os";function ire(t){try{if(typeof t!="string"){if(t==null)return"";try{t=String(t)}catch(r){let i=r instanceof Error?r:new Error(String(r));return b.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,i),""}}let e=t;return e.length>ZK?e.slice(0,ZK):e}catch{return""}}function ore(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=nre.homedir()||""}catch(i){let n=i instanceof Error?i:new Error(String(i));b.warn("SYSTEM","error-scrub: os.homedir() failed; skipping home-dir redaction",void 0,n),e=""}if(!e)return t;let r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return t.replace(new RegExp(r,"g"),"~")}catch(i){let n=i instanceof Error?i:new Error(String(i));return b.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,n),t.split(e).join("~")}}function sre(t){return typeof t!="string"||t.length===0?t??"":t.replace(/(?<![~\w])\/(?:[^\s/:"'()]+\/)+([^\s/:"'()]+)/g,"$1").replace(/[A-Za-z]:\\(?:[^\s\\:"'()]+\\)*([^\s\\:"'()]+)/g,"$1").replace(/\\\\[^\s\\:"'()]+(?:\\[^\s\\:"'()]+)*\\([^\s\\:"'()]+)/g,"$1")}function are(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>/^https?:\/\/hooks\.slack\.com\/services\//i.test(e)?e.replace(/^(https?:\/\/hooks\.slack\.com\/services\/)[^\s"'()]+/i,`$1${Mn}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${Mn}@`))}function lre(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function cre(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b(?:access[_-]?token|api[_-]?key|auth(?:orization)?|secret|password|passwd|jwt|session[_-]?id|token)=[^\s"'&]+/gi,e=>{let r=e.indexOf("=");return`${e.slice(0,r+1)}${Mn}`})}function ure(t){if(typeof t!="string"||t.length===0)return t??"";let e=t;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,Mn),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,Mn),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,Mn),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,Mn),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,Mn),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,Mn),e=e.replace(/\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/g,Mn),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,Mn),e=e.replace(/\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g,Mn),e}function XK(t){let e=ire(t);return e.length===0?"":(e=ore(e),e=are(e),e=sre(e),e=lre(e),e=cre(e),e=ure(e),e)}var ZK,Mn,QK=E(()=>{"use strict";be();ZK=8192,Mn="[REDACTED]"});function pre(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!dre.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>ej?i.slice(0,ej):i;e[r]=XK(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function tj(t){let e={};try{pre(t,e)}catch{}return e}var dre,ej,rj=E(()=>{"use strict";QK();dre=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","phase","install_method","interactive","provider_source","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_aborted_deadline_exceeded","outcomes_invalid_output","top_model","top_abort_reason","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),ej=200});import nj from"os";function ij(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||mre}function oj(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||hre}function sj(t){let e={};for(let r of yre)t[r]!==void 0&&(e[r]=t[r]);return e}function gre(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||nj.release().toLowerCase().includes("microsoft")}catch(t){let e=t instanceof Error?t:new Error(String(t));return b.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function aj(){return{version:fre,os:process.platform,os_version:nj.release(),is_wsl:gre(),arch:process.arch,runtime:process.versions.bun?"bun":"node",runtime_version:process.versions.bun??process.versions.node,node_version:process.versions.node,is_ci:!!process.env.CI,locale:Intl.DateTimeFormat().resolvedOptions().locale}}var fre,mre,hre,yre,lj=E(()=>{"use strict";be();fre="13.36.1",mre="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",hre="https://us.i.posthog.com";yre=["version","os","os_version","is_wsl","arch","runtime","locale","ide","provider","runtime_mode","install_method","claude_code_version","first_active_date","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs"]});async function kr(t,e,r){try{if(!YK(process.env,Fo()))return;let i=tj({...aj(),...e??{}});if(r?.person?i.$set=sj(i):i.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:t,properties:i})+`
16
+ `)}function fm(){let t=Fo();if(t?.installId)return t.installId;let e=tre();return Cl({installId:e,decidedAt:""}),e}var HK,mm=E(()=>{"use strict";Me();$o();be();HK="telemetry.json"});import nre from"os";function ire(t){try{if(typeof t!="string"){if(t==null)return"";try{t=String(t)}catch(r){let i=r instanceof Error?r:new Error(String(r));return b.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,i),""}}let e=t;return e.length>ZK?e.slice(0,ZK):e}catch{return""}}function ore(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=nre.homedir()||""}catch(i){let n=i instanceof Error?i:new Error(String(i));b.warn("SYSTEM","error-scrub: os.homedir() failed; skipping home-dir redaction",void 0,n),e=""}if(!e)return t;let r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return t.replace(new RegExp(r,"g"),"~")}catch(i){let n=i instanceof Error?i:new Error(String(i));return b.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,n),t.split(e).join("~")}}function sre(t){return typeof t!="string"||t.length===0?t??"":t.replace(/(?<![~\w])\/(?:[^\s/:"'()]+\/)+([^\s/:"'()]+)/g,"$1").replace(/[A-Za-z]:\\(?:[^\s\\:"'()]+\\)*([^\s\\:"'()]+)/g,"$1").replace(/\\\\[^\s\\:"'()]+(?:\\[^\s\\:"'()]+)*\\([^\s\\:"'()]+)/g,"$1")}function are(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>/^https?:\/\/hooks\.slack\.com\/services\//i.test(e)?e.replace(/^(https?:\/\/hooks\.slack\.com\/services\/)[^\s"'()]+/i,`$1${Mn}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${Mn}@`))}function lre(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function cre(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b(?:access[_-]?token|api[_-]?key|auth(?:orization)?|secret|password|passwd|jwt|session[_-]?id|token)=[^\s"'&]+/gi,e=>{let r=e.indexOf("=");return`${e.slice(0,r+1)}${Mn}`})}function ure(t){if(typeof t!="string"||t.length===0)return t??"";let e=t;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,Mn),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,Mn),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,Mn),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,Mn),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,Mn),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,Mn),e=e.replace(/\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/g,Mn),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,Mn),e=e.replace(/\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g,Mn),e}function XK(t){let e=ire(t);return e.length===0?"":(e=ore(e),e=are(e),e=sre(e),e=lre(e),e=cre(e),e=ure(e),e)}var ZK,Mn,QK=E(()=>{"use strict";be();ZK=8192,Mn="[REDACTED]"});function pre(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!dre.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>ej?i.slice(0,ej):i;e[r]=XK(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function tj(t){let e={};try{pre(t,e)}catch{}return e}var dre,ej,rj=E(()=>{"use strict";QK();dre=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","phase","install_method","interactive","provider_source","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_aborted_deadline_exceeded","outcomes_invalid_output","top_model","top_abort_reason","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),ej=200});import nj from"os";function ij(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||mre}function oj(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||hre}function sj(t){let e={};for(let r of yre)t[r]!==void 0&&(e[r]=t[r]);return e}function gre(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||nj.release().toLowerCase().includes("microsoft")}catch(t){let e=t instanceof Error?t:new Error(String(t));return b.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function aj(){return{version:fre,os:process.platform,os_version:nj.release(),is_wsl:gre(),arch:process.arch,runtime:process.versions.bun?"bun":"node",runtime_version:process.versions.bun??process.versions.node,node_version:process.versions.node,is_ci:!!process.env.CI,locale:Intl.DateTimeFormat().resolvedOptions().locale}}var fre,mre,hre,yre,lj=E(()=>{"use strict";be();fre="13.37.0",mre="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",hre="https://us.i.posthog.com";yre=["version","os","os_version","is_wsl","arch","runtime","locale","ide","provider","runtime_mode","install_method","claude_code_version","first_active_date","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs"]});async function kr(t,e,r){try{if(!YK(process.env,Fo()))return;let i=tj({...aj(),...e??{}});if(r?.person?i.$set=sj(i):i.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:t,properties:i})+`
17
17
  `);return}let n=ij(),o=new AbortController,s=setTimeout(()=>o.abort(),bre);try{await vre(n,t,i,o.signal)}finally{clearTimeout(s)}}catch{}}async function vre(t,e,r,i){await fetch(`${oj()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:t,event:e,distinct_id:fm(),properties:r}),signal:i})}var bre,Hu=E(()=>{"use strict";mm();rj();lj();bre=2e3});import{createHash as pNe,randomUUID as fNe}from"crypto";var cj=E(()=>{"use strict";be()});import{randomUUID as ENe}from"crypto";var uj=E(()=>{"use strict";be();cj()});import{statSync as Ere,readFileSync as Sre}from"fs";import Ys from"path";function dj(t){let e=Ys.join(t,".git"),r;try{r=Ere(e)}catch(l){return l instanceof Error&&l.code!=="ENOENT"&&b.warn("GIT","Unexpected error checking .git",{error:l instanceof Error?l.message:String(l)}),Yu}if(!r.isFile())return Yu;let i;try{i=Sre(e,"utf-8").trim()}catch(l){return b.warn("GIT","Failed to read .git file",{error:l instanceof Error?l.message:String(l)}),Yu}let n=i.match(/^gitdir:\s*(.+)$/);if(!n)return Yu;let o=Ys.resolve(Ys.dirname(e),n[1]),s=o.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(s){let l=s[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:Ys.basename(t),parentRepoPath:l,parentProjectName:Ys.basename(l)}}let a=o.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(a){let l=a[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:Ys.basename(t),parentRepoPath:l,parentProjectName:Ys.basename(l)}}return Yu}var Yu,pj=E(()=>{"use strict";be();Yu={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null}});import{basename as _re}from"path";function wre(t){let e=sn(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 fj(t,e){if(!e.length)return!1;let r=t.replace(/\\/g,"/"),i=_re(r);for(let n of e){let o=n.trim();if(o)try{let s=wre(o);if(s.test(r)||s.test(i))return!0}catch(s){b.warn("PROJECT_NAME","Invalid glob pattern",{pattern:o,error:s instanceof Error?s.message:String(s)});continue}}return!1}var mj=E(()=>{"use strict";Bu();be()});import{realpathSync as kre}from"fs";function hj(t){let e=t;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(i){return b.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:i instanceof Error?i.message:String(i)}),[]}}if(!Array.isArray(e))return e!=null&&b.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let r=[];for(let i of e){let n=typeof i?.name=="string"?i.name.trim():"",o=Array.isArray(i?.patterns)?i.patterns.filter(s=>typeof s=="string"&&s.trim()!==""):[];if(!n||o.length===0){b.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:n});continue}r.push({name:n,patterns:o})}return r}function Ire(t){try{return kre(t)}catch{return t}}function z_(t,e){if(e.length===0)return null;let r=[...new Set([t,Ire(t)])].flatMap(i=>[i,`${i.replace(/[\\/]+$/,"")}/`]);for(let i of e)if(r.some(n=>fj(n,i.patterns)))return i.name;return null}var yj=E(()=>{"use strict";mj();be()});import qr from"path";import{existsSync as xre,realpathSync as Tre,statSync as Cre}from"fs";import{homedir as Are,tmpdir as Ore}from"os";import{execFileSync as vj}from"child_process";function Ej(t){try{return vj("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 b.debug("PROJECT_NAME","git rev-parse failed, falling back to non-git root",{dir:t},r),null}}function Sj(t){try{return Tre(t)}catch{return t}}function Pre(t,e){let r=qr.relative(e,t);return r===""||!r.startsWith("..")&&!qr.isAbsolute(r)}function Mre(){return[Are(),Ore(),Ws].flatMap(t=>{let e=qr.resolve(t);return[e,Sj(e)]})}function _j(t){let e=Mre(),r=qr.resolve(t);if([qr.resolve(Ws),Sj(qr.resolve(Ws))].some(n=>Pre(r,n)))return null;for(let n=0;n<Dre;n++){if(e.includes(r))return null;let o=qr.dirname(r);if(o===r)return null;if(Rre.some(s=>xre(qr.join(r,s))))return r;r=o}return null}function B_(t,e){let r=qr.basename(e);if(r===""){if(process.platform==="win32"){let n=t.match(/^([A-Z]):\\/i);if(n){let s=`drive-${n[1].toUpperCase()}`;return b.info("PROJECT_NAME","Drive root detected",{cwd:t,projectName:s}),s}}return b.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:t}),G_}return r}function gj(){try{return Cre(Ue).mtimeMs}catch{return-1}}function wj(){let t=gj();if(t===-1)return Ne.getAllDefaults();if(hm&&hm.mtimeMs===t)return hm.settings;let e=Ne.loadFromFile(Ue);return hm={mtimeMs:gj(),settings:e},e}function Kre(){let t=process.env[Nre]??wj().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(t??"path").trim().toLowerCase()==="git-remote"}function kj(){let t=process.env[jre]??wj().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!ym||ym.raw!==t)&&(ym={raw:t,environments:hj(t)}),ym.environments}function Lre(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 i=e.replace(/\/+$/,"").replace(/\.git$/i,""),n=i.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),o=n?null:i.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),s=n?.[1]??o?.[1];if(!s)return null;let a=s.split("/").filter(l=>l&&l!=="_git");return a.length>=2?a.slice(-2).join("/"):a.length===1?a[0]:null}function Ure(t){try{let e=vj("git",["remote","get-url","origin"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return Lre(e)}catch(e){let r=e instanceof Error?e:new Error(String(e));return b.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:t},r),null}}function Ij(t){return Kre()?(q_.has(t)||q_.set(t,Ure(t)),q_.get(t)??null):null}function $re(t,e=process.platform){if(!t||t.trim()==="")return b.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:t}),G_;let r=sn(t,e),i=z_(r,kj());if(i)return i;let n=Ej(r),o=n?Ij(n):null;if(o)return o;let s=n??_j(r)??r;return B_(t,s)}function xj(t,e){return e===t?t:`${t}/${e}`}function Fre(t,e){if(!t.isSubmodule||!t.parentRepoPath)return null;let r=qr.relative(t.parentRepoPath,e);return!r||r.startsWith("..")||qr.isAbsolute(r)?null:r.split(qr.sep).join("/")}function Zu(t,e=process.platform){if(!t||t.trim()===""){let l=$re(t,e);return{primary:l,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[l],keySource:"path"}}let r=sn(t,e),i=Ej(r),n=Jre(t,r,i),o=i?Ij(i):null,s=o?bj(n,o,"git-remote"):n,a=z_(r,kj());return a?bj(s,a,"environment"):s}function bj(t,e,r){return{primary:e,parent:null,isWorktree:t.isWorktree,isSubmodule:t.isSubmodule,allProjects:[...t.allProjects.filter(i=>i!==e),e],keySource:r}}function Jre(t,e,r){let i=r?null:_j(e),n=B_(t,r??i??e),o=r??e,s=dj(o);if((s.isWorktree||s.isSubmodule)&&s.parentProjectName){let a=s.parentProjectName,l,c;return s.isSubmodule?(l=`${a}/${Fre(s,o)??n}`,c=n!==a?[n]:[]):(l=xj(a,n),c=l===a?[`${a}/${n}`]:[]),{primary:l,parent:a,isWorktree:s.isWorktree,isSubmodule:s.isSubmodule,allProjects:[...new Set([a,...c,l])].filter(u=>u!==l).concat(l),keySource:"path"}}if(i&&qr.resolve(i)!==qr.resolve(e)){let a=B_(t,e);if(a!==n&&a!==G_)return{primary:n,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a,n],keySource:"path"}}return{primary:n,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[n],keySource:"path"}}var G_,Rre,Dre,Nre,hm,jre,ym,q_,gm=E(()=>{"use strict";Bu();Me();zr();be();pj();yj();G_="unknown-project";Rre=[".claude-mem-project",".claude-mem.json"],Dre=64;Nre="CLAUDE_MEM_PROJECT_NAME_SOURCE",hm=null;jre="CLAUDE_MEM_PROJECT_ENVIRONMENTS",ym=null;q_=new Map});import cn from"path";import{homedir as zre,tmpdir as ZNe}from"os";import{existsSync as bm,writeFileSync as QNe,readFileSync as qre,unlinkSync as eKe,mkdirSync as Bre,statSync as tKe,utimesSync as Gre,copyFileSync as rKe,realpathSync as Wre}from"fs";import{execFileSync as Vre,spawnSync as Aj}from"child_process";function Hre(t){return t===void 0?Tj:Math.max(1,Math.min(Tj,t))}function Yre(t){try{return Wre(t)}catch{return null}}function W_(t){return t?/(^|[\\/])bun(\.exe)?$/i.test(t.trim()):!1}function Zre(t,e){let r=e==="win32"?"where.exe":"which",i=[t],n;try{n=Vre(r,i,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(s){return s instanceof Error?b.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r,args:i},s):b.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r,args:i},new Error(String(s))),null}return n.split(/\r?\n/).map(s=>s.trim()).find(s=>s.length>0)||null}function H_(t={}){let e=Object.keys(t).length===0;if(e&&V_!==void 0)return V_;let r=Xre(t);return e&&r!==null&&(V_=r),r}function Cj(t,e){let r=t?.trim();return r?e==="win32"?[cn.join(r,"bin","bun.exe"),cn.join(r,"bin","bun"),cn.join(r,"bun.exe")]:[cn.join(r,"bin","bun"),cn.join(r,"bun")]:[]}function Xre(t){let e=t.platform??process.platform,r=t.execPath??process.execPath;if(W_(r))return r;let i=t.env??process.env,n=t.homeDirectory??zre(),o=t.pathExists??bm,s=t.lookupInPath??Zre,a=t.realpath??Yre,l=e==="win32"?[i.BUN,i.BUN_PATH,...Cj(i.BUN_INSTALL,e),cn.join(n,".bun","bin","bun.exe"),cn.join(n,".bun","bin","bun"),i.USERPROFILE?cn.join(i.USERPROFILE,".bun","bin","bun.exe"):void 0,i.LOCALAPPDATA?cn.join(i.LOCALAPPDATA,"bun","bun.exe"):void 0,i.LOCALAPPDATA?cn.join(i.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,i.npm_config_prefix?cn.join(i.npm_config_prefix,"bun.exe"):void 0]:[i.BUN,i.BUN_PATH,...Cj(i.BUN_INSTALL,e),cn.join(n,".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun","/usr/bin/bun","/snap/bin/bun",i.npm_config_prefix?cn.join(i.npm_config_prefix,"bin","bun"):void 0];for(let d of l){let p=d?.trim();if(p&&(W_(p)&&o(p)||p.toLowerCase()==="bun"))return p}let c=s("bun",e)?.trim();if(!c||!W_(c))return null;let u=a(c)??c;return o(u)?u:null}function Rj(){if(!bm(Zs))return null;try{return JSON.parse(qre(Zs,"utf-8"))}catch(t){return t instanceof Error?b.warn("SYSTEM","Failed to parse PID file",{path:Zs},t):b.warn("SYSTEM","Failed to parse PID file",{path:Zs},new Error(String(t))),null}}function Dj(t){M_(Zs,t,!0)}function Jo(t){return process.platform==="win32"?Math.round(t*2):t}function Y_(){let t=Je.dataDir();return Bre(t,{recursive:!0}),t}function Qre(t,e,r=Y_()){let i=n=>n.replace(/'/g,"''");return`Start-Process -FilePath '${i(t)}' -ArgumentList @('"${i(e)}"','--daemon') -WorkingDirectory '${i(r)}' -WindowStyle Hidden`}function rne(t,e,r){return t?.code!=="ETIMEDOUT"?!1:e<r/2}function Pj(t,e=Jo(ene)){let r=H_();if(!r)return;let i=()=>{let a=Date.now();try{return{result:Aj(r,[t,"status"],{encoding:"utf-8",timeout:e,windowsHide:!0,env:wr({...process.env})}),elapsedMs:Date.now()-a}}catch(l){let c=l instanceof Error?l:new Error(String(l));b.debug("SYSTEM","Worker boot probe could not be launched",{scriptPath:t},c);return}},n=i();if(n===void 0||rne(n.result.error,n.elapsedMs,e)&&(b.debug("SYSTEM","Worker boot probe timed out before it could run \u2014 retrying once",{scriptPath:t,elapsedMs:n.elapsedMs,timeoutMs:e}),n=i(),n===void 0))return;let{result:o}=n;if(o.error||o.status===0)return;let s=`${o.stdout??""}${o.stderr??""}`.trim();if(s)return s.split(/\r?\n/).slice(0,tne).join(`
18
18
  `)}function nne(t=process.env){let e=t.SystemRoot||t.SYSTEMROOT;return e?`${e}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`:"powershell.exe"}function ine(t,e,r=Y_()){return["-NoProfile","-WindowStyle","Hidden","-EncodedCommand",Buffer.from(Qre(t,e,r),"utf16le").toString("base64")]}function Mj(t,e,r,i=process.platform,n){if(i==="win32"){let u=nne(r),d=ine(t,e),p=Hre(n);try{let f=Aj(u,d,{stdio:"ignore",windowsHide:!0,env:r,timeout:p,killSignal:"SIGTERM"});if(f.error)throw f.error;if(f.signal)throw new Error(`powershell Start-Process killed by signal=${f.signal} after ${p}ms`);if(f.status!==0)throw new Error(`powershell Start-Process exited ${f.status??"null"}`);return 0}catch(f){let m=f instanceof Error?f:new Error(String(f));b.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:t,powershell:u},m);return}}let o="/usr/bin/setsid",s=bm(o),a=s?o:t,c=ai(a,s?[t,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",cwd:Y_(),env:r});if(c.on("error",u=>{b.error("SYSTEM",Oj,{runtimePath:t,execPath:a},u)}),c.pid!==void 0)return c.unref(),c.pid}function Nj(t,e,r={}){$_().assertCanSpawn("worker daemon");let i=wr({...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r}),n=H_();if(!n){b.error("SYSTEM",Oj);return}return Mj(n,t,i)}function Kj(){try{if(!bm(Zs))return;let t=new Date;Gre(Zs,t,t)}catch{}}function Xu(t={}){return F_({logAlive:!1,removeStale:t.removeStale})}var Tj,mKe,Zs,Oj,V_,ene,tne,vm=E(()=>{"use strict";Pn();be();Hs();N_();Wu();uj();gm();Me();Vs();ln();Tj=ao(Mt.POWERSHELL_COMMAND);mKe=Je.dataDir(),Zs=Je.workerPid(),Oj="Bun runtime not found \u2014 install from https://bun.sh and ensure it is on PATH, under ~/.bun/bin, or set BUN / BUN_PATH / BUN_INSTALL. The worker daemon requires Bun because it uses bun:sqlite.";ene=5e3,tne=8});function Z_(t,e){if(!t||typeof t!="object"||e.has(t))return!1;if(e.add(t),t instanceof Error&&t.message.includes("ECONNREFUSED"))return!0;let r=t;return typeof r.code=="string"&&one.has(r.code)||Z_(r.cause,e)?!0:Array.isArray(r.errors)&&r.errors.some(i=>Z_(i,e))}function Al(t){return Z_(t,new Set)?!0:t instanceof Error&&t.message.includes("ECONNREFUSED")}function jj(t){let e=t?.code;return e==="EACCES"||e==="EADDRNOTAVAIL"}var one,Em,Ol=E(()=>{"use strict";one=new Set(["ECONNREFUSED","ConnectionRefused"]);Em="Set CLAUDE_MEM_WORKER_PORT to a port between 1024 and 65535 and CLAUDE_MEM_WORKER_HOST to an address of this machine (127.0.0.1 by default) in claude-mem settings"});import sne from"net";function X_(){return Ne.loadFromFile(Ue).CLAUDE_MEM_WORKER_HOST}function Lj(t){return t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t}async function ane(t,e,r="GET",i=Qu){let n=await fetch(`http://${Lj(X_())}:${t}${e}`,{method:r,signal:AbortSignal.timeout(Math.max(1,i))}),o="";try{o=await n.text()}catch{}return{ok:n.ok,statusCode:n.status,body:o}}async function Q_(t,e=Qu){let r=Date.now()+e;if(process.platform==="win32")try{let n=await fetch(`http://${Lj(X_())}:${t}/api/health`,{signal:AbortSignal.timeout(Math.max(1,r-Date.now()))});if(n.ok)return!0;b.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:t,status:n.status})}catch(n){n instanceof Error?b.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:t,message:n.message}):b.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:t,error:String(n)})}let i=await Uj(t,Math.max(1,r-Date.now()));return i==="occupied"||i==="indeterminate"}async function Uj(t,e=Qu){return(await ew(t,e)).occupancy}function ew(t,e=Qu){return e<=0?Promise.resolve({occupancy:"indeterminate"}):new Promise(r=>{let i=!1,n=!1,o=!1,s;try{s=sne.createServer()}catch{r({occupancy:"indeterminate"});return}let a=u=>{if(o){u?.();return}o=!0;try{s.close(u)}catch(d){u?.(d instanceof Error?d:new Error(String(d)))}},l=setTimeout(()=>{if(n)a();else try{s.close()}catch{}c({occupancy:"indeterminate"})},e),c=u=>{i||(i=!0,clearTimeout(l),r(u))};s.once("error",u=>{if(n)a();else try{s.close()}catch{}u.code==="EADDRINUSE"?c({occupancy:"occupied"}):jj(u)?c({occupancy:"unbindable",bindErrorCode:u.code}):c({occupancy:"indeterminate"})}),s.once("listening",()=>{if(n=!0,i){a();return}try{a(u=>c({occupancy:u?"indeterminate":"free"}))}catch{c({occupancy:"indeterminate"})}});try{s.listen(t,X_())}catch{try{s.close()}catch{}c({occupancy:"indeterminate"})}})}async function $j(t,e,r,i){let n=Date.now()+r;for(;Date.now()<n;){try{let s=n-Date.now();if((await ane(t,e,"GET",Math.min(Qu,s))).ok)return!0}catch(s){s instanceof Error?b.debug("SYSTEM",i,{},s):b.debug("SYSTEM",i,{error:String(s)})}let o=Math.min(500,n-Date.now());o>0&&await new Promise(s=>setTimeout(s,o))}return!1}function zo(t,e=3e4){return $j(t,"/api/health",e,"Service not ready yet, will retry")}function Rl(t,e=3e4){return $j(t,"/api/readiness",e,"Worker not ready yet, will retry")}var Qu,ed=E(()=>{"use strict";be();zr();Me();Ol();Qu=5e3});var Fj=E(()=>{"use strict";be();Wu()});var Jj=E(()=>{"use strict";vm();ed();Fj()});import{dirname as lne,join as cne}from"path";import{mkdirSync as une,readFileSync as Sm,statSync as zj,unlinkSync as qj,utimesSync as dne,writeFileSync as pne}from"fs";function rw(){return cne(an(),"spawn.lock")}function tw(t){try{let e=JSON.parse(Sm(t,"utf-8"));return typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0?null:e.pid}catch{return null}}function hne(t){if(t===null)return null;try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}function wm(){let t=rw(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let r=0;r<2;r++)try{return une(lne(t),{recursive:!0}),pne(t,e,{flag:"wx"}),!0}catch(i){let n=i instanceof Error?i:new Error(String(i)),o=n.code;if(o!=="EEXIST")return b.warn("SYSTEM","Spawn lock write failed for a non-contention reason; failing open (spawning unlocked)",{lockPath:t,code:o},n),!0;if(r>0)return!1;let s;try{s=zj(t).mtimeMs}catch{continue}let a=tw(t),l=null;if(a===null)try{l=Sm(t,"utf-8")}catch{continue}if(Date.now()-s<=_m&&hne(a)!==!1)return!1;let u;try{u=zj(t).mtimeMs}catch{continue}if(u!==s)return!1;if(a!==null){if(tw(t)!==a)return!1}else try{if(Sm(t,"utf-8")!==l)return!1}catch{continue}try{qj(t)}catch{return!1}}return!1}function km(){let t=rw();try{if(JSON.parse(Sm(t,"utf-8")).pid!==process.pid)return;qj(t)}catch{}}async function nw(t,e=fne){let r=Date.now()+t;for(;!wm();){if(Date.now()>=r)return null;await new Promise(n=>setTimeout(n,mne))}let i=setInterval(yne,e);return i.unref(),()=>{clearInterval(i),km()}}function yne(){let t=rw();try{if(tw(t)!==process.pid)return;let e=new Date;dne(t,e,e)}catch{}}var _m,fne,mne,Im=E(()=>{"use strict";Me();be();_m=9e4,fne=_m/3,mne=250});import{execFile as gne}from"node:child_process";import{promisify as bne}from"node:util";function Bj(t){return vne.test(t.trim())}function Ene(t,e){if(!t)return!1;let r=t.toLowerCase().replace(/\\/g,"/"),i=r.indexOf("--data-dir");if(i<0)return!1;let n=r.slice(i+10).trim();if(n.startsWith('"')){let s=n.indexOf('"',1);n=s<0?n.slice(1):n.slice(1,s)}let o=e.toLowerCase().replace(/\\/g,"/");return n===o||n.startsWith(o)&&n[o.length]==="/"}function Tm(t,e){return e===void 0?t:Math.max(1,Math.min(t,e))}async function Sne(t){try{let e=await xm("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,CommandLine,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Json -Compress"],{timeout:Tm(3e4,t),windowsHide:!0,maxBuffer:33554432}),r=JSON.parse(e.stdout),i=Array.isArray(r)?r:r===null?[]:[r],n=[];for(let o of i){let s=typeof o.Name=="string"?o.Name.trim():"";if(!s)continue;let a=typeof o.ProcessId=="number"?o.ProcessId:Number.parseInt(String(o.ProcessId),10),l=typeof o.ParentProcessId=="number"?o.ParentProcessId:Number.parseInt(String(o.ParentProcessId),10);!Number.isInteger(a)||!Number.isInteger(l)||n.push({pid:a,ppid:l,name:s,cmdline:typeof o.CommandLine=="string"?o.CommandLine:null,startToken:typeof o.StartToken=="string"&&o.StartToken.length>0?o.StartToken:null})}return n}catch(e){return b.warn("PROCESS","Cannot enumerate the Windows process table with names \u2014 ghost-port reclaim disabled",{error:e instanceof Error?e.message:String(e)}),null}}async function _ne(t,e){try{let r=await xm("netstat",["-ano"],{timeout:Tm(15e3,e),windowsHide:!0,maxBuffer:16777216});return xne(r.stdout,t)}catch(r){return b.warn("PROCESS","netstat failed \u2014 ghost-port reclaim disabled for this attempt",{port:t,error:r instanceof Error?r.message:String(r)}),null}}async function wne(t,e){try{let r=await xm("lsof",["-nP",`-iTCP:${t}`,"-sTCP:LISTEN","-t"],{timeout:Tm(1e4,e),maxBuffer:1048576});return kne(r.stdout)}catch(r){let i=r;return i.code===1&&typeof i.stdout=="string"&&i.stdout.trim()===""?[]:(b.warn("PROCESS","lsof failed \u2014 cannot verify the worker port owner",{port:t,error:r instanceof Error?r.message:String(r)}),null)}}function kne(t){let e=new Set;for(let r of t.split(/\r?\n/)){let i=Number.parseInt(r.trim(),10);Number.isInteger(i)&&i>0&&e.add(i)}return[...e]}async function Ine(t,e){try{let i=(await xm("ps",["-p",String(t),"-o","command="],{timeout:Tm(5e3,e)})).stdout.trim();return i.length>0?i:null}catch{return null}}function xne(t,e){let r=new Set,i=`:${e}`;for(let n of t.split(/\r?\n/)){let o=n.trim();if(!/^TCP\b/i.test(o))continue;let s=o.split(/\s+/);if(!s[1]?.endsWith(i)||s[3]!=="LISTENING")continue;let l=Number.parseInt(s[4]??"",10);Number.isInteger(l)&&l>0&&r.add(l)}return[...r]}async function Cne(t,e){let r=e.readOwnedWorker();if(r===null||r.port!==t)return null;let i=(c,u={})=>(b.info("PROCESS","Wedged-worker reclaim declined",{port:t,pid:r.pid,reason:c,...u}),{reclaimed:!1,reason:c,killedPids:[]}),n=(e.now()-Date.parse(r.startedAt))/1e3;if(!Number.isFinite(n)||n<e.minOwnerAgeSeconds)return i("owner-booting",{ageSeconds:n,minOwnerAgeSeconds:e.minOwnerAgeSeconds});for(let c=0;c<2;c++)if(c>0&&await e.sleep(Vj),await e.probeHealth(t))return i("owner-responding");let o=await e.listOwners(t);if(o===null)return i("netstat-unreadable");if(!o.includes(r.pid))return b.info("PROCESS","Wedged-worker reclaim: our worker does not own the port \u2014 deferring to the ghost-listener check",{port:t,pid:r.pid,listeners:o}),null;let s=await e.readIdentity(r.pid),a=r.startToken!==void 0&&s.startToken!==null&&s.startToken!==r.startToken;if(a||s.cmdline===null||!Tne.test(s.cmdline))return i("owner-identity-mismatch",{tokenMismatch:a,hasCmdline:s.cmdline!==null});if(!e.hasKillBudget())return i("out-of-budget");b.warn("PROCESS","Reclaiming wedged worker: past its boot grace, silent on two health probes, and still holding the port",{port:t,pid:r.pid,ageSeconds:Math.round(n)});try{await e.killTree(r.pid,{expectedStartToken:s.startToken??r.startToken??void 0,signalMode:"graceful"})}catch(c){return b.error("PROCESS","Wedged-worker reclaim tree-kill failed",{port:t,pid:r.pid},c instanceof Error?c:new Error(String(c))),{reclaimed:!1,reason:"kill-failed",killedPids:[]}}let l=await e.listOwners(t);return l!==null&&l.length===0?(b.info("PROCESS","Wedged worker reclaimed \u2014 port is free again",{port:t,killedPids:[r.pid]}),{reclaimed:!0,killedPids:[r.pid]}):(b.warn("PROCESS","Wedged-worker reclaim killed the worker but the port is still bound",{port:t,pid:r.pid,stillOwnedBy:l}),{reclaimed:!1,reason:"still-bound",killedPids:[r.pid]})}async function Ane(t,e,r,i){let n=Di(t),o=e?(await r(i))?.find(s=>s.pid===t)?.cmdline??null:await Ine(t,i);return li(t,n)?{startToken:n,cmdline:o}:{startToken:null,cmdline:null}}async function ow(t,e={}){let r=e.isWin32??(()=>process.platform==="win32"),i=e.now??Date.now,n=e.deadlineAt??null,o=B=>n!==null&&n-i()<B,s=()=>n===null?void 0:Math.max(1,n-i());if(o(Gj))return b.info("PROCESS","Port reclaim skipped: not enough of the hook budget is left to finish one",{port:t,remainingMs:s(),neededMs:Gj}),{reclaimed:!1,reason:"out-of-budget",killedPids:[]};let a=e.listOwners??((B,Q)=>r()?_ne(B,Q):wne(B,Q)),l=B=>a(B,s()),c=e.readTable??Sne,u=()=>c(s()),d=e.killTree??((B,Q)=>ci(B,Q)),p=e.dataDir??(()=>We),f=e.readIdentity??((B,Q)=>Ane(B,r(),c,Q)),m=await Cne(t,{listOwners:l,killTree:d,readOwnedWorker:e.readOwnedWorker??Pi,probeHealth:e.probeHealth??(B=>zo(B,Wj)),readIdentity:B=>f(B,s()),minOwnerAgeSeconds:e.minOwnerAgeSeconds??bK(),now:i,sleep:e.sleep??(B=>new Promise(Q=>setTimeout(Q,B))),hasKillBudget:()=>!o(iw)});if(m!==null)return m;if(!r())return{reclaimed:!1,reason:"not-supported",killedPids:[]};let h=await l(t);if(h===null)return{reclaimed:!1,reason:"netstat-unreadable",killedPids:[]};if(h.length===0)return{reclaimed:!1,reason:"no-listener",killedPids:[]};let g=await u();if(g===null)return{reclaimed:!1,reason:"table-unreadable",killedPids:[]};if(h.filter(B=>wt(B)).length>0)return{reclaimed:!1,reason:"owner-alive",killedPids:[]};let v=new Map;for(let B of g){let Q=v.get(B.ppid);Q?Q.push(B):v.set(B.ppid,[B])}let T=new Map,O=new Set,M=B=>{for(let Q of v.get(B)??[])O.has(Q.pid)||(O.add(Q.pid),M(Q.pid),Bj(Q.name)&&T.set(Q.pid,Q))};for(let B of h)M(B);let z=p();if(z)for(let B of g)T.has(B.pid)||Bj(B.name)&&Ene(B.cmdline,z)&&T.set(B.pid,B);if(T.size===0)return b.info("PROCESS","Ghost listener owner is dead but no chroma-sidecar descendants found",{port:t,deadOwners:h,processTableRows:g.length,dataDir:z??"(unresolved)"}),{reclaimed:!1,reason:"no-chroma-descendants",killedPids:[]};b.warn("PROCESS","Reclaiming ghost listener: killing dead worker's surviving chroma sidecar chain",{port:t,deadOwners:h,targets:[...T.values()].map(B=>({pid:B.pid,name:B.name}))});let F=[];for(let B of T.values()){if(o(iw))return b.info("PROCESS","Ghost-listener reclaim stopped before a kill: the hook budget is spent",{port:t,killedPids:F}),{reclaimed:!1,reason:"out-of-budget",killedPids:F};try{await d(B.pid,{expectedStartToken:B.startToken,signalMode:"immediate"}),F.push(B.pid)}catch(Q){return b.error("PROCESS","Ghost-port reclaim tree-kill failed",{port:t,pid:B.pid},Q instanceof Error?Q:new Error(String(Q))),{reclaimed:!1,reason:"kill-failed",killedPids:F}}}let ce=await l(t);return ce!==null&&ce.length===0?(b.info("PROCESS","Ghost listener reclaimed \u2014 port is free again",{port:t,killedPids:F}),{reclaimed:!0,killedPids:F}):(b.warn("PROCESS","Ghost-port reclaim killed the sidecar chain but the port is still bound",{port:t,killedPids:F,stillOwnedBy:ce}),{reclaimed:!1,reason:"still-bound",killedPids:F})}var xm,vne,Tne,Wj,Vj,iw,Gj,sw=E(()=>{"use strict";be();Il();ln();Wu();ed();lm();Vs();Me();xm=bne(gne),vne=/^(uv|uvx|python|chroma-mcp)(\.exe)?$/i;Tne=/worker-service/i,Wj=1500,Vj=1e3,iw=5500,Gj=2*Wj+Vj+iw});import{existsSync as One,readFileSync as Rne,realpathSync as Dne}from"fs";import{createRequire as Pne}from"module";import Xs from"path";function Hj(t){try{return Dne(t)}catch{return t}}function Nne(t,e){let r=Xs.relative(e,t);return r!==""&&!r.startsWith("..")&&!Xs.isAbsolute(r)}function aw(t){let e;try{let n=JSON.parse(Rne(Xs.join(t,"package.json"),"utf-8"));e=Object.keys(n?.dependencies??{})}catch{return[]}if(e.length===0)return[];let r=Xs.join(t,"node_modules"),i=e.filter(n=>!One(Xs.join(r,...n.split("/"),"package.json")));if(e.includes("zod")&&!i.includes("zod")){let n=Pne(Xs.join(r,"noop.js")),o=Hj(Xs.join(r,"zod"));for(let s of Mne)try{let a=n.resolve(s,{paths:[r]});Nne(Hj(a),o)||i.push(s)}catch{i.push(s)}}return i}var Mne,Yj=E(()=>{"use strict";Mne=["zod/v3","zod/v4","zod/v4-mini"]});import Nt from"path";import{randomUUID as ije}from"crypto";import{readFileSync as Kne,existsSync as Om,writeFileSync as sje,renameSync as aje,mkdirSync as lje,readdirSync as jne,statSync as Lne,unlinkSync as cje}from"fs";function e1(t,e,r){let i=process.env[t];if(i){let n=parseInt(i,10);if(Number.isFinite(n)&&n>=r.min&&n<=r.max)return n;b.warn("SYSTEM",`Invalid ${t}, using default`,{value:i,min:r.min,max:r.max})}return e}function t1(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 $ne(t){return t1()?{...t,verbose:!0}:t}function Fne(t){let e={},r=t;for(let i=0;r&&i<4;i++){let n=i===0?"error":`cause${i}`;if(r instanceof Error){let o=r;e[n]={name:r.name,message:r.message,...o.code!==void 0?{code:o.code}:{}},r=r.cause;continue}e[n]=String(r);break}return e}function Jne(t,e,r){let i=typeof e.method=="string"?e.method:"GET",n=Fne(r),o=JSON.stringify(n);b.warn("SYSTEM","Worker IPC fetch failed",{url:t,method:i},o),oi(`[claude-mem] fetch verbose: ${i} ${t} ${o}
19
19
  `)}async function uw(t,e={}){let r=$ne(e);try{return await fetch(t,r)}catch(i){throw t1()&&Jne(t,e,i),i}}async function zne(t,e={},r){try{return await uw(t,{...e,signal:AbortSignal.timeout(r)})}catch(i){throw i instanceof DOMException&&i.name==="TimeoutError"?new Error(`Request timed out after ${r}ms`):i}}function qne(t,e){let r=new AbortController,i=null,n=null,o=null,s=!1,a=()=>{n!==null&&(clearTimeout(n),n=null)},l=()=>{s=!0,a(),o!==null&&(clearTimeout(o),o=null)},c=d=>{s||(i=d,l(),r.abort(d))},u=()=>{s||(a(),n=setTimeout(()=>c(new Error(`Request timed out after ${t.idleTimeoutMs}ms idle`)),t.idleTimeoutMs))};if(t.absoluteCapMs!==void 0&&t.absoluteCapMs>0){let d=t.absoluteCapMs;o=setTimeout(()=>c(new Error(`Request timed out after ${d}ms`)),d)}return u(),{signal:e?AbortSignal.any([e,r.signal]):r.signal,touch:u,pause:a,dispose:l,translate:d=>i??d}}async function Bne(t,e,r){let i=qne(r,e.signal),n;try{n=await uw(t,{...e,signal:i.signal})}catch(c){throw i.dispose(),i.translate(c)}i.touch();let o=n.body,s=o?o.getReader():null,a=!1;async function*l(){if(!s){a=!0,i.dispose();return}try{for(;;){i.touch();let c;try{c=await s.read()}catch(u){throw a=!0,i.translate(u)}if(c.done){a=!0;return}i.pause(),r.onChunk?.(c.value),yield c.value}}finally{i.dispose(),a||await s.cancel()}}return{status:n.status,statusText:n.statusText,ok:n.ok,headers:n.headers,chunks:l(),cancel:async()=>{i.dispose(),s&&!a&&(a=!0,await s.cancel())}}}async function Gne(t,e,r){let i=await Bne(t,e,r),n=new TextDecoder,o="";for await(let s of i.chunks)o+=n.decode(s,{stream:!0});return o+=n.decode(),{status:i.status,statusText:i.statusText,ok:i.ok,headers:i.headers,text:o}}function Zj(){return Nt.join(Ne.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function dw(t={}){return t.readOnly?Ne.loadFromFile(Zj(),!0,t):(Cm!==null||(Cm=Ne.loadFromFile(Zj())),Cm)}function Xj(t,e){if(!t)return null;let r=parseInt(t,10);return Number.isFinite(r)&&r>=e.min&&r<=e.max?r:null}function Wne(t,e,r){let i=process.env[t];if(i!==void 0){let s=Xj(i,r);return s!==null?s:(b.warn("SYSTEM",`Invalid ${t}, using default`,{value:i,min:r.min,max:r.max}),e)}let n=dw()[t],o=Xj(n,r);return o!==null?o:(b.warn("SYSTEM",`Invalid ${t} in settings.json, using default`,{value:n,min:r.min,max:r.max}),e)}function lo(t={}){if(!t.readOnly&&lw!==null)return lw;let e=parseInt(dw(t).CLAUDE_MEM_WORKER_PORT,10);return t.readOnly||(lw=e),e}function td(t={}){if(!t.readOnly&&cw!==null)return cw;let e=dw(t).CLAUDE_MEM_WORKER_HOST;return t.readOnly||(cw=e),e}function Vne(){return Am!==null||(Am=Wne("CLAUDE_MEM_API_TIMEOUT_MS",ao(Mt.API_REQUEST),Une)),Am}function pw(t){return`http://${Ri(td())}:${lo()}${t}`}function Dl(t,e={}){let r=e.method??"GET",i=pw(t),n={method:r};if(e.headers&&(n.headers=e.headers),e.body&&(n.body=e.body),e.idleTimeoutMs!==void 0&&e.idleTimeoutMs>0)return Gne(i,n,{idleTimeoutMs:e.idleTimeoutMs,absoluteCapMs:e.timeoutMs}).then(s=>new Response(s.text.length>0?s.text:null,{status:s.status,statusText:s.statusText,headers:s.headers}));let o=e.timeoutMs??Vne();return o>0?zne(i,n,o):uw(i,n)}function r1(t){let e=Om(Nt.join(t,"plugin","scripts"))?Nt.join(t,"plugin"):t;return Nt.join(e,"scripts","worker-service.cjs")}function fw(t,e){let r=d=>{let p=d.split("-")[0].split(".");return[parseInt(p[0],10)||0,parseInt(p[1],10)||0,parseInt(p[2],10)||0]},[i,n,o]=r(t),[s,a,l]=r(e);if(s!==i)return s-i;if(a!==n)return a-n;if(l!==o)return l-o;let c=t.includes("-")?1:0,u=e.includes("-")?1:0;return c!==u?c-u:t<e?1:t>e?-1:0}function mw(t=Nt.join(Nt.dirname(Nt.dirname(Jr)),"cache","thedotmack","claude-mem")){try{return jne(t).filter(e=>/^\d/.test(e)).map(e=>Nt.join(t,e)).filter(e=>{try{if(!Lne(e).isDirectory())return!1}catch{return!1}return!Om(Nt.join(e,".orphaned_at"))}).map(e=>({scriptPath:r1(e),version:Nt.basename(e)}))}catch{return[]}}function Qj(t){try{let e=JSON.parse(Kne(t,"utf-8"));return typeof e.version=="string"?e.version:null}catch(e){let r=e.code;return r!=="ENOENT"&&b.debug("SYSTEM","Could not read package version for worker resolution",{packageJsonPath:t,code:r}),null}}function n1(){return{cacheRoot:Nt.join(Nt.dirname(Nt.dirname(Jr)),"cache","thedotmack","claude-mem"),marketplaceRoot:Jr,cwd:process.cwd()}}function hw(t=n1()){let e=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(e){if(Om(e))return{scriptPath:e,version:null};b.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:e})}let r=[...mw(t.cacheRoot),{scriptPath:r1(Nt.join(t.marketplaceRoot,"plugin")),version:Qj(Nt.join(t.marketplaceRoot,"package.json"))},{scriptPath:Nt.join(t.cwd,"plugin","scripts","worker-service.cjs"),version:Qj(Nt.join(t.cwd,"package.json"))}];return yw(r)}function i1(t){return Nt.dirname(Nt.dirname(t))}function Hne(t){return aw(i1(t.scriptPath)).length===0}function yw(t,e=Hne){let r=t.filter(i=>Om(i.scriptPath));return r.length===0?null:(r.sort((i,n)=>i.version===null&&n.version===null?0:i.version===null?1:n.version===null?-1:fw(i.version,n.version)),r.find(e)??r[0])}function Pl(t=n1()){let e=hw(t);if(!e)return null;let r=i1(e.scriptPath);return{root:r,version:e.version,missingDependencies:aw(r)}}var Dje,Pje,Une,Mje,lw,cw,Cm,Am,Yne,Zne,Nje,Mi=E(()=>{"use strict";be();Vs();EK();zr();Me();AK();sm();OK();I_();Wu();qu();Hu();Jj();ed();Ol();vm();Im();sw();Hs();Il();Pt();Yj();I_();Dje=e1("CLAUDE_MEM_HEALTH_TIMEOUT_MS",ao(Mt.HEALTH_CHECK),{min:500,max:3e5}),Pje=e1("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",ao(Mt.HOOK_READINESS_WAIT),{min:0,max:3e5}),Une={min:500,max:3e5},Mje={min:500,max:Mt.SESSION_INIT_REQUEST_MAX};lw=null,cw=null,Cm=null,Am=null;Yne=1e3,Zne=5e3,Nje=Zne+Yne});import{existsSync as gw,readFileSync as o1}from"fs";import{homedir as Xne}from"os";import{dirname as Qne,join as un}from"path";import{fileURLToPath as eie}from"url";function bw(){return process.env.CLAUDE_CONFIG_DIR||un(Xne(),".claude")}function mr(){return un(bw(),"plugins","marketplaces","thedotmack")}function Qs(){return un(bw(),"plugins")}function Ml(){return un(Qs(),"known_marketplaces.json")}function qo(){return un(Qs(),"installed_plugins.json")}function Bo(){return un(bw(),"settings.json")}function Nl(){return un(Qs(),"cache","thedotmack","claude-mem")}function Kl(t){return un(Nl(),t)}function ea(){let t=eie(import.meta.url),e=un(Qne(t),"..","..");if(!gw(un(e,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${e}. Bundle structure may have changed \u2014 update the path walk.`);return e}function vw(){return un(ea(),"plugin")}function Go(){let t=un(vw(),".claude-plugin","plugin.json");if(gw(t))try{let r=JSON.parse(o1(t,"utf-8"));if(r.version)return r.version}catch{}let e=un(ea(),"package.json");if(gw(e))try{let r=JSON.parse(o1(e,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function s1(){return Pl()!==null}var ot,ui=E(()=>{"use strict";Pt();Mi();$o();ot=process.platform==="win32"});var l1,c1,u1,d1=E(()=>{l1=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return e=>{let r=0;for(t.lastIndex=0;t.test(e);)r+=1;return e.length-r}})(),c1=t=>t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510,u1=t=>t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141});var tie,rie,p1,nie,f1,iie,oie,sie,m1,h1,y1=E(()=>{d1();tie=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,rie=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,p1=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,nie=/\t{1,1000}/y,f1=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),iie=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,oie=new RegExp("\\p{M}+","gu"),sie={limit:1/0,ellipsis:""},m1=(t,e={},r={})=>{let i=e.limit??1/0,n=e.ellipsis??"",o=e?.ellipsisWidth??(n?m1(n,sie,r).width:0),s=0,a=r.controlWidth??0,l=r.tabWidth??8,c=r.emojiWidth??2,u=2,d=r.regularWidth??1,p=r.wideWidth??u,f=[[iie,d],[tie,s],[rie,a],[nie,l],[f1,c],[p1,p]],m=0,h=0,g=t.length,S=0,v=!1,T=g,O=Math.max(0,i-o),M=0,z=0,F=0,ce=0;e:for(;;){if(z>M||h>=g&&h>m){let B=t.slice(M,z)||t.slice(m,h);S=0;for(let Q of B.replaceAll(oie,"")){let he=Q.codePointAt(0)||0;if(c1(he)?ce=u:u1(he)?ce=p:ce=d,F+ce>O&&(T=Math.min(T,Math.max(M,m)+S)),F+ce>i){v=!0;break e}S+=Q.length,F+=ce}M=z=0}if(h>=g)break e;for(let B=0,Q=f.length;B<Q;B++){let[he,on]=f[B];if(he.lastIndex=h,he.test(t)){if(S=he===p1?l1(t.slice(h,he.lastIndex)):he===f1?1:he.lastIndex-h,ce=S*on,F+ce>O&&(T=Math.min(T,h+Math.floor((O-F)/on))),F+ce>i){v=!0;break e}F+=ce,M=m,z=h,h=m=he.lastIndex;continue e}}h+=1}return{width:v?O:F,index:v?T:g,truncated:v,ellipsed:v&&i>=o}},h1=m1});var aie,lie,Ir,Ew=E(()=>{y1();aie={limit:1/0,ellipsis:"",ellipsisWidth:0},lie=(t,e={})=>h1(t,aie,e).width,Ir=lie});function Ni(t,e,r){return String(t).normalize().split(fie).map(i=>pie(i,e,r)).join(`
@@ -70,7 +70,7 @@ ${n.stack}`:` ${n.message}`:this.getLevel()===0&&typeof n=="object"?l=`
70
70
  `,"utf8")}catch(m){let _=m instanceof Error?m:new Error(String(m));Kt(`[LOGGER] Failed to write to log file: ${_.message}
71
71
  ${_.stack??""}
72
72
  `)}else Kt(f+`
73
- `)}debug(r,i,o,t){this.log(0,r,i,o,t)}info(r,i,o,t){this.log(1,r,i,o,t)}warn(r,i,o,t){this.log(2,r,i,o,t)}setErrorSink(r){Vl=r}error(r,i,o,t){this.log(3,r,i,o,t),this.routeErrorToSink(i,o,t)}routeErrorToSink(r,i,o){try{if(!Vl||!(o instanceof Error))return;Vl(o)}catch{}}dataIn(r,i,o,t){this.info(r,`\u2192 ${i}`,o,t)}dataOut(r,i,o,t){this.info(r,`\u2190 ${i}`,o,t)}success(r,i,o,t){this.info(r,`\u2713 ${i}`,o,t)}failure(r,i,o,t){this.error(r,`\u2717 ${i}`,o,t)}},uE=new Bl;function sg(e){try{return new URL(e).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var mE="security_alert",pE="sync-hub.black-pond-afbb.workers.dev",gE="ziczmqtpmaxbornfghye.supabase.co",_E="https://sync.cmem.ai",vE=new Set(["xiaomi/mimo-v2-flash:free"]);function $E(e){return typeof e=="boolean"?String(e):e}function hE(e){let r=e.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof r!="string"||!vE.has(r.trim()))return!1;let i=typeof e.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?e.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return i===""||sg(i)}var dg=18e4,fg=[{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 pg(e,r){return Kl(dE(e),`.${lE(e)}.${r.markerTag}`)}function Gl(e,r){try{cE(pg(e,r),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var mg=new Set;function yE(e){if(typeof e!="string")return null;let r=e.trim();if(r.length===0)return null;try{let i=new URL(r).hostname;if(i===pE||i===gE)return _E}catch{return null}return null}var Xr=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(eg(io.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Qp()),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:Kl(lg(),".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:Kl(lg(),".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:fE(),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(dg),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(dg),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(r){let i=process.env[r]??this.DEFAULTS[r];return r==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(i):i}static normalizeWorkerHost(r){return r==="localhost"?"127.0.0.1":r}static finalizeSettings(r,i){let o=i?this.applyEnvOverrides(r):r;return o.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(o.CLAUDE_MEM_WORKER_HOST),o}static getInt(r){let i=this.get(r);return parseInt(i,10)}static applyEnvOverrides(r){let i={...r};for(let o of Object.keys(this.DEFAULTS))process.env[o]!==void 0&&(i[o]=process.env[o]);return i}static loadFromFile(r,i=!0,o={}){try{if(!cg(r)){let f=this.getAllDefaults();if(!o.readOnly)try{Re(r,f,{mode:384});for(let m of fg)Gl(r,m);console.warn("[SETTINGS] Created settings file with defaults:",r)}catch(m){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",r,m instanceof Error?m.message:String(m))}return this.finalizeSettings(f,i)}let t=sE(r,"utf-8"),n=jl(t),a=Jt(n),u=a!==n,c=ig(n),s=u&&Object.keys(c).some(f=>f!=="env");if(u&&!s&&!o.readOnly)try{Re(r,a,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",r)}catch(f){console.warn("[SETTINGS] Failed to auto-migrate settings file:",r,f instanceof Error?f.message:String(f))}if(a.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===mE&&(a={...a,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!o.readOnly))try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",r)}catch(f){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",r,f instanceof Error?f.message:String(f))}if(hE(a)){let f=String(a.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(a={...a,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!o.readOnly)try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${f} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,r)}catch(m){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",r,m instanceof Error?m.message:String(m))}}let l=yE(a.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null&&(a={...a,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l},!o.readOnly))try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",l,"from a retired hub host:",r)}catch(f){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",r,f instanceof Error?f.message:String(f))}for(let f of fg)if(!cg(pg(r,f))){if(a[f.key]!==f.legacy){o.readOnly||Gl(r,f);continue}if(a={...a,[f.key]:this.DEFAULTS[f.key]},!o.readOnly)try{Re(r,s?{...c,env:a}:a,{mode:384}),Gl(r,f),console.warn(`[SETTINGS] Migrated ${f.key} off the old ${f.legacy}ms default to ${this.DEFAULTS[f.key]}ms:`,r)}catch(m){let _=`${f.key}\0${r}`;mg.has(_)||(mg.add(_),console.warn(`[SETTINGS] Failed to migrate ${f.key}; using the new default in memory (reported once per process):`,r,m instanceof Error?m.message:String(m)))}}let d={...this.DEFAULTS};for(let f of Object.keys(this.DEFAULTS))a[f]!==void 0&&(d[f]=$E(a[f]));return this.finalizeSettings(d,i)}catch(t){console.warn("[SETTINGS] Failed to load settings, using defaults:",r,t instanceof Error?t.message:String(t));let n=this.getAllDefaults();return this.finalizeSettings(n,i)}}};function gg(e,r){let i;try{i=JSON.parse(e)}catch{return"Failed to parse search results."}let o=i.content;if(!Array.isArray(o)||o.length===0)return`No results found for "${r}".`;let t=o.filter(n=>n.type==="text"&&typeof n.text=="string").map(n=>n.text).join(`
73
+ `)}debug(r,i,o,t){this.log(0,r,i,o,t)}info(r,i,o,t){this.log(1,r,i,o,t)}warn(r,i,o,t){this.log(2,r,i,o,t)}setErrorSink(r){Vl=r}error(r,i,o,t){this.log(3,r,i,o,t),this.routeErrorToSink(i,o,t)}routeErrorToSink(r,i,o){try{if(!Vl||!(o instanceof Error))return;Vl(o)}catch{}}dataIn(r,i,o,t){this.info(r,`\u2192 ${i}`,o,t)}dataOut(r,i,o,t){this.info(r,`\u2190 ${i}`,o,t)}success(r,i,o,t){this.info(r,`\u2713 ${i}`,o,t)}failure(r,i,o,t){this.error(r,`\u2717 ${i}`,o,t)}},uE=new Bl;function sg(e){try{return new URL(e).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var mE="security_alert",pE="sync-hub.black-pond-afbb.workers.dev",gE="ziczmqtpmaxbornfghye.supabase.co",_E="https://sync.cmem.ai",vE=new Set(["xiaomi/mimo-v2-flash:free"]);function $E(e){return typeof e=="boolean"?String(e):e}function hE(e){let r=e.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof r!="string"||!vE.has(r.trim()))return!1;let i=typeof e.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?e.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return i===""||sg(i)}var dg=18e4,fg=[{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 pg(e,r){return Kl(dE(e),`.${lE(e)}.${r.markerTag}`)}function Gl(e,r){try{cE(pg(e,r),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var mg=new Set;function yE(e){if(typeof e!="string")return null;let r=e.trim();if(r.length===0)return null;try{let i=new URL(r).hostname;if(i===pE||i===gE)return _E}catch{return null}return null}var Xr=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(eg(io.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Qp()),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:Kl(lg(),".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:Kl(lg(),".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:fE(),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(dg),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(dg),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(r){let i=process.env[r]??this.DEFAULTS[r];return r==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(i):i}static normalizeWorkerHost(r){return r==="localhost"?"127.0.0.1":r}static finalizeSettings(r,i){let o=i?this.applyEnvOverrides(r):r;return o.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(o.CLAUDE_MEM_WORKER_HOST),o}static getInt(r){let i=this.get(r);return parseInt(i,10)}static applyEnvOverrides(r){let i={...r};for(let o of Object.keys(this.DEFAULTS))process.env[o]!==void 0&&(i[o]=process.env[o]);return i}static loadFromFile(r,i=!0,o={}){try{if(!cg(r)){let f=this.getAllDefaults();if(!o.readOnly)try{Re(r,f,{mode:384});for(let m of fg)Gl(r,m);console.warn("[SETTINGS] Created settings file with defaults:",r)}catch(m){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",r,m instanceof Error?m.message:String(m))}return this.finalizeSettings(f,i)}let t=sE(r,"utf-8"),n=jl(t),a=Jt(n),u=a!==n,c=ig(n),s=u&&Object.keys(c).some(f=>f!=="env");if(u&&!s&&!o.readOnly)try{Re(r,a,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",r)}catch(f){console.warn("[SETTINGS] Failed to auto-migrate settings file:",r,f instanceof Error?f.message:String(f))}if(a.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===mE&&(a={...a,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!o.readOnly))try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",r)}catch(f){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",r,f instanceof Error?f.message:String(f))}if(hE(a)){let f=String(a.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(a={...a,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!o.readOnly)try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${f} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,r)}catch(m){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",r,m instanceof Error?m.message:String(m))}}let l=yE(a.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null&&(a={...a,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l},!o.readOnly))try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",l,"from a retired hub host:",r)}catch(f){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",r,f instanceof Error?f.message:String(f))}for(let f of fg)if(!cg(pg(r,f))){if(a[f.key]!==f.legacy){o.readOnly||Gl(r,f);continue}if(a={...a,[f.key]:this.DEFAULTS[f.key]},!o.readOnly)try{Re(r,s?{...c,env:a}:a,{mode:384}),Gl(r,f),console.warn(`[SETTINGS] Migrated ${f.key} off the old ${f.legacy}ms default to ${this.DEFAULTS[f.key]}ms:`,r)}catch(m){let _=`${f.key}\0${r}`;mg.has(_)||(mg.add(_),console.warn(`[SETTINGS] Failed to migrate ${f.key}; using the new default in memory (reported once per process):`,r,m instanceof Error?m.message:String(m)))}}let d={...this.DEFAULTS};for(let f of Object.keys(this.DEFAULTS))a[f]!==void 0&&(d[f]=$E(a[f]));return this.finalizeSettings(d,i)}catch(t){console.warn("[SETTINGS] Failed to load settings, using defaults:",r,t instanceof Error?t.message:String(t));let n=this.getAllDefaults();return this.finalizeSettings(n,i)}}};function gg(e,r){let i;try{i=JSON.parse(e)}catch{return"Failed to parse search results."}let o=i.content;if(!Array.isArray(o)||o.length===0)return`No results found for "${r}".`;let t=o.filter(n=>n.type==="text"&&typeof n.text=="string").map(n=>n.text).join(`
74
74
  `).trim();return t||`No results found for "${r}".`}var _g="claude";function EE(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function vg(e){if(!e)return _g;let r=EE(e);return r?r==="transcript"||r.includes("codex")?"codex":r.includes("cursor")?"cursor":r.includes("claude")?"claude":r.includes("kimi")?"kimi":r==="pi-mono"?"pi":r==="agy"||r==="antigravity"||r.startsWith("antigravity-")?"antigravity-cli":r:_g}var bE=new Set(["ECONNREFUSED","ConnectionRefused"]);function Jl(e,r){if(!e||typeof e!="object"||r.has(e))return!1;if(r.add(e),e instanceof Error&&e.message.includes("ECONNREFUSED"))return!0;let i=e;return typeof i.code=="string"&&bE.has(i.code)||Jl(i.cause,r)?!0:Array.isArray(i.errors)&&i.errors.some(o=>Jl(o,r))}function Wl(e){return Jl(e,new Set)?!0:e instanceof Error&&e.message.includes("ECONNREFUSED")}function $g(e){return e.startsWith("[")&&e.endsWith("]")?e:e.includes(":")?`[${e}]`:e}var IE=[500,1e3,2e3,3e3,4e3];async function hg(e,r=IE){for(let i of r)if(await new Promise(o=>setTimeout(o,i)),!await e())return}function kE(){let e=SE(Xr.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),r=Xr.loadFromFile(e);return`http://${$g(r.CLAUDE_MEM_WORKER_HOST)}:${r.CLAUDE_MEM_WORKER_PORT}`}var Sg=kE(),yg=1e3,Wt="opencode",xE=new Map([["read","Read"],["write","Write"],["edit","Edit"]]),kg={"Content-Type":"application/json"},xg=5e3;function Hl(e){return e instanceof Error?e.message:String(e)}async function Eg(e,r,i){try{let o=await e(`${Sg}${r}`,{method:"POST",headers:kg,body:i,signal:AbortSignal.timeout(xg)});return o.ok||console.warn(`[claude-mem] Worker POST ${r} returned ${o.status}`),!1}catch(o){return Wl(o)?!0:(console.warn(`[claude-mem] Worker POST ${r} failed: ${Hl(o)}`),!1)}}async function ao(e,r){let i=JSON.stringify({...r,platformSource:vg(Wt)}),o=fetch;await Eg(o,e,i)&&hg(()=>Eg(o,e,i))}async function bg(e){try{let r=await fetch(`${Sg}${e}`,{headers:kg,signal:AbortSignal.timeout(xg)});return r.ok?await r.text():(console.warn(`[claude-mem] Worker GET ${e} returned ${r.status}`),null)}catch(r){return Wl(r)||console.warn(`[claude-mem] Worker GET ${e} failed: ${Hl(r)}`),null}}var ot=new Map,Dg=1e3,je=new Map,DE=6e4;function AE(e){if(!ot.has(e)){for(;ot.size>=Dg;){let r=ot.keys().next().value;if(r!==void 0)ot.delete(r);else break}ot.set(e,`opencode-${e}-${Date.now()}`)}return ot.get(e)}function uo(e){return AE(e)}async function OE(e,r,i){let o=uo(e);await ao("/api/sessions/init",{contentSessionId:o,prompt:i,cwd:r,platform_source:Wt})}function Ig(e){return e.length>yg?e.slice(0,yg):e}async function wE(e,r,i){let o=e?.session;if(typeof o?.messages!="function")return"";try{let{data:t}=await o.messages({path:{id:r},query:{directory:i}}),n=null;for(let a of t??[]){let u=a.info?.time?.completed;if(a.info?.role!=="assistant"||a.info.summary===!0||typeof u!="number")continue;let c=(a.parts??[]).filter(s=>s.type==="text"&&s.ignored!==!0&&typeof s.text=="string").map(s=>s.text).join(`
75
75
  `).trim();c&&(!n||u>=n.completed)&&(n={completed:u,text:c})}return n?.text??""}catch(t){return console.warn(`[claude-mem] OpenCode message list failed for ${r}: ${Hl(t)}`),""}}function so(e){function r(o,t){let n=je.get(o);if(n&&(n.failedAt===void 0||Date.now()-n.failedAt<DE))return n.request;for(je.delete(o);je.size>=Dg;){let u=je.keys().next().value;if(u===void 0)break;je.delete(u)}let a={request:bg(`/api/context/inject?cwd=${encodeURIComponent(t)}&platformSource=${Wt}`)};return je.set(o,a),a.request.then(u=>{u||(a.failedAt=Date.now())}),a.request}async function i(o,t={}){let n=uo(o);await ao("/api/sessions/summarize",{contentSessionId:n,last_assistant_message:t.lastAssistantMessage??await wE(e.client,o,e.directory),cwd:e.directory,platform_source:Wt})}return{async captureTool({tool:o,sessionID:t,args:n,output:a}){let u=uo(t),c=n||{};if(o==="apply_patch"&&typeof c.patchText=="string"){let{patchText:s,...l}=c;c={...l,patch:s}}await ao("/api/sessions/observations",{contentSessionId:u,tool_name:xE.get(o)??o,tool_input:c,tool_response:Ig(a||""),cwd:e.directory,platform_source:Wt})},async captureUserPrompt(o,t){await OE(o,e.directory,t)},async captureAssistantMessage(o,t){let n=uo(o);t&&await ao("/api/sessions/observations",{contentSessionId:n,tool_name:"assistant_message",tool_input:{},tool_response:Ig(t),cwd:e.directory,platform_source:Wt})},captureSummary:i,forgetMemoryContext(o){je.delete(o)},forgetSession(o){ot.delete(o),je.delete(o)},memoryContext(o){return r(o,e.directory)},async search(o){if(!o)return"Please provide a search query.";let t=await bg(`/api/search/observations?query=${encodeURIComponent(o)}&limit=10`);return t?gg(t,o):"claude-mem worker is not running. Start it with: npx claude-mem start"}}}function Ag(e){return(e||[]).filter(r=>r.type==="text"&&typeof r.text=="string").map(r=>r.text).join(`
76
76
  `)}function Og(e){console.log(`[claude-mem] OpenCode plugin loading (directory: ${e.directory})`);let r=so(e);return{"tool.execute.after":async(i,o)=>{await r.captureTool({tool:i.tool,sessionID:i.sessionID,args:i.args,output:o.output||""})},"chat.message":async(i,o)=>{let t=o.message?.sessionID;if(t){if(o.message?.role==="user"){let n=Ag(o.parts).trim();n&&await r.captureUserPrompt(t,n);return}o.message?.role==="assistant"&&await r.captureAssistantMessage(t,Ag(o.parts))}},"experimental.session.compacting":async i=>{r.forgetMemoryContext(i.sessionID),await r.captureSummary(i.sessionID)},"experimental.chat.system.transform":async(i,o)=>{let t=await r.memoryContext(i.sessionID??"");t?.trim()&&o.system.push(t)},event:async({event:i})=>{let o=i?.type,t=i?.properties?.sessionID||i?.properties?.info?.id;if(t)switch(o){case"session.idle":{await r.captureSummary(t);break}case"session.deleted":{r.forgetSession(t);break}default:break}},tool:{claude_mem_search:{description:"Search claude-mem memory database for past observations, sessions, and context",args:{query:no.string().describe("Search query for memory observations")},execute:async i=>r.search(String(i.query||""))}}}}import Fx from"path";import{existsSync as Gx,readFileSync as Kx,writeFileSync as Jx,mkdirSync as Wx}from"fs";var Xl="<claude-mem-context>",wg="</claude-mem-context>";var Ug="claude-mem",UE=1e4,TE=1e3;function Yl(e){if(e instanceof Error)return e.message;let r=e?.message;return typeof r=="string"?r:String(e)}function CE(e){for(let r=e.length-1;r>=0;r--){let i=e[r];i?.type==="text"&&i.text?.startsWith(Xl)&&e.splice(r,1)}}function ME(e,r){return new Promise(i=>{let o=()=>{clearTimeout(t),r.removeEventListener("abort",o),i()},t=setTimeout(o,e);t.unref?.(),r.addEventListener("abort",o,{once:!0})})}async function zE(e,r,i,o){for(;!i.aborted;){try{for await(let t of e({signal:i})){if(i.aborted)break;r(t)}}catch(t){i.aborted||console.warn(`[claude-mem] OpenCode event stream failed: ${Yl(t)}`)}i.aborted||await ME(o,i)}}function NE(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let r=e;if(typeof r.content=="string"&&r.content.trim())return r.content;if(Array.isArray(r.content)){let i=r.content.filter(o=>o?.type==="text"&&typeof o.text=="string").map(o=>o.text).join(`
package/dsh/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claude-mem/dsh",
3
- "version": "13.36.1",
3
+ "version": "13.37.0",
4
4
  "private": true,
5
5
  "description": "First-party DeepSeek Harness memory integration, based on Bleed00/dsh-claude-mem",
6
6
  "type": "module",
@@ -3,7 +3,7 @@
3
3
  "name": "Claude-Mem (Persistent Memory)",
4
4
  "description": "OpenClaw plugin for Claude-Mem. Records observations from embedded runner sessions and streams them to messaging channels.",
5
5
  "kind": "memory",
6
- "version": "13.36.1",
6
+ "version": "13.37.0",
7
7
  "license": "Apache-2.0",
8
8
  "author": "thedotmack",
9
9
  "homepage": "https://claude-mem.ai",
package/package.json CHANGED
@@ -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
  "keywords": [
6
6
  "claude",
@@ -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"