claude-mem 13.36.0 → 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.0",
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.0",
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.0",
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.0",
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.0-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}