claude-mem 13.29.0 → 13.30.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.
Files changed (59) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/README.md +1 -1
  5. package/dist/bug-report/index.js +1 -1
  6. package/dist/npx-cli/index.js +307 -307
  7. package/dist/opencode-plugin/index.js +11 -11
  8. package/openclaw/openclaw.plugin.json +1 -1
  9. package/package.json +1 -1
  10. package/plugin/.claude-plugin/plugin.json +1 -1
  11. package/plugin/.codex-plugin/plugin.json +1 -1
  12. package/plugin/modes/code--ar.json +1 -1
  13. package/plugin/modes/code--bn.json +1 -1
  14. package/plugin/modes/code--cs.json +1 -1
  15. package/plugin/modes/code--da.json +1 -1
  16. package/plugin/modes/code--de.json +1 -1
  17. package/plugin/modes/code--el.json +1 -1
  18. package/plugin/modes/code--es.json +1 -1
  19. package/plugin/modes/code--fi.json +1 -1
  20. package/plugin/modes/code--fr.json +1 -1
  21. package/plugin/modes/code--he.json +1 -1
  22. package/plugin/modes/code--hi.json +1 -1
  23. package/plugin/modes/code--hu.json +1 -1
  24. package/plugin/modes/code--id.json +1 -1
  25. package/plugin/modes/code--it.json +1 -1
  26. package/plugin/modes/code--ja.json +1 -1
  27. package/plugin/modes/code--ko.json +1 -1
  28. package/plugin/modes/code--nl.json +1 -1
  29. package/plugin/modes/code--no.json +1 -1
  30. package/plugin/modes/code--pl.json +1 -1
  31. package/plugin/modes/code--pt-br.json +1 -1
  32. package/plugin/modes/code--ro.json +1 -1
  33. package/plugin/modes/code--ru.json +1 -1
  34. package/plugin/modes/code--sv.json +1 -1
  35. package/plugin/modes/code--th.json +1 -1
  36. package/plugin/modes/code--tr.json +1 -1
  37. package/plugin/modes/code--uk.json +1 -1
  38. package/plugin/modes/code--ur.json +1 -1
  39. package/plugin/modes/code--vi.json +1 -1
  40. package/plugin/modes/code--zh.json +1 -1
  41. package/plugin/modes/code.json +1 -1
  42. package/plugin/modes/email-investigation.json +1 -1
  43. package/plugin/modes/law-study.json +1 -1
  44. package/plugin/modes/meme-tokens.json +1 -1
  45. package/plugin/package.json +1 -1
  46. package/plugin/scripts/context-generator.cjs +51 -51
  47. package/plugin/scripts/context-generator.cjs.map +3 -3
  48. package/plugin/scripts/mcp-server.cjs +41 -40
  49. package/plugin/scripts/mcp-server.cjs.map +3 -3
  50. package/plugin/scripts/server-service.cjs +155 -150
  51. package/plugin/scripts/server-service.cjs.map +3 -3
  52. package/plugin/scripts/transcript-watcher.cjs +27 -26
  53. package/plugin/scripts/transcript-watcher.cjs.map +3 -3
  54. package/plugin/scripts/worker-service.cjs +518 -510
  55. package/plugin/scripts/worker-service.cjs.map +3 -3
  56. package/plugin/sqlite/SessionStore.js +131 -126
  57. package/plugin/sqlite/SessionStore.js.map +3 -3
  58. package/plugin/sqlite/observations/files.js +4 -4
  59. package/plugin/sqlite/observations/files.js.map +1 -1
@@ -9,7 +9,7 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "claude-mem",
12
- "version": "13.29.0",
12
+ "version": "13.30.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.29.0",
3
+ "version": "13.30.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.29.0",
3
+ "version": "13.30.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across 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.29.0-green.svg" alt="Version">
62
+ <img src="https://img.shields.io/badge/version-13.30.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 E=p instanceof Error?p:new Error(String(p));hn(`[LOGGER] Failed to write to log file: ${E.message}
102
102
  ${E.stack??""}
103
103
  `)}else hn(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){Kh=t}error(t,r,i,n){this.log(3,t,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(t,r,i){try{if(!Kh||!(i instanceof Error))return;Kh(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)}},bme=new qh;function QC(e){try{return new URL(e).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var Tme="security_alert",Dme="sync-hub.black-pond-afbb.workers.dev",kme="https://sync.cmem.ai",Lme=new Set(["xiaomi/mimo-v2-flash:free"]);function Ime(e){let t=e.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof t!="string"||!Lme.has(t.trim()))return!1;let r=typeof e.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?e.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||QC(r)}var rw=18e4,iw=[{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 sw(e,t){return Yh(Ame(e),`.${wme(e)}.${t.markerTag}`)}function Zh(e,t){try{Cme(sw(e,t),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var nw=new Set;function Rme(e){if(typeof e!="string")return null;let t=e.trim();if(t.length===0)return null;try{if(new URL(t).hostname===Dme)return kme}catch{return null}return null}var qa=class{static DEFAULTS={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(WC(Ka.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(GC()),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_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_DATA_DIR:Yh(tw(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_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_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:Yh(tw(),".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_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_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_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:Ome(),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(rw),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(rw),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_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){try{if(!ew(t)){let f=this.getAllDefaults();try{Pr(t,f,{mode:384});for(let h of iw)Zh(t,h);console.warn("[SETTINGS] Created settings file with defaults:",t)}catch(h){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,h instanceof Error?h.message:String(h))}return this.finalizeSettings(f,r)}let i=Sme(t,"utf-8"),n=Gh(i),s=pn(n),o=s!==n,a=qC(n),l=o&&Object.keys(a).some(f=>f!=="env");if(o&&!l)try{Pr(t,s,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(f){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,f instanceof Error?f.message:String(f))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Tme){s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{Pr(t,l?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",t)}catch(f){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",t,f instanceof Error?f.message:String(f))}}if(Ime(s)){let f=String(s.CLAUDE_MEM_OPENROUTER_MODEL).trim();s={...s,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL};try{Pr(t,l?{...a,env:s}:s,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${f} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,t)}catch(h){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",t,h instanceof Error?h.message:String(h))}}let c=Rme(s.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(c!==null){s={...s,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:c};try{Pr(t,l?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL off the legacy workers.dev host:",t)}catch(f){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",t,f instanceof Error?f.message:String(f))}}for(let f of iw)if(!ew(sw(t,f))){if(s[f.key]!==f.legacy){Zh(t,f);continue}s={...s,[f.key]:this.DEFAULTS[f.key]};try{Pr(t,l?{...a,env:s}:s,{mode:384}),Zh(t,f),console.warn(`[SETTINGS] Migrated ${f.key} off the old ${f.legacy}ms default to ${this.DEFAULTS[f.key]}ms:`,t)}catch(h){let p=`${f.key}\0${t}`;nw.has(p)||(nw.add(p),console.warn(`[SETTINGS] Failed to migrate ${f.key}; using the new default in memory (reported once per process):`,t,h instanceof Error?h.message:String(h)))}}let d={...this.DEFAULTS};for(let f of Object.keys(this.DEFAULTS))s[f]!==void 0&&(d[f]=s[f]);return this.finalizeSettings(d,r)}catch(i){console.warn("[SETTINGS] Failed to load settings, using defaults:",t,i instanceof Error?i.message:String(i));let n=this.getAllDefaults();return this.finalizeSettings(n,r)}}};var mn=Pme(Mme);function ii(e){let t=Xh.homedir();return e.replace(t,"~")}async function Ume(){try{let e=Ft.join(process.cwd(),"package.json"),t=await Ur.readFile(e,"utf-8");return JSON.parse(t).version||"unknown"}catch{return"unknown"}}async function Nme(){try{let{stdout:e}=await mn("claude --version");return e.trim()}catch{return"not installed or not in PATH"}}async function xme(){try{let{stdout:e}=await mn("bun --version");return e.trim()}catch{return"not installed"}}async function $me(){try{if(process.platform==="darwin"){let{stdout:e}=await mn("sw_vers -productVersion");return`macOS ${e.trim()}`}else if(process.platform==="linux"){let{stdout:e}=await mn("uname -sr");return e.trim()}else if(process.platform==="win32"){let{stdout:e}=await mn("ver");return e.trim()}return"unknown"}catch{return"unknown"}}async function jme(e,t){try{return await(await fetch(`http://${e}:${t}/api/health`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Fme(e,t){try{return await(await fetch(`http://${e}:${t}/api/stats`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Hme(e){try{let t=Ft.join(e,"worker.pid"),r=await Ur.readFile(t,"utf-8");return JSON.parse(r)}catch{return null}}async function ow(e,t){try{return(await Ur.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){Kh=t}error(t,r,i,n){this.log(3,t,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(t,r,i){try{if(!Kh||!(i instanceof Error))return;Kh(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)}},bme=new qh;function QC(e){try{return new URL(e).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var Tme="security_alert",Dme="sync-hub.black-pond-afbb.workers.dev",kme="https://sync.cmem.ai",Lme=new Set(["xiaomi/mimo-v2-flash:free"]);function Ime(e){let t=e.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof t!="string"||!Lme.has(t.trim()))return!1;let r=typeof e.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?e.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||QC(r)}var rw=18e4,iw=[{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 sw(e,t){return Yh(Ame(e),`.${wme(e)}.${t.markerTag}`)}function Zh(e,t){try{Cme(sw(e,t),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var nw=new Set;function Rme(e){if(typeof e!="string")return null;let t=e.trim();if(t.length===0)return null;try{if(new URL(t).hostname===Dme)return kme}catch{return null}return null}var qa=class{static DEFAULTS={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(WC(Ka.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(GC()),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_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_DATA_DIR:Yh(tw(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_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_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:Yh(tw(),".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_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_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:Ome(),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(rw),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(rw),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_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){try{if(!ew(t)){let f=this.getAllDefaults();try{Pr(t,f,{mode:384});for(let h of iw)Zh(t,h);console.warn("[SETTINGS] Created settings file with defaults:",t)}catch(h){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,h instanceof Error?h.message:String(h))}return this.finalizeSettings(f,r)}let i=Sme(t,"utf-8"),n=Gh(i),s=pn(n),o=s!==n,a=qC(n),l=o&&Object.keys(a).some(f=>f!=="env");if(o&&!l)try{Pr(t,s,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(f){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,f instanceof Error?f.message:String(f))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Tme){s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{Pr(t,l?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",t)}catch(f){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",t,f instanceof Error?f.message:String(f))}}if(Ime(s)){let f=String(s.CLAUDE_MEM_OPENROUTER_MODEL).trim();s={...s,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL};try{Pr(t,l?{...a,env:s}:s,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${f} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,t)}catch(h){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",t,h instanceof Error?h.message:String(h))}}let c=Rme(s.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(c!==null){s={...s,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:c};try{Pr(t,l?{...a,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL off the legacy workers.dev host:",t)}catch(f){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",t,f instanceof Error?f.message:String(f))}}for(let f of iw)if(!ew(sw(t,f))){if(s[f.key]!==f.legacy){Zh(t,f);continue}s={...s,[f.key]:this.DEFAULTS[f.key]};try{Pr(t,l?{...a,env:s}:s,{mode:384}),Zh(t,f),console.warn(`[SETTINGS] Migrated ${f.key} off the old ${f.legacy}ms default to ${this.DEFAULTS[f.key]}ms:`,t)}catch(h){let p=`${f.key}\0${t}`;nw.has(p)||(nw.add(p),console.warn(`[SETTINGS] Failed to migrate ${f.key}; using the new default in memory (reported once per process):`,t,h instanceof Error?h.message:String(h)))}}let d={...this.DEFAULTS};for(let f of Object.keys(this.DEFAULTS))s[f]!==void 0&&(d[f]=s[f]);return this.finalizeSettings(d,r)}catch(i){console.warn("[SETTINGS] Failed to load settings, using defaults:",t,i instanceof Error?i.message:String(i));let n=this.getAllDefaults();return this.finalizeSettings(n,r)}}};var mn=Pme(Mme);function ii(e){let t=Xh.homedir();return e.replace(t,"~")}async function Ume(){try{let e=Ft.join(process.cwd(),"package.json"),t=await Ur.readFile(e,"utf-8");return JSON.parse(t).version||"unknown"}catch{return"unknown"}}async function Nme(){try{let{stdout:e}=await mn("claude --version");return e.trim()}catch{return"not installed or not in PATH"}}async function xme(){try{let{stdout:e}=await mn("bun --version");return e.trim()}catch{return"not installed"}}async function $me(){try{if(process.platform==="darwin"){let{stdout:e}=await mn("sw_vers -productVersion");return`macOS ${e.trim()}`}else if(process.platform==="linux"){let{stdout:e}=await mn("uname -sr");return e.trim()}else if(process.platform==="win32"){let{stdout:e}=await mn("ver");return e.trim()}return"unknown"}catch{return"unknown"}}async function jme(e,t){try{return await(await fetch(`http://${e}:${t}/api/health`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Fme(e,t){try{return await(await fetch(`http://${e}:${t}/api/stats`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function Hme(e){try{let t=Ft.join(e,"worker.pid"),r=await Ur.readFile(t,"utf-8");return JSON.parse(r)}catch{return null}}async function ow(e,t){try{return(await Ur.readFile(e,"utf-8")).split(`
105
105
  `).filter(n=>n.trim()).slice(-t)}catch{return[]}}async function Bme(e){try{let t=Ft.join(e,"settings.json"),r=await Ur.readFile(t,"utf-8");return{exists:!0,settings:JSON.parse(r)}}catch{return{exists:!1}}}async function zme(e){try{let t=Ft.join(e,"claude-mem.db");return{exists:!0,size:(await Ur.stat(t)).size}}catch{return{exists:!1}}}async function Gme(e){try{let t=Ft.join(e,"claude-mem.db");await Ur.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 mn(`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 Ms(e={}){let t=Xh.homedir(),r=Ft.join(t,".claude-mem"),i=Ft.join(t,".claude","plugins","marketplaces","thedotmack"),n=process.cwd(),s=n.includes("claude-mem")&&!n.includes(".claude"),[o,a,l,c]=await Promise.all([Ume(),Nme(),xme(),$me()]),d={claudeMem:o,claudeCode:a,node:process.version,bun:l},f={os:process.platform,osVersion:c,arch:process.arch},h={pluginPath:ii(i),dataDir:ii(r),cwd:ii(n),isDevMode:s},p=await Hme(r),E=qa.loadFromFile(YC),_=E.CLAUDE_MEM_WORKER_HOST,S=process.env.CLAUDE_MEM_WORKER_PORT||E.CLAUDE_MEM_WORKER_PORT,g=typeof p?.port=="number"?p.port:parseInt(S,10),[C,v]=await Promise.all([jme(_,g),Fme(_,g)]),A={running:C!==null,pid:p?.pid,port:g,uptime:v?.worker?.uptime,version:v?.worker?.version,health:C,stats:v},I=[],T=[];if(e.includeLogs!==!1){let R=new Date().toISOString().split("T")[0],N=Ft.join(r,"logs",`worker-${R}.log`),Z=Ft.join(r,"silent.log");[I,T]=await Promise.all([ow(N,50),ow(Z,50)])}let y={workerLog:I.map(ii),silentLog:T.map(ii)},[O,L]=await Promise.all([zme(r),Gme(r)]),b={path:ii(Ft.join(r,"claude-mem.db")),exists:O.exists,size:O.size,counts:L},w=await Bme(r),k={settingsPath:ii(Ft.join(r,"settings.json")),settingsExist:w.exists,settings:w.settings};return{versions:d,platform:f,paths:h,worker:A,logs:y,database:b,config:k}}function Jh(e){let t="";if(t+=`## Environment
106
106
 
107
107
  `,t+=`- **Claude-mem**: ${e.versions.claudeMem}